Hadoop安全

kerberos-hadoop配置常見問題彙總

注意事項

常見問題以下(其中前面兩點最多):html

  • 各目錄屬主組屬性修改.

對於hadoop,須要改成yarn:hadoop/mapred:hdoop/hdfs:hadoop,其餘組件如spark直接爲spark:spark便可.java

  • 組件本地log屬主組修改以及權限修改.

主要對/var/log/cluster001, /var/run/cluste001以及/data/cluster001目錄下進行修改.node

  • webHDFS enable=true時,報錯 configureation principal問題.

相關配置爲添加,追加相關配置到hdfs-site.xml文件中.
參考:
+http://www.cloudera.com/documentation/enterprise/5-7-x/topics/cdh_sg_secure_webhdfs_config.html#topic_3_9+linux

  • 設置安全的datanode

當設置了安全的datanode時,啓動datanode須要root權限,須要修改hadoop-env.sh文件.且須要安裝jsvc,同時從新下載編譯包commons-daemon-1.0.15.jar,並把$HADOOP_HOME/share/hadoop/hdfs/lib下替換掉.
不然報錯Cannot start secure DataNode without configuring either privileged resources
參考:
http://blog.csdn.net/lalaguozhe/article/details/11570009
+http://blog.csdn.net/wulantian/article/details/42173095+c++

  • dfs.datanode.data.dir.perm權限的設置

/tmp/dfs/data權限改爲755,不然報錯.directory is not readable.是由於hdfs-site.xml文件中dfs.datanode.data.dir.perm權限的設置.因爲datanode.dir沒有設置,因此存放在默認位置/tmp.git

  • container-executor.cfg must be owned by root, but is owned by 500.

cmake src -DHADOOP_CONF_DIR=/etc/hadoop
下載源碼從新編譯
同時服務器得安裝g++/cmake
yum install gcc-c++
yum install cmake
參考:
+http://blog.csdn.net/lipeng_bigdata/article/details/52687821+github

  • Hbase master進程啓動不了.


緣由:recently tried to set up Kerberos-secured Hadoop cluster and encountered the same problem. I found that the cause is my hbase user (the user used to launch Hbase service) has no necessary environment settings of Hadoop such as HADOOP_CONF_DIR. You can verify if your user account has those settings.
解決方法:
copy core-site.xml and hdfs-site.xml to hbase_dir/conf
參考:
http://stackoverflow.com/questions/21338874/hbase-keeps-doing-simple-authentication
雖然咱們的系統中有這兩個配置文件,可是加入了kerberos以後這兩個文件的更新沒有同步過來.
web

  • 沒有獲取票據

用戶訪問某個服務,得先申請票據,而後經過該票據再去訪問某一服務.不然,會報以下錯誤. 
No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt 

kinit -k -t /etc/cluster001/SERVICE-HADOOP-83ec0e0240fc4ebe92a4d79a5ca138af/hdfs.keytab hdfs/node1@HADOOP.COM
參考:
+http://www.cnblogs.com/morvenhuang/p/4607790.html+
api

  • java.io.IOException: All specified directories are failed to load

緣由:格式化時致使datanode和namenode的clusterID不一致
解決辦法:
方法1.進入tmp/dfs,修改VERSION文件便可,將datanode裏version文件夾裏面的內容修改爲和namenode一致的.
方法2.直接刪除tmp/dfs,而後格式化hdfs便可(./hdfs namenode -format)從新在tmp目錄下生成一個dfs文件. 
安全

  • hadoop監控頁面顯示node unhealthy

緣由:目錄下文件損壞或者權限不知足要求
驗證: hdfs fsck /tmp/hadoop-hduser/nm-local-dir
解決辦法:
看log發現是屬主權限問題,而後重啓resourcemanager和nodemanager進程.

  • Reduce階段沒法獲取map階段產生的中間結果

緣由:不詳
解決辦法:重啓了相關進程後解決了.

  • Keystore報錯

