最近构建的MR2基本示例失败,即在psuedo分布式MR2 HDFS集群中运行pi示例,并出现以下错误:
2006年7月13日21:20:47安全性错误。UserGroupInformation:PriviledgedActionException as:root(auth:SIMPLE)cause:org.apache.hadoop.security.AccessControlException:权限被拒绝:user=root,access=EXECUTE,inode="/tmp/haooop yarn/stating":mapred:mapred:drwxrwx---
为什么会发生这种情况?
在mapred-site.xml
上添加yarn.app.mapreduce.am.staging-dir
,如下所示:
<property>
<name>yarn.app.mapreduce.am.staging-dir</name>
<value>/user</value>
</property>
此配置假定用户帐户(在您的案例中为root
)在HDFS上有其主目录/user/root
,并且临时目录将创建为/user/root/.staging
,其中用户帐户已经具有正确的权限。
有关更多信息,请查看以下链接上的"步骤4:配置暂存目录"。
- http://www.cloudera.com/content/cloudera/en/documentation/core/v5-2-x/topics/cdh_ig_yarn_cluster_deploy.html
解决方案,只需更改/tmp/hoop纱线权限:
sudo-u hdfs hadoop fs-chmod-R 777/tmp/hadoop纱线
考虑到这个目录完全是由hadoop的内部生命周期创建的,那么这个目录最终可能会有不正确的权限,这让我们拭目以待。
(欢迎评论)
首先,您需要正确创建临时文件夹。使用hadoop用户,运行以下命令:
$ hdfs dfs -mkdir /tmp
$ hdfs dfs -chmod -R 1777 /tmp
您可能想要删除/tmp目录的当前内容。
对于配置单元用户,如果您对scratchdir有类似的问题,请编辑文件hive/conf/hive-site.xml
<property>
<name>hive.exec.local.scratchdir</name>
<value>${system:java.io.tmpdir}/${system:user.name}</value>
<description>Local scratch space for Hive jobs</description>
</property>
<property>
<name>hive.downloaded.resources.dir</name>
<value>${system:java.io.tmpdir}/${hive.session.id}_resources</value>
<description>Temporary local directory for added resources in the remote file system.</description>
</property>
<property>
<name>hive.scratch.dir.permission</name>
<value>777</value>
<description>The permission for the user specific scratch directories that get created.</description>
</property>
U在HDP中遇到此错误,以运行由以下原因引起的wordcount的示例jar文件:
org.apache.haop.ipc.RemoteException(org.apache.hadop.security.AccessControlException):权限被拒绝:user=root,access=EXECUTE,inode="/user/root/.stating":hdfs:hdfs:drwx------
从/user目录上的hdfs用户chmod 777
,我可以使用我的ubuntu用户a sudoer来运行.jar文件。此外,我还可以使用hdfs用户来运行jar。