2012-07-21 181 views
32

我是hadoop分佈式文件系統的新手,我在我的機器上完成了hadoop單節點的完整安裝,但之後當我要上傳數據到hdfs時,它給出了錯誤信息Permission Denied。從終端在hdfs上被拒絕的權限

消息與命令:

[email protected]:/usr/local/hadoop$ sudo bin/hadoop fs -put /usr/local/input-data/ /inwe 
put: org.apache.hadoop.security.AccessControlException: Permission denied: user=root, access=WRITE, inode="":hduser:supergroup:rwxr-xr-x 

[email protected]:/usr/local/hadoop$ 
+1

你有訪問權限的目錄這個問題 - 您使用sudo的? – 2012-07-21 16:00:53

+0

是的,使用sudo後,,,, hduser @ ubuntu:/ usr/local/hadoop $ sudo bin/hadoop fs -put/usr/local/input-data// inwe put:org.apache.hadoop.security。 AccessControlException:權限被拒絕:user = root,access = WRITE,inode =「」:hduser:supergroup:rwxr-xr-x hduser @ ubuntu:/ usr/local/hadoop $ – 2012-07-21 17:17:16

+0

在我的情況下,在我沒有權限的文件系統中的某個位置下載文件。 – optimist 2015-06-18 14:08:55

回答

51

我解決了這個問題暫時通過禁用DFS permission.By添加下面的屬性代碼 增加到conf/HDFS-site.xml中

<property> 
    <name>dfs.permissions</name> 
    <value>false</value> 
</property> 
+2

這是我在新集羣中設置的第一件事;-) – 2016-10-17 20:42:18

+0

其中是'conf'文件夾? – 2017-05-11 07:31:03

+1

conf文件夾是namenode的配置。在我的情況下,使用自制軟件安裝hadoop,但它在/usr/local/Cellar/hadoop/2.7.3/libexec/etc/hadoop/hdfs-site.xml – 2017-08-24 13:41:36

14

遇到這裏兩個單獨的問題:


[email protected]:/usr/local/hadoop$ hadoop fs -put /usr/local/input-data/ /input put: /usr/local/input-data (Permission denied) 

[email protected]:/usr/local/hadoop$ hadoop fs -put /usr/local/input-data/ /input 
put: /usr/local/input-data (Permission denied) 

[email protected]:/usr/local/hadoop$ 

使用須藤和添加hduser到sudouser後

這裏,用戶hduser無權訪問本地目錄/usr/local/input-data。也就是說,您的本地權限過於嚴格。你應該改變它。


[email protected]:/usr/local/hadoop$ sudo bin/hadoop fs -put /usr/local/input-data/ /inwe put: org.apache.hadoop.security.AccessControlException: Permission denied: user=root, access=WRITE, inode="":hduser:supergroup:rwxr-xr-x 

這裏,用戶root(因爲你使用sudo)不能訪問到HDFS目錄/input。正如你所看到的:hduser:supergroup:rwxr-xr-x只表示hduser有寫權限。 Hadoop並不真正尊重root作爲特殊用戶。


爲了解決這個問題,我建議你改變對本地數據的權限:

sudo chmod -R og+rx /usr/local/input-data/ 

然後,再次嘗試put命令hduser

+0

copyFromLocal:org.apache.hadoop.security.AccessControlException:權限被拒絕:user = root,access = WRITE,inode =「」:hduser:supergroup:rwxr-xr-x更改上面允許的錯誤的權限。 – 2012-07-22 08:50:43

+2

不要把'put'當做'sudo'。做爲'hduser'。 – 2012-07-22 21:01:36

42

我有類似的情況,這裏是我的方法是有所不同的:

HADOOP_USER_NAME=hdfs hdfs dfs -put /root/MyHadoop/file1.txt/

你真正要做的就是讀取本地文件,根據您的本地權限,但將文件放在HDFS當你喜歡認證用戶hdfs。您可以使用其他ID(注意真正的身份驗證方案配置,但通常不是這種情況)。

優點:

  1. 權限都保存在HDFS。
  2. 你不需要sudo
  3. 根本不需要實際適當的本地用戶'hdfs'。
  4. 由於以前的觀點,您不需要複製任何內容或更改權限。
4

啓動一個shell hduser(從根部),並運行命令

sudo -u hduser bash 
hadoop fs -put /usr/local/input-data/ /input 

[更新] 還要注意的是,hdfs用戶是超級用戶,並擁有所有R/W特權。

+0

它不需要啓動一個shell。 'sudo -u hdfs hadoop fs -chmod 777/hbase'也可以。 – 030 2014-06-10 09:39:39

+0

好點,我以爲你會想運行多個命令作爲hduser。 – 2014-06-10 12:21:48

3

我已經解決了通過以下步驟

su hdfs 
hadoop fs -put /usr/local/input-data/ /input 
exit