laotumingke 2011-09-23
Clouder CDH3B3 开始后hadoop.job.ugi不再生效,这意味着无法通eclipse plugin提交job和修改hdfs。
大家初次使用hadoop eclipse plugin一定在修改HDFS文件过程中出现过下面的错误
问题在于我当前OS用户名为“test”,这个值是hadoop通过 System.getProperty("user.name") 获取的,如果当前用户名和HDFS文件所属用户名不一致,修改HDFS文件时则会报AccessControlException,怎么解决呢?办法是修改hadoop插件的“hadoop.job.ugi”属性为"hadoop,hadoop"就可以了,告诉hdfs我当前就是hadoop用户,这个属性也可以在代码里设置。
cdh基于安全考虑建议如下方式提交job和修改hdfs:
创建一个kerberos用户,这里叫oozie(其实它是一个开源hadoop workflow框架),然后通过代理方式提交job,即,让当前客户端用户模拟成oozie这个授权用户做操作。
具体信息参考这里:http://archive.cloudera.com/cdh/3/hadoop/Secure_Impersonation.pdf
这里说下两种基于试验目的的获取权限的方法:
UserGroupInformation ugi = UserGroupInformation.createRemoteUser("hadoop"); try { ugi.doAs(new PrivilegedExceptionAction<Void>() { public Void run() throws IOException { Job job = new Job(initConf(), "tencent m/r"); // do something System.exit(job.waitForCompletion(true) ? 0 : 1); return null; } }); } catch (InterruptedException e) { e.printStackTrace(); }
-- end --