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