2014-09-11 38 views
1

我试图让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会涉及到这个问题。你知道什么可能导致这个问题?

+0

你可以检查用户组权限为您的JAR位置 – 2014-09-11 07:08:06

+0

这个特殊的罐子被归根,但我与另一个jar完全相同的问题,这是由myuser拥有的。 – 2014-09-11 14:34:32

回答

0

首先,/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)由myuserhadoop或任何拥有和经营的罐子是谁拥有它的人,或通过chown更改其所有权。

(假设你使用旧的API,但你可以很容易地找到新的API中的等效命令,也是如此。)

+0

/user/myuser /是HDFS上的路径,由myuser拥有。这部分应该没问题。代码实际上并没有达到任何阅读。我得到的权限是当hadoop试图访问/创建临时工作文件(很可能在临时目录中),由于某种原因,它以root身份执行。所以我认为你的答案的第二部分可能实际上解决了这个问题,我会试一试。 – 2014-09-11 14:33:25

相关问题