緣由:配置了ssl/tls,可是相關組件沒有配置
解決辦法:相關配置註釋.這部分屬於Configuring Encryption.

  • Datanode能夠不使用root用戶啓動

緣由:採用secure datanode,因爲datanode 數據傳輸協議沒有采用Hadoop RPC,所以datanode須要認證本身

解決方案:

1.使用安全的端口,依賴jsvc,採用root用戶啓動進程綁定該安全端口. hdfs腳本中能夠看到

2.經過sasl認證本身.從版本2.6.0開始, SASL can be used to authenticate the data transfer protocol.

這樣就沒必要依賴jsvc,也不須要從新編譯依賴包生成新的jsvc.以前參考的資料過期了.

參考資料:

http://stackoverflow.com/questions/27401033/hdfs-datanode-not-starting-with-kerberos

  • nodemanager也能夠不使用root用戶啓動

現象:YarnRuntimeException: Failed to initialize container executor error=13,權限不夠. nodemanager一直無法啓動

臨時解決方案:container-executor爲setuid權限()6050),屬於hadoop組,一直沒有找到緣由和實際的解決方案,就用root用戶啓動了.

緣由:機器selinux沒有關閉,selinux開啓的時候,ssh免密碼登陸會不起做用,仍然須要手動輸入密碼,以前沒有生效沒有在乎

  • nodemanager啓動失敗

現象:ExitCodeException exitCode=24: Can't get configured value for yarn.nodemanager.linux-container-executor.group

定位問題方法:直接運行./container-executor 會報錯誤 configuration tokenization failed Can't get configured value for yarn.nodemanager.linux-container-executor.group.

緣由:是因爲container-executor.cfg 配置不對,其中屬性值不能爲空,我這邊是由於"banned.users="

  • namenode啓動正常,日誌信息中不少 AccessControlException: SIMPLE authentication is not enabled. Available:[TOKEN, KERBEROS]

現象:啓動namenode,namenode雖然起來了,可是namenode日誌信息中不少 AccessControlException: SIMPLE authentication is not enabled.  Available:[TOKEN, KERBEROS]

緣由:不少依賴hdfs的服務,可是沒有開啓安全認證,而hdfs開啓了.把依賴hdfs的服務關閉,則日誌信息中再也不flush該信息

  • Hadoop 2.5.2 的 Secure Mode 下, 必須用 root 經過 jsvc 啓動 DataNode, 運維不方便.同時得從新下載common-daemon的包,並替換jsvc

解決方案:Hadoop2.6解決了該問題,可是須要額外配置多個參數,同時得開啓https(即設置HTTPS_ONLY),能夠經過hadoop用戶啓動datanode了

參考:http://secfree.github.io/blog/2015/07/01/sasl-data-transfer-protocol.html

  • /home/hadoop/.keystore file not found

現象:因爲使用hadoop2.6的secure mode新特性,默認須要開啓https,因此須要證書問題,而以前沒有配置

緣由:沒有生成證書信息

解決方案:採用openssl+keytool生成keystore/truststore文件,同時修改ssl-client.xml和ssl-server.xml文件[繁瑣]

 

 

常見問題以下(其中前面兩點最多):

1)        各目錄屬主組屬性修改.

對於hadoop,須要改成yarn:hadoop/mapred:hdoop/hdfs:hadoop,其餘組件如spark直接爲spark:spark便可.

2)        組件本地log屬主組修改以及權限修改.

主要對/var/log/cluster001, /var/run/cluste001以及/data/cluster001目錄下進行修改.

3)        webHDFS enable=true時,報錯 configureation principal問題.

相關配置爲添加,追加相關配置到hdfs-site.xml文件中.

參考:

http://www.cloudera.com/documentation/enterprise/5-7-x/topics/cdh_sg_secure_webhdfs_config.html#topic_3_9

4)        設置安全的datanode

當設置了安全的datanode時,啓動datanode須要root權限,須要修改hadoop-env.sh文件.且須要安裝jsvc,同時從新下載編譯包commons-daemon-1.0.15.jar,並把$HADOOP_HOME/share/hadoop/hdfs/lib下替換掉.

