尝试以myuser身份运行作业时权限被拒绝,但错误表示root权限不足
我试图让Hadoop MapReduce正常工作,但仍然面临访问问题。 我不确定问题是什么,无论是配置还是别的。尝试以myuser身份运行作业时权限被拒绝,但错误表示root权限不足
当我跑步时,例如,这个单词计数
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)
...
显然,超级用户身份无法访问目录由用户拥有的Hadoop 。但问题是我以myuser的身份运行这个工作,我不确定为什么root会涉及到这个问题。你知道什么可能导致这个问题?
首先,/user/myuser/
应该是HDFS上的路径,而不是本地路径。然后,它必须存在,所以,如果没有的话,运行:
hadoop dfs -mkdir /user/myuser/
然后hadoop dfs -chown myuser:groopOfMyuser /user/myuser/
,其中groupOfMyuser
是组到myuser
所属。
要检查其是否存在运行: hadoop dfs -ls /user/
然后,将你的文件上传到HDFS输入目录,使用命令:
hadoop dfs -copyFromLocal /local/path/input.txt /user/myuser/
注意,输入和输出路径应是目录(在HDFS上)而不是文件。所以,正确的命令来运行你PROGRAMM是:
hadoop jar /usr/share/hadoop/hadoop-examples-1.2.1.jar wordcount /user/myuser /user/myuser/output
最后,检查Hadoop的迪尔斯($HADOOP_HOME
)由myuser
或hadoop
或任何拥有和经营的罐子是谁拥有它的人,或通过chown
更改其所有权。
(假设你使用旧的API,但你可以很容易地找到新的API中的等效命令,也是如此。)
/user/myuser /是HDFS上的路径,由myuser拥有。这部分应该没问题。代码实际上并没有达到任何阅读。我得到的权限是当hadoop试图访问/创建临时工作文件(很可能在临时目录中),由于某种原因,它以root身份执行。所以我认为你的答案的第二部分可能实际上解决了这个问题,我会试一试。 – 2014-09-11 14:33:25
你可以检查用户组权限为您的JAR位置 – 2014-09-11 07:08:06
这个特殊的罐子被归根,但我与另一个jar完全相同的问题,这是由myuser拥有的。 – 2014-09-11 14:34:32