當使用 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 上傳成功。