2011-09-08 68 views
8

當我得到這個下列權限錯誤,我不知道爲什麼Hadoop是試圖寫這個特殊的文件夾:Hadoop的DFS權限問題正在運行的作業

hadoop jar /usr/lib/hadoop/hadoop-*-examples.jar pi 2 100000 
Number of Maps = 2 
Samples per Map = 100000 
Wrote input for Map #0 
Wrote input for Map #1 
Starting Job 
org.apache.hadoop.security.AccessControlException: org.apache.hadoop.security.AccessControlException: Permission denied: user=myuser, access=WRITE, inode="/":hdfs:supergroup:drwxr-xr-x 

任何想法,爲什麼它試圖寫我的hdfs的根?

更新:將hdfs root(/)臨時設置爲777權限後,我看到正在寫入「/ tmp」文件夾。我想有一個選擇就是創建一個打開權限的「/ tmp」文件夾供所有人寫入,但是如果將其寫入用戶文件夾(例如/ user/myuser/tmp),從安全角度來看,

+0

什麼時候開始的Hadoop HDFS與/ mapred目錄「爲myuser「? –

+0

不,我正在使用Cloudera,因此hadoop作爲服務運行,可能是root –

+2

嘗試使用hadoop fs -chmod將權限設置爲/ to 777並查看它寫入的內容。 –

回答

15

我能得到以下設置的這方面的工作:(!特別感謝傑夫Hadoop的郵件列表上對我的幫助追查問題)

<configuration> 
    <property> 
     <name>mapreduce.jobtracker.staging.root.dir</name> 
     <value>/user</value> 
    </property> 

    #... 

</configuration> 

重新啓動需要以及JobTracker的服務

+0

謝謝,遇到了同樣的問題。可惜這不是默認值。 –

+0

hhhm,看起來像是我設置了這個,mapred.system.dir(/ hadoop/mapred/system)上的權限需要更寬容 –

+0

我將/ mapred/system目錄鎖定到mapred用戶(mapred。 system.dir =/mapred /系統)。 hdfs root(/)也僅設置爲hdfs用戶。如果你仍然有問題,讓我知道你正在得到什麼錯誤 –

0

您也可以創建一個名爲「hdfs」的新用戶。非常簡單的解決方案,但可能不那麼幹淨。

當然,這是當你使用色相與Cloudera的Hadoop的管理器(CDH3)

0

您需要設置Hadoop的根目錄(/),而不是設置爲系統的根目錄權限的權限。即使我很困惑,但後來意識到提到的目錄是hadoop的文件系統而不是系統的。

+0

當你說「hadoop根目錄」時,你的意思是HDFS的根?我選擇不對HDFS根目錄下的權限進行寬鬆處理,以防止用戶寫入根目錄(並強制它們到一個特定的目錄 - 它們的「home」:/ user/)。 –

+0

那就對了。上述問題中的配置似乎不正確。它應該指向HDFS上的特定目錄。在我的情況下,它指向/ opt/hadoop/mapred/local/staging。我給了這個目錄的寫權限,它工作得很好。 – divinedragon

+0

你是說設置mapreduce.jobtracker.staging.root.dir = /用戶不正確?請注意,我也是在我的設置中提到了HDFS位置。另外,我使用Cloudera以防有所作爲。 –

1

1)創建{} mapred.system.dir使用以下命令

sudo -u hdfs hadoop fs -mkdir /hadoop/mapred/ 

2)給出權限mapred用戶

sudo -u hdfs hadoop fs -chown mapred:hadoop /hadoop/mapred/