特别說明:該專欄文章均來源自微信公衆号《大資料實戰演練》,歡迎關注!
HDFS版本:3.1.1
今天主要給大家說一下HDFS檔案權限的問題。當一個普通使用者去通路HDFS檔案時,可能會報Permission denied的錯誤。那麼你會怎麼做呢?
像修改linux檔案似的,可能的做法有:
- 修改檔案所有者
- 直接将檔案賦予全部的權限,即rwx權限。
上面的做法雖然可以達到目的,但是相對來說對權限的把握不是很精準,不适用于生産環境。
本文主要講解HDFS的ACL(Access Control List)權限,通過hdfs超級使用者,來為普通使用者配置設定權限。
一、背景
如下圖所示,我使用hue使用者想建立一個簡單的hive表。由于hue使用者對/warehouse/tablespace/managed/hive目錄沒有權限,是以建立失敗了。
這裡就用到了HDFS的ACL權限設定。
二、前提條件
需要确定hdfs-site.xml檔案的兩個配置項為true:
dfs.permissions.enabledtruedfs.namenode.acls.enabledtrue
三、文法
1. setfacl
Usage: hdfs dfs -setfacl -R|[--set ]
設定檔案和目錄的通路控制清單(ACL)。
選項:
- -b: 删除基本ACL條目以外的所有條目。保留使用者,組和其他條目以與權限位相容。
- -k: 删除預設ACL。default
- -R: 以遞歸方式将操作應用于所有檔案和目錄。常用。
- -m: 修改ACL。新條目将添加到ACL,并保留現有條目。常用。
- -x: 删除指定的ACL條目。保留其他ACL條目。常用。
- —set: 完全替換ACL,丢棄所有現有條目。 acl_spec必須包含使用者,組和其他條目,以便與權限位相容。
- acl_spec: 逗号分隔的ACL條目清單。
- path: 要修改的檔案或目錄。
示例:
- hdfs dfs -setfacl -m user:hadoop:rw- /file
- hdfs dfs -setfacl -x user:hadoop /file
- hdfs dfs -setfacl -b /file
- hdfs dfs -setfacl -k /dir
- hdfs dfs -setfacl —set user::rw-,user:hadoop:rw-,group::r—,other::r— /file
- hdfs dfs -setfacl -R -m user:hadoop:r-x /dir
- hdfs dfs -setfacl -m default:user:hadoop:r-x /dir
2. getfacl
Usage: hdfs dfs -getfacl [-R]
顯示檔案和目錄的通路控制清單(ACL)。如果目錄具有預設ACL,則getfacl還會顯示預設ACL。
選項:
- -R: 以遞歸方式列出所有檔案和目錄的ACL。
- path: 要列出的檔案或目錄。
示例:
- hdfs dfs -getfacl /file
- hdfs dfs -getfacl -R /dir
四、為hue使用者賦予權限
使用hdfs超級使用者來設定acl:使用-m參數
sudo -u hdfs hdfs dfs -setfacl -m user:hue:rwx /warehouse/tablespace/managed/hive
檢視檔案目錄的acl權限:
hdfs dfs -getfacl /warehouse/tablespace/managed/hive
檔案acl權限如下圖所示:
現在hue使用者就對/warehouse/tablespace/managed/hive這個目錄有了rwx全部權限了。
我們使用hue使用者建立hive表試試,成功了,如下圖所示:
備注:
不過是僅限于hive這個目錄,對于裡面不是hue使用者建立的目錄或檔案,hue使用者還是無權通路。
如果需要通路遞歸的子檔案,可以使用-R參數,再次授權。
五、總結
其實這次分享的知識點很簡單,但是卻很實用。就安全的角度來看,比起chmod 777來說,也比較嚴謹。
還是希望大家多多練習本文講述的兩個指令:
- setfacl
- getfacl
看看這兩個指令的其它參數具體什麼意思。
關于HDFS shell指令,可以檢視官網連結:
http://hadoop.apache.org/docs/r2.6.5/hadoop-project-dist/hadoop-common/FileSystemShell.html
--END--
碼字不易,如果您覺得文章寫得不錯,請關注作者~ 您的關注是我寫作的最大動力
友情提示:原文排版精美,可點選分享連結檢視。