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

gfttwv5a  于 2021-05-30  发布在  Hadoop
关注(0)|答案(1)|浏览(353)

我正试图让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。你知道是什么导致了这个问题吗?

cyvaqqii

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中找到等效的命令。)

相关问题