1. 程式人生 > >hadoop叢集高可用之常見問題分析

hadoop叢集高可用之常見問題分析

namenode-HA問題:

  • 兩個或以上的namenode節點數啟動後都是standby狀態
    解決辦法:1、先檢視namenode節點的狀態(nn1是namenode的節點名稱)
bin/hdfs haadmin -getServiceState nn1

在這裡插入圖片描述
然後使用命令切換狀態即可

bin/hdfs haadmin -transitionToActive nn1

*:手動裝換如果報錯,是因為配置自動轉換,依靠zkfc來控制namenode的狀態

dfs.ha.automatic-failover.enabled

在這裡插入圖片描述
2、手動裝換失敗且namenode節點都是standby狀態,那麼就是zkfc問題,jps檢視是否啟動DFSZKFailoverController,即重新啟動hdfs叢集和zookeeper叢集,如果還沒有DFSZKFailoverController程序,說明hdfs註冊zookeeper叢集狀態資訊出錯,需要重新格式化hadoop叢集在zookeeper叢集中的狀態資訊,先關閉hadoop叢集,使用如下命令

bin/hdfs zkfc -formatZK

在這裡插入圖片描述
:是在hadoop安裝目錄下執行該命令,執行完畢後重新啟動hadoop叢集即可
在這裡插入圖片描述
通過jps檢視,DFSZKFailoverController啟動成功,再一次通過web埠訪問每一個namenode節點,有一個是active狀態。


resourcemanager-HA問題:

配置兩個及以上的resourcemanager節點,配置了resourcemanager節點啟動resourcemanager的時候,與namenode啟動不一樣,多個namenode可以直接通過一個sbin/start-dfs.sh全部啟動,但resourcemanager的啟動可以使用守護程序啟動,也可以用sbin/start-yarn.sh直接啟動叢集中所有的nodemanager(類似sbin/start-dfs.sh啟動所有的namenode和datanode)和本節點的resourcemanager

,其他節點的resourcemanager是不會啟動的,需要單獨到其他配置了resourcemanager的節點執行啟動resourcemanager命令,否則沒有啟動無法實現高可用。
可以用指令碼直接全部啟動所有,也可以挨個到配置了resourcemanager的節點去啟動resourcemanager


jobhistoryserver問題:

都檢查過沒問題就重新啟動所有叢集,先啟動zookeeper叢集,再啟動hadoop叢集中的namenode,用sbin/start-dfs.sh,再啟動resourcemanager,用sbin/start-yarn.sh,再啟動jobhistoryserver,用sbin/mr-jobhistory-daemon.sh start historyserver(啟動historyserver之前必須確定namenode和resourcemanager以及zookeeper叢集都全部啟動了,多個resourcemanager必須每個都要啟動,最後啟動historyserver)啟動後
在這裡插入圖片描述

總結:叢集是由多個元件通過一定的通訊方式進行運作的,每個元件有自己的特性和相容性,所以有時候叢集元件中各個元件的配置檔案都是規範的,但是叢集執行報錯,這就可能是元件之間的相容性問題導致。在hadoop叢集中,hdfs和zookeeper等各部分之間的問題,如果各個部分配置都沒問題,可以嘗試先停止所有叢集元件,傳出hadoop的data檔案,重新格式化namenode,再啟動zookeeper叢集,然後從新註冊hadoop在zookeeper中的狀態資訊(sbin/hdfs zkfc -formatZK),再啟動namenode和datanode、journalnode(sbin/start-dfs.sh),再啟動resourcemanager,historyserver,有其他元件再考慮順序,zookeeper和namenode,datanode,journalnode等都是最先啟動的