天天看點

hadoop高可用叢集搭建

1、叢集規劃

1.1、主機配置環境

1.2、安裝後啟動的程序

hadoop高可用叢集搭建

2、修改host檔案

希望三個主機之間都能夠使用主機名稱的方式互相通路而不是ip,我們需要在hosts中配置其他主機的host。是以我們在主機的/etc/hosts下均進行如下配置:

将配置發送到其他主機,同時在其他主機上均如上配置。

3、添加使用者賬号

在所有的主機下均建立一個賬号admin用來運作hadoop ,并将其添加至sudoers中

設定admin使用者具有root權限 修改 /etc/sudoers 檔案,找到下面一行,在root下面添加一行,如下所示:

修改完畢 :wq! 儲存退出,現在可以用admin帳号登入,然後用指令 su - ,切換使用者即可獲得root權限進行操作。 

4、/opt目錄下建立檔案夾

4.1、在root使用者下建立module、software檔案夾

4.2、修改module、software檔案夾的所有者

4.3、檢視module、software檔案夾的所有者

5、安裝配置jdk1.8

本機root使用者已安裝配置jdk,admin使用者不用重新安裝,直接使用即可。

如果未安裝可采用如下指令安裝:

6、設定ssh免密鑰

關于ssh免密碼的設定,要求每兩台主機之間設定免密碼,自己的主機與自己的主機之間也要求設定免密碼。 這項操作可以在admin使用者下執行,執行完畢公鑰在/home/admin/.ssh/id_rsa.pub。

在centos下會存在非root使用者配置免密不能登陸的問題。

root使用者按照正常操作配置ssh無密碼登入伺服器,一切順利,但是到非root使用者的時候,就會出現各種各樣的問題,這裡,就統一解決一下這些出現的問題,這裡以admin使用者作為例子說明。

主機node60,node89,node145都需要執行以下步驟,如果之前做過免密,後來改密碼了,最好把原來的.ssh目錄删掉:

如上指令在主機node60,node89,node145上執行成功,下面就來配置這三台主機的免密設定。

a、配置node60免密設定

把主機node89,node145對應的/home/admin/.ssh/id_rsa.pub内容拷貝到/home/admin/.ssh/authorized_keys(該檔案在node60主機上)

b、配置node89免密設定

把主機node60,node145對應的/home/admin/.ssh/id_rsa.pub内容拷貝到/home/admin/.ssh/authorized_keys(該檔案在node89主機上)

c、配置node145免密設定

把主機node60,node89對應的/home/admin/.ssh/id_rsa.pub内容拷貝到/home/admin/.ssh/authorized_keys(該檔案在node145主機上)

d、驗證免密是否設定成功

到此,主機之間設定免密完成。

6、安裝zookeeper

安裝詳解參考:

zookeeper叢集搭建

zookeeper安裝與配置

centos7.5搭建zookeeper叢集與指令行操作

7、安裝hadoop叢集

7.1、下載下傳hadoop安裝包

http://archive.apache.org/dist/hadoop/core/

http://archive.apache.org/dist/hadoop/core/hadoop-2.7.6/hadoop-2.7.6.tar.gz

hadoop-2.7.6.tar.gz下載下傳後存到/opt/software/

7.2、解壓安裝hadoop

解壓 hadoop-2.7.6到/opt/module/目錄下

7.2 配置hadoop叢集

配置檔案都在/opt/module/hadoop-2.7.6/etc/hadoop/下

7.2.1 修改hadoop-env.sh, mapred-env.sh ,yarn-env.sh 的java環境變量

注:export java_home=${java_home} 采用變量方式,會導緻 hadoop-daemons.sh start datanode 執行失敗

7.2.2 修改 core-site.xml

$ vim core-site.xml

7.2.3 修改hdfs-site.xml

$ vim hdfs-site.xml

7.2.4 修改mapred-site.xml

$ mv mapred-site.xml.template mapred-site.xml

$ vim mapred-site.xml

7.2.5 修改 slaves

$ vim slaves

7.2.6 修改yarn-site.xml

[admin@node21 hadoop]$ vim yarn-site.xml

7.2.7 拷貝hadoop到其他節點

注:記得切換成admin使用者操作

7.2.8 配置hadoop環境變量

8、啟動叢集

8.1、啟動journalnode,三台機器都要執行(僅第一次啟動hadoop時,需要這一步操作,之後不再需要手動啟動journalnode),前提zookeeper叢集已啟動:

啟動journalnde是為了建立/data/ha/jn,此時jn裡面是空的

檢視journalnode服務日志

注:hadoop-daemon.sh stop journalnode 關閉journalnode節點

