2014-09-11 35 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

相關問題