1、叢集規劃
1.1、主機配置環境
1.2、安裝後啟動的程序
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進行格式化,并啟動:
格式化namenode,此時jn裡面會産生叢集id等資訊
注:圖檔盜用别人的,node21對用我主機的node60
另外,/data/ha/tmp也會産生如下資訊
啟動nn1上namenode
8.3、在[nn2]上,同步nn1的中繼資料資訊:
8.4、啟動[nn2]:
8.5、在[nn1]上,啟動所有datanode
8.6、檢視web頁面此時顯示
8.7、手動切換狀态,在各個namenode節點上啟動dfszk failover controller,先在哪台機器啟動,哪個機器的namenode就是active namenode
或者強制手動其中一個節點變為active
web頁面檢視
8.8、自動切換狀态,需要初始化ha在zookeeper中狀态,先停掉hdfs服務,然後随便找一台zookeeper的安裝節點
檢視,此時會産生一個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高可用叢集搭建