Apache Ranger——Hadoop ACL控制工具

小米運維發表於2019-01-18

本文主要透過ranger在hdfs acl中的應用以及原理介紹一下ranger的使用,另外介紹一下實際使用過程中碰到的問題。

目前公司內部大多透過資料工場來管理hdfs上的資料,工場開發團隊和hdfs、yarn的SRE同學也配合緊密。由於涉及到管理資料,那麼不得不說到許可權控制的問題。

接觸過hadoop的同學都應該瞭解hdfs上資料的許可權類似linux中的許可權,分為r、w、x三種許可權。資料工場中也提供了各個表的資料許可權的訪問申請,底層透過java api去設定hdfs的acl,具體的每張表有訪問許可權的詳情,但是缺少整體的供管理者預覽的許可權展示。

另外有一些沒有在資料工場管理的目錄,需要配置acl的話就需要通知SRE去手動新增或者刪除。ranger一方面整體可以控制叢集的acl,管理者在頁面中就可以配置相關的許可權,同時也提供了直觀的許可權展示。當然,不僅僅是hdfs目錄的acl,包括hive、hbase、yarn、storm這些大資料生態的服務,都可以透過ranger來控制許可權。

1、ranger功能展示

首先看一下ranger登入後的整體頁面:

Apache Ranger——Hadoop ACL控制工具

這裡就是當前ranger可以進行許可權控制的各個元件,每點開一個元件都可以編輯,比如hdfs,點開後就是如下配置介面:

Apache Ranger——Hadoop ACL控制工具

上圖主要配置的是namenode的地址,可以把這步驟配置叫做service配置,service配置完畢後,可以配置policy,也就是具體的針對某個叢集的目錄許可權控制策略,如下圖所示:

Apache Ranger——Hadoop ACL控制工具

定義policy的名字(Policy Name)、定義需要控制許可權的路徑(Resource Path)、定義user或者group的訪問許可權(這裡的uesr和group是hdfs上的user和group)。add之後就生成了一條完整的訪問策略。在hdfs層面就完成了許可權控制。

總結來看在ranger控制檯,可以完成如下操作:

(1)service manager:目前支援hdfs、yarn、hbase、hive、storm等服務的管理

(2)service:透過某個service manager可以建立一個service,如hdfs服務,可以根據不同叢集建立不同的service從而管理不同的叢集

(3)policy:具體的許可權控制策略,在service的基礎上建立策略來控制許可權

(4)audit:審計。包括使用者登入情況和觸發policy記錄

(5)settings:可以手動增加和刪除使用者(安裝了usersync外掛後,這裡的使用者會自動更新同步namenode上的使用者)

2、ranger plugin配置

ranger的許可權控制離不開各項plugin的使用。在安裝初始,編譯完程式碼之後會生成很多plugin,如admin、usersync、hdfs、yarn等。

(1)admin外掛是用作web頁面的生成,需要注意的是admin配置檔案中的mysql配置需要能夠建立使用者的許可權,或者填寫的mysql的使用者名稱密碼已經地址在mysql的user表中存在

(2)usersync外掛用於同步namenode上的使用者至ranger中,需要啟動在namenode節點上(訪問叢集的使用者必須在namenode本地機器上存在這個使用者)

(3)剩下外掛就是上面提到的各個元件的控制訪問需要用到的外掛。檔案格式類似ranger-{$version}-{$pluginName}.tar.gz。解壓這些檔案到各個服務對應的master節點進行安裝(解壓後會有setup.sh檔案,執行檔案進行安裝),同時重新啟動master服務即可完成

3、許可權控制原理

hdfs本身自帶了許可權控制,在配置檔案中dfs.namenode.inode.attributes.provider.class預設值是空,在使用ranger進行許可權控制的時候,需要將此項設定成org.apache.ranger.authorization.hadoop.RangerHdfsAuthorizer。

ranger控制許可權主要是透過啟動外掛時候生成的配置檔案以及外掛自帶的jar包來進行(plugin配置中有說明plugin的安裝),會將jar包放到hadoop安裝目錄的lib目錄下,將xml配置檔案放到hadoop安裝目錄的etc/hadoop目錄下9與hdfs-site.xml這些檔案在同一路徑下)。

且ranger控制的許可權在hdfs自帶的許可權控制之上,也就是啟動了ranger控制許可權之後,使用者訪問hdfs的時候會先透過ranger的認證,如果發現沒有許可權,直接拒絕訪問;如果有許可權,之後仍然會去透過hdfs自帶的許可權控制去判斷是否有訪問許可權,所以不用擔心ranger的許可權控制會覆蓋原有的已經設定的許可權。

4、後設資料的儲存

在低版本的ranger中,後設資料可以透過配置到mysql中儲存,較新版本(0.5)以後取消了mysql的配置,統一將後設資料儲存到了solr中。solr是一個高效能的、基於Lucene的全文搜尋伺服器,它也經常被拿來和現今流行的elasticsearch做比較。一般來說,solr在實時搜尋遜於es,且在資料量增大的時候,solr的查詢效率降低,但是在對單純的已有的資料進行搜尋時候,solar表現得更為突出,且solr支援多種資料格式,而es只支援json。

solr的安裝很簡單,直接下載solr-6.6.0.tar.gz解壓即可。解壓之後,cd到solr的bin目錄下啟動即可。

solr start -c  -s '/usr/local/solr/server/solr '-z zkaddress:port/solr

要提前在zookeeper上建立 'solr' 這個znode才行,而後使用solr create -c {$collection}-rf 2(2個副本)建立collection。訪問即可開啟頁面,可以在頁面中執行查詢操作。叢集搭建的話,就是所有機器重複以上步驟。使用bin/post -c {$collection}  path/,其中collection是索引的名稱;path/表示path路徑下的檔案,該命令表示將path下的所有檔案標記為索引{$collection} 放到solr中去

5、碰到的問題

在使用的過程中也碰到過問題,在使用ranger來進行yarn許可權控制,控制使用者提交任務許可權的時候,ranger做得不夠完善。在建立新的service的時候,填寫入'YARN REST URL' 後,點選test connection,出現了問題,頁面彈出框提示無法透過該url獲得佇列,檢視ranger-admin執行日誌也沒有報錯。翻看底層程式碼後發現,ranger在對yarn的支援上只支援了capacity排程,對fair排程沒有支援。當將執行中的叢集的排程改為capacity排程後,test connection成功。根本原因就是,resourcemanager的rest api()在不同的排程器下,得到的json檔案不同,由於ranger底層單純地只解析了capacity排程的json檔案,沒有解析fair排程的,所以出現了上述問題。需要針對fair排程下的rest api返回的json重新做解析。

Apache Ranger——Hadoop ACL控制工具

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559359/viewspace-2564099/,如需轉載,請註明出處,否則將追究法律責任。

相關文章