不然報錯Cannot start secure DataNode without configuring either privileged resources

參考:

http://blog.csdn.net/lalaguozhe/article/details/11570009

http://blog.csdn.net/wulantian/article/details/42173095

5)         dfs.datanode.data.dir.perm權限的設置

/tmp/dfs/data權限改爲755,不然報錯.directory is not readable.是由於hdfs-site.xml文件中dfs.datanode.data.dir.perm權限的設置.因爲datanode.dir沒有設置,因此存放在默認位置/tmp.

6)        container-executor.cfg must be owned by root, but is owned by 500.

cmake src -DHADOOP_CONF_DIR=/etc/hadoop

下載源碼從新編譯

同時服務器得安裝g++/cmake

yum install gcc-c++

yum install cmake

參考:

http://blog.csdn.net/lipeng_bigdata/article/details/52687821

7)        Hbase master進程啓動不了.

 

緣由:recently tried to set up Kerberos-secured Hadoop cluster and encountered the same problem. I found that the cause is my hbase user (the user used to launch Hbase service) has no necessary environment settings of Hadoop such as HADOOP_CONF_DIR. You can verify if your user account has those settings.

解決方法:

copy core-site.xml and hdfs-site.xml to hbase_dir/conf

參考:

http://stackoverflow.com/questions/21338874/hbase-keeps-doing-simple-authentication

雖然咱們的系統中有這兩個配置文件,可是加入了kerberos以後這兩個文件的更新沒有同步過來.

8)        沒有獲取票據

用戶訪問某個服務,得先申請票據,而後經過該票據再去訪問某一服務.不然,會報以下錯誤.

No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt

 

 

kinit -k -t /etc/cluster001/SERVICE-HADOOP-83ec0e0240fc4ebe92a4d79a5ca138af/hdfs.keytab  hdfs/node1@HADOOP.COM

參考:

http://www.cnblogs.com/morvenhuang/p/4607790.html

9)        java.io.IOException: All specified directories are failed to load

緣由:格式化時致使datanode和namenode的clusterID不一致

解決辦法:

方法1.進入tmp/dfs,修改VERSION文件便可,將datanode裏version文件夾裏面的內容修改爲和namenode一致的.

方法2.直接刪除tmp/dfs,而後格式化hdfs便可(./hdfs namenode -format)從新在tmp目錄下生成一個dfs文件.

 

 

10)     hadoop監控頁面顯示node unhealthy

緣由:目錄下文件損壞或者權限不知足要求

驗證: hdfs fsck /tmp/hadoop-hduser/nm-local-dir

解決辦法:

看log發現是屬主權限問題,而後重啓resourcemanager和nodemanager進程.

 

11)    Reduce階段沒法獲取map階段產生的中間結果

緣由:不詳

解決辦法:重啓了相關進程後解決了.

 

12)    Keystore報錯

緣由:配置了ssl/tls,可是相關組件沒有配置

解決辦法:相關配置註釋.這部分屬於Configuring Encryption.

13)  Datanode能夠不使用root用戶啓動

緣由:採用secure datanode,因爲datanode 數據傳輸協議沒有采用Hadoop RPC,所以datanode須要認證本身

解決方案:

1.使用安全的端口,依賴jsvc,採用root用戶啓動進程綁定該安全端口. hdfs腳本中能夠看到

2.經過sasl認證本身.從版本2.6.0開始, SASL can be used to authenticate the data transfer protocol.

這樣就沒必要依賴jsvc,也不須要從新編譯依賴包生成新的jsvc.以前參考的資料過期了.

參考資料:

http://stackoverflow.com/questions/27401033/hdfs-datanode-not-starting-with-kerberos

14)  nodemanager也能夠不使用root用戶啓動

現象:YarnRuntimeException: Failed to initialize container executor error=13,權限不夠. nodemanager一直無法啓動

