我收到以下权限错误,并且不确定为什么hadoop正在尝试写入此特定文件夹:
hadoop jar /usr/lib/hadoop/hadoop-*-examples.jar pi 2 100000
Number of Maps = 2
Samples per Map = 100000
Wrote input for Map #0
Wrote input for Map #1
Starting Job
org.apache.hadoop.security.AccessControlException: org.apache.hadoop.security.AccessControlException: Permission denied: user=myuser, access=WRITE, inode="/":hdfs:supergroup:drwxr-xr-x
知道为什么要写入我的hdfs的根目录吗?
更新:暂时将hdfs root(/)设置为777权限后,我看到正在编写“/ tmp”文件夹。我想一个选项就是创建一个具有开放权限的“/ tmp”文件夹,供所有人写入,但如果将其写入用户文件夹(即/ user / myuser / tmp),从安全角度来看会很好。
答案 0 :(得分:15)
我能够通过以下设置实现此目的:
<configuration>
<property>
<name>mapreduce.jobtracker.staging.root.dir</name>
<value>/user</value>
</property>
#...
</configuration>
还需要重新启动jobtracker服务(特别感谢Jeff在Hadoop邮件列表上帮助我追踪问题!)
答案 1 :(得分:2)
1)使用以下命令在hdfs中创建{mapred.system.dir} / mapred目录
sudo -u hdfs hadoop fs -mkdir /hadoop/mapred/
2)授予mapred用户
的权限sudo -u hdfs hadoop fs -chown mapred:hadoop /hadoop/mapred/
答案 2 :(得分:0)
您还可以创建名为“hdfs”的新用户。相当简单的解决方案,但可能不那么干净。
当然,这是您使用Hue和Cloudera Hadoop Manager(CDH3)
答案 3 :(得分:0)
您需要设置hadoop根目录(/)的权限,而不是设置系统根目录的权限。即使我感到困惑,但后来意识到提到的目录是hadoop的文件系统,而不是系统的。