8.2、在[nn1]上,對namenode進行格式化,并啟動:

hadoop高可用叢集搭建

格式化namenode,此時jn裡面會産生叢集id等資訊

hadoop高可用叢集搭建

注:圖檔盜用别人的,node21對用我主機的node60

另外,/data/ha/tmp也會産生如下資訊

hadoop高可用叢集搭建

啟動nn1上namenode

8.3、在[nn2]上,同步nn1的中繼資料資訊:

hadoop高可用叢集搭建

8.4、啟動[nn2]:

8.5、在[nn1]上,啟動所有datanode

8.6、檢視web頁面此時顯示

hadoop高可用叢集搭建
hadoop高可用叢集搭建

8.7、手動切換狀态,在各個namenode節點上啟動dfszk failover controller,先在哪台機器啟動,哪個機器的namenode就是active namenode

或者強制手動其中一個節點變為active

web頁面檢視

8.8、自動切換狀态,需要初始化ha在zookeeper中狀态,先停掉hdfs服務,然後随便找一台zookeeper的安裝節點

hadoop高可用叢集搭建

檢視,此時會産生一個hadoop-ha的目錄

啟動hdfs服務,檢視namenode狀态

8.9、測試namenode高可用

8.9.1、在node60上kill掉namenode程序,然後通過浏覽器檢視node89的狀态,發現狀态變為active,說明高可用測試成功

8.9.2、重新啟動node60的namenode程序,sh start-dfs.sh,浏覽器通路node60,此時node60的狀态為standby

至此,hadoop高可用叢集搭建完畢。

9、啟動yarn

9.1、在node89中執行:

9.2、在node145中執行:

9.3、檢視服務狀态

10、檢視啟動journalnode日志

配置叢集常見錯誤

1、執行yum提示錯誤:rpmdb: bdb0113 thread/process 424227/139826856310848 failed

解決方案:https://blog.csdn.net/qq_41688455/article/details/86690143

2、hadoop-daemon.sh start journalnode啟動失敗

2020-03-09 14:20:03,099 info org.apache.hadoop.hdfs.qjournal.server.journalnode: registered unix signal handlers for [term, hup, int]

2020-03-09 14:20:03,303 error org.apache.hadoop.hdfs.qjournal.server.journalnode: failed to start journalnode.

org.apache.hadoop.util.diskchecker$diskerrorexception: cannot create directory: /opt/module/hadoop-2.7.6/data/ha/jn

at org.apache.hadoop.util.diskchecker.checkdir(diskchecker.java:106)

at org.apache.hadoop.hdfs.qjournal.server.journalnode.validateandcreatejournaldir(journalnode.java:118)

at org.apache.hadoop.hdfs.qjournal.server.journalnode.start(journalnode.java:138)

at org.apache.hadoop.hdfs.qjournal.server.journalnode.run(journalnode.java:128)

at org.apache.hadoop.util.toolrunner.run(toolrunner.java:70)

at org.apache.hadoop.util.toolrunner.run(toolrunner.java:84)

at org.apache.hadoop.hdfs.qjournal.server.journalnode.main(journalnode.java:299)

2020-03-09 14:20:03,309 info org.apache.hadoop.util.exitutil: exiting with status -1

2020-03-09 14:20:03,311 info org.apache.hadoop.hdfs.qjournal.server.journalnode: shutdown_msg:

解決方案:

$ sudo chown admin:admin hadoop-2.7.6/

3、2020-03-13 17:15:20,059 warn org.apache.hadoop.hdfs.server.common.storage: failed to add storage directory [disk]file:/opt/module/hadoop-2.7.6/data/ha/tmp/dfs/data/

java.io.ioexception: incompatible clusterids in /opt/module/hadoop-2.7.6/data/ha/tmp/dfs/data: namenode clusterid = cid-1e9a7844-9d48-4d66-be81-5ee83e19a482; datanode clusterid = cid-0599cb61-c91b-453f-9821-fa32956b55c0

由于多次格式化指令所緻(/opt/module/hadoop-2.7.6/bin/hdfs namenode -format)

解決方法:

停止hadoop服務,删除/opt/module/hadoop-2.7.6/data下的所有檔案,然後重新格式化,再啟動就好了.

ssh admin@node60 'rm -rf /opt/module/hadoop-2.7.6/data';

ssh admin@node89 'rm -rf /opt/module/hadoop-2.7.6/data';

ssh admin@node145 'rm -rf /opt/module/hadoop-2.7.6/data';

參考文章:

centos7.5搭建hadoop2.7.6完全分布式叢集

hadoop高可用叢集搭建