臨時解決方案:container-executor爲setuid權限()6050),屬於hadoop組,一直沒有找到緣由和實際的解決方案,就用root用戶啓動了.

緣由:機器selinux沒有關閉,selinux開啓的時候,ssh免密碼登陸會不起做用,仍然須要手動輸入密碼,以前沒有生效沒有在乎

15)  nodemanager啓動失敗

現象:ExitCodeException exitCode=24: Can't get configured value for yarn.nodemanager.linux-container-executor.group

定位問題方法:直接運行./container-executor 會報錯誤 configuration tokenization failed Can't get configured value for yarn.nodemanager.linux-container-executor.group.

緣由:是因爲container-executor.cfg 配置不對,其中屬性值不能爲空,我這邊是由於"banned.users="

16)  namenode啓動正常,日誌信息中不少 AccessControlException: SIMPLE authentication is not enabled. Available:[TOKEN, KERBEROS]

現象:啓動namenode,namenode雖然起來了,可是namenode日誌信息中不少 AccessControlException: SIMPLE authentication is not enabled.  Available:[TOKEN, KERBEROS]

緣由:不少依賴hdfs的服務,可是沒有開啓安全認證,而hdfs開啓了.把依賴hdfs的服務關閉,則日誌信息中再也不flush該信息

17)  Hadoop 2.5.2 的 Secure Mode 下, 必須用 root 經過 jsvc 啓動 DataNod

運維不方便.同時得從新下載common-daemon的包,並替換jsvc

解決方案:Hadoop2.6解決了該問題,可是須要額外配置多個參數,同時得開啓https(即設置HTTPS_ONLY),能夠經過hadoop用戶啓動datanode了

參考:http://secfree.github.io/blog/2015/07/01/sasl-data-transfer-protocol.html

18)  /home/hadoop/.keystore file not found

現象:因爲使用hadoop2.6的secure mode新特性,默認須要開啓https,因此須要證書問題,而以前沒有配置

緣由:沒有生成證書信息

解決方案:採用openssl+keytool生成keystore/truststore文件,同時修改ssl-client.xml和ssl-server.xml文件

 

 

 

19)    配置authorization中hadoop-policy文件修改讓其生效

操做: 更新namenode相關屬性, bin/hdfs dfsadmin -refreshServiceAcl

       錯誤提示:

     

緣由:沒法更新或者hadoop-policy文件或security.refresh.policy.protocol.acl配置中沒有該用戶.

解決辦法:重啓namenode/datanode進程或者切換正確配置的用戶.

20)    用戶沒有對hdfs操做的權限

錯誤提示:

 

解決辦法: security.client.protocol.acl配置中加入該用戶

21)    Namenode認證超時,啓動失敗

    啓動hadoop某一角色失敗,從日誌中能夠看出是time out問題,說明是鏈接服務器失敗,這裏是鏈接kerberos server失敗.接下來往下繼續定位是服務沒有起來仍是客戶端端口號弄錯了.

22)    kerberos客戶端鏈接不上kdc server

修改/etc/krb5.conf中的kdc和admin_server對應的主機,操做便可.有時還須要登陸kerberos server對應節點,節點重啓krb5kdc和kadmind進程,使其生效.

23)     沒有kdc操做權限

     kerberos server能夠經過sbin/kadmin.local(local單詞可知表示經過本機器登陸)直接操做,如listprincs,而經過bin/kadmin至關於遠程登陸,都直接報錯,表示沒有操做權限.

此時若是遠程登陸也須要具備該權限,只須要在kerberos server節點增長kadm5.acl該文件(文件存放路徑在kdc.conf中指定),而後重啓krb5kdc和kadmind進程.

文件內容以下:

*/admin@HADOOP.COM *

 

24)    Webhdfs配置認證後,須要輸入user.name(也取消webhdfs認證)

 

 

配置webhdfs的simple模式認證,訪問得加入user.name

http://10.1.24.228:50070?user.name=hadoop

相關文章
相關標籤/搜索