我正试图让hadoopmapreduce工作,但仍然面临访问问题。我不确定是什么问题,是配置问题还是其他问题。
例如,当我跑步时,这个单词计数
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条答案
按热度按时间cyvaqqii1#
首先,
/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上),而不是文件。因此,运行程序的正确命令是:hadoop jar /usr/share/hadoop/hadoop-examples-1.2.1.jar wordcount /user/myuser /user/myuser/output
最后,检查hadoop目录($HADOOP_HOME
)属于myuser
或者hadoop
或者随便什么,把jar当主人来经营,或者用它来改变它们的所有权chown
.(假设您使用的是旧的api,但是您也可以很容易地在新api中找到等效的命令。)