尝试以myuser身份运行作业时权限被拒绝,但错误表示root没有足够的权限

时间:2014-09-11 00:26:27

标签: java hadoop permissions hdfs

我试图让Hadoop MapReduce正常工作,但仍面临访问问题。 我不确定问题是什么,无论是配置还是别的。

例如,当我在运行时,这个wordcount

  

hadoop jar /usr/share/hadoop/hadoop-examples-1.2.1.jar wordcount /user/myuser/input.txt /user/myuser/output.txt

我收到以下错误:

14/09/10 20:15:51 INFO input.FileInputFormat: Total input paths to process : 1
14/09/10 20:15:51 INFO mapred.JobClient: Running job: job_201409101946_0010
14/09/10 20:15:52 INFO mapred.JobClient:  map 0% reduce 0%
14/09/10 20:15:52 INFO mapred.JobClient: Task Id : attempt_201409101946_0010_m_000002_0,         Status : FAILED
Error initializing attempt_201409101946_0010_m_000002_0:
org.apache.hadoop.security.AccessControlException:         
org.apache.hadoop.security.AccessControlException: Permission denied: user=root, 
access=EXECUTE, inode="job_201409101946_0010":hadoop:supergroup:rwx------
at sun.reflect.GeneratedConstructorAccessor7.newInstance(Unknown Source)
...

显然,user = root无法访问用户hadoop所拥有的目录。但问题是我作为myuser运行这个工作,我不知道为什么root会涉及到这里。你知道导致这个问题的原因吗?

1 个答案:

答案 0 :(得分:0)

首先,/user/myuser/应该是HDFS上的路径,而不是本地路径。然后,它需要存在,所以,如果不存在,则运行:

hadoop dfs -mkdir /user/myuser/然后是 hadoop dfs -chown myuser:groopOfMyuser /user/myuser/,其中groupOfMyusermyuser所属的群组。

要检查它是否存在运行: hadoop dfs -ls /user/

然后,要将文件上传到HDFS上的输入目录,请使用以下命令:

hadoop dfs -copyFromLocal /local/path/input.txt /user/myuser/

请注意,输入和输出路径应该是目录(在HDFS上)而不是文件。因此,运行程序的正确命令是:

hadoop jar /usr/share/hadoop/hadoop-examples-1.2.1.jar wordcount /user/myuser /user/myuser/output

最后,检查hadoop dirs($HADOOP_HOME)是否归myuserhadoop所有,并将其作为拥有它们的jar运行,或者更改其所有权{ {1}}。

(假设您使用旧的API,但您也可以在新API中轻松找到等效的命令。)