解決從linux本地檔案系統上傳檔案到HDFS時的許可權問題

記憶殘留發表於2016-09-23

當使用 hadoop fs -put localfile /user/xxx 時提示:

put: Permission denied: user=root, access=WRITE, inode="/user/shijin":hdfs:supergroup:drwxr-xr-x

表明:許可權不夠。這裡涉及到兩個方面的許可權。一個是本地檔案系統中localfile 檔案的許可權,一個是HDFS上 /user/xxx目錄的許可權。

 

先看看 /user/xxx目錄的許可權:drwxr-xr-x   - hdfs hdfds      表示它屬於hdfs使用者,組名為 hdfs

因此需要使用 sudo -u hdfs hadoop fs -put localfile /user/xxx   來指定使用 hdfs 使用者來執行上傳命令。

當高興地執行sudo -u hdfs hadoop fs -put localfile /user/xxx  以為能成功上傳時,又報錯:
put: localfile   No such file or directory   說找不到本地檔案localfile,可是用 ls 明明 能看到 localfile ,後來在一篇文章中發現發來是lcoalfile的許可權問題。

因為我現在是使用hdfs使用者來執行命令。而hdfs使用者對 localfile 是沒有相關許可權的。此時,問題基本解決了,就是讓hdfs 使用者對 lcoalfile 有相關許可權

 

一種簡單的解決方法。直接把需要上傳的檔案複製到/tmp目錄下。因為/tmp目錄的許可權為 rwxrwxrwx。然後執行:

sudo -u hdfs hadoop fs -put localfile /user/xxx   上傳成功。

相關文章