使用cloudera CHD3u1 —— 使用eclipse plugin提交Job
2011-12-26 18:25
295 查看
转自:/article/3880021.html
Clouder CDH3B3 开始后hadoop.job.ugi不再生效,这意味着无法通eclipse plugin提交job和修改hdfs。
大家初次使用hadoop eclipse plugin一定在修改HDFS文件过程中出现过下面的错误
org.apache.hadoop.security.AccessControlException: Permission denied: user =test , access=WRITE, inode="pokes":hadoop:supergroup:rwxr-xr-x
问题在于我当前OS用户名为“test”,这个值是hadoop通过 System.getProperty("user.name") 获取的,如果当前用户名和HDFS文件所属用户名不一致,修改HDFS文件时则会报AccessControlException,怎么解决呢?办法是修改hadoop插件的“hadoop.job.ugi”属性为"hadoop,hadoop"就可以了,告诉hdfs我当前就是hadoop用户,这个属性也可以在代码里设置。
最近部署了一个CDH版本Hadoop集群,首先发现的是它的eclipse plugin和Apache hadoop plugin不兼容,需要手工编译(这个jar文件在这里可以下到:http://heipark.iteye.com/admin/blogs/1178756),接着发现hadoop plugin属性配置页面没有hadoop.job.ugi配置项了,在代码中设置也不好使,还是报AccessControlException。出现什么情况呢?看看cloudera的公告:
https://ccp.cloudera.com/display/CDHDOC/Incompatible+Changes 写道:
The hadoop.job.ugi configuration no longer has any effect. Instead, please use the UserGroupInformation.doAs API to impersonate other users on a non-secured cluster. (As of CDH3b3)
cdh基于安全考虑建议如下方式提交job和修改hdfs:
创建一个kerberos用户,这里叫oozie(其实它是一个开源hadoop workflow框架),然后通过代理方式提交job,即,让当前客户端用户模拟成oozie这个授权用户做操作。
具体信息参考这里:http://archive.cloudera.com/cdh/3/hadoop/Secure_Impersonation.pdf
这里说下两种基于试验目的的获取权限的方法:
关闭dfs权限管理,方法是修改hdfs-site.xml文件设置属性dfs.permissions为false;
通过代码将当前用户设置为集群管理者权限,这里我设置当操作者为hadoop,代码如下:
Java代码
<SPAN><SPAN style="FONT-SIZE: small">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(); }</SPAN></SPAN>
Clouder CDH3B3 开始后hadoop.job.ugi不再生效,这意味着无法通eclipse plugin提交job和修改hdfs。
大家初次使用hadoop eclipse plugin一定在修改HDFS文件过程中出现过下面的错误
org.apache.hadoop.security.AccessControlException: Permission denied: user =test , access=WRITE, inode="pokes":hadoop:supergroup:rwxr-xr-x
问题在于我当前OS用户名为“test”,这个值是hadoop通过 System.getProperty("user.name") 获取的,如果当前用户名和HDFS文件所属用户名不一致,修改HDFS文件时则会报AccessControlException,怎么解决呢?办法是修改hadoop插件的“hadoop.job.ugi”属性为"hadoop,hadoop"就可以了,告诉hdfs我当前就是hadoop用户,这个属性也可以在代码里设置。
最近部署了一个CDH版本Hadoop集群,首先发现的是它的eclipse plugin和Apache hadoop plugin不兼容,需要手工编译(这个jar文件在这里可以下到:http://heipark.iteye.com/admin/blogs/1178756),接着发现hadoop plugin属性配置页面没有hadoop.job.ugi配置项了,在代码中设置也不好使,还是报AccessControlException。出现什么情况呢?看看cloudera的公告:
https://ccp.cloudera.com/display/CDHDOC/Incompatible+Changes 写道:
The hadoop.job.ugi configuration no longer has any effect. Instead, please use the UserGroupInformation.doAs API to impersonate other users on a non-secured cluster. (As of CDH3b3)
cdh基于安全考虑建议如下方式提交job和修改hdfs:
创建一个kerberos用户,这里叫oozie(其实它是一个开源hadoop workflow框架),然后通过代理方式提交job,即,让当前客户端用户模拟成oozie这个授权用户做操作。
具体信息参考这里:http://archive.cloudera.com/cdh/3/hadoop/Secure_Impersonation.pdf
这里说下两种基于试验目的的获取权限的方法:
关闭dfs权限管理,方法是修改hdfs-site.xml文件设置属性dfs.permissions为false;
通过代码将当前用户设置为集群管理者权限,这里我设置当操作者为hadoop,代码如下:
Java代码
<SPAN><SPAN style="FONT-SIZE: small">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(); }</SPAN></SPAN>
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(); }
相关文章推荐
- 使用hadoop eclipse plugin提交Job并添加多个第三方jar
- 使用eclipse向yarn提交job
- jQuery Form Plugin (一) :使用AJAX提交Form表单
- git学习四:eclipse使用git提交项目
- 无插件使用Eclipse和Resin调试WEB应用(Debug Web App In Eclipse and Resin Without Plugin)
- 使用eclipse提交最新的代码
- 如何使用links配置eclipse的plugin
- eclipse使用git提交本地项目,提交至远程github上
- eclipse中svn的怎样使用,提交和更新
- eclipse下提交job时报错mapred.JobClient: No job jar file set. User classes may not be found.
- eclipse下提交job时报错mapred.JobClient: No job jar file set. User classes may not be found.
- 如何在Eclipse上使用SVN,安装、提交、拉取代码、解决冲突等操作
- Eclipse恢复已删除的文件和代码、svn使用了还原,但本地的没有提交找回没提交代码的方法
- Eclipse使用EGit插件 把本地代码提交到远程仓库
- 如何在Eclipse上使用SVN,安装、提交、拉取代码、解决冲突等操作
- 在windows上使用eclipse提交Spark任务到Spark平台上
- eclipse使用git提交项目
- eclipse使用hibernate连接mysql不使用transaction提交事物
- Windows下使用Hadoop-eclipse-plugin插件
- eclipse中git插件的使用(项目提交到码云)