劉慶生 陳位妮
摘要:高可用是保持服務(wù)高度可用性的一種設(shè)計(jì)。Hadoop高可用是應(yīng)用在只有一個(gè)NameNode節(jié)點(diǎn)無(wú)法在故障宕機(jī)或者升級(jí)軟硬件需要重啟時(shí)而導(dǎo)致中止服務(wù)時(shí),可快速用候補(bǔ)節(jié)點(diǎn)替代。要實(shí)現(xiàn)Hadoop高可用性,配置高可用是關(guān)鍵,特別要掌握配置過(guò)程中的技巧。
關(guān)鍵詞:高可用、Active(服務(wù))、Standby(候補(bǔ))、配置
HA is a design to keep services highly available.Hadoop’s HA is mainly used in cases where only one NameNode node is unable to suspend service in the event of a failure or a software or hardware upgrade requiring a restart,and can be quickly replaced with a standby node. To achieve Hadoop’s HA,configuration high availability is the key,especially to master the skills in the configuration process.
一、什么是高可用
高可用(High Availability),簡(jiǎn)稱HA,是通過(guò)專門設(shè)計(jì)來(lái)減少不可用時(shí)間并保持其服務(wù)高度可用性的一個(gè)系統(tǒng)。它能監(jiān)測(cè)與排除軟件故障、備份和數(shù)據(jù)保護(hù)、監(jiān)視各站點(diǎn)運(yùn)行情況,并隨時(shí)或定時(shí)報(bào)告,主動(dòng)采用必要的控制手段、實(shí)現(xiàn)錯(cuò)誤隔離、切換的主備份服務(wù)器間的服務(wù)。其核心體現(xiàn)在配置多臺(tái)服務(wù)器發(fā)生故障后,能快速的自動(dòng)切換。
二、hadoop集群高可用的應(yīng)用背景
hadoop集群一般包括一個(gè)NameNode和三個(gè)DateNode節(jié)點(diǎn),由FSNameSystem負(fù)責(zé)管理可靠性低的內(nèi)存中的數(shù)據(jù)。因fsimage持久化操作只在edits中更新,當(dāng)客戶端操作時(shí),變化的元數(shù)據(jù)僅在日志里面記錄過(guò)程,只有操作成功后,才在內(nèi)存中記錄數(shù)據(jù),因而edits中記錄的數(shù)據(jù)與fsimage中的數(shù)據(jù)沒有合并,故SecondaryNameNode每隔一段時(shí)間需將edits文件下載合并后加載到內(nèi)存形成新的元數(shù)據(jù),再把內(nèi)存中的數(shù)據(jù)形成新的fsimage發(fā)送到NameNode節(jié)點(diǎn),來(lái)替換原有的fsimage。若僅有一個(gè)NameNode節(jié)點(diǎn),當(dāng)故障宕機(jī)或升級(jí)軟硬件需重啟時(shí),Hadoop會(huì)暫時(shí)中止服務(wù),hdfs無(wú)法提供服務(wù),導(dǎo)致可用性降低。若hadoop集群有兩個(gè)NameNode節(jié)點(diǎn),一個(gè)節(jié)點(diǎn)發(fā)生故障便可用另一個(gè)節(jié)點(diǎn)來(lái)代替,就可以解決無(wú)法持續(xù)提供服務(wù)的問(wèn)題。
三、Hadoop高可用的配置(以搭建3個(gè)節(jié)點(diǎn)組成的Hadoop高可用模式集群為例)
1、高可用群集規(guī)劃。分析Hadoop HA架構(gòu),集群由3臺(tái)主機(jī)組成,先準(zhǔn)備三臺(tái)已配好ZooKeeper組件的虛擬機(jī),其參數(shù)如表1:
2、安裝Hadoop
執(zhí)行/softs stud tar - zxvf hadoop-2.7.3.tar.gz -c/usr/local將Hadoop安裝包解壓到安裝目錄,更名為/usr/local/Hadoop,修改目錄權(quán)限。在/usr/local/Hadoop目錄下創(chuàng)建tmp子目錄。
執(zhí)行vi /usr/local/hadoop/etc/hadoop/hdfs-site.xml,編輯hdfs-site.xml文件,共16個(gè)屬性和值。
執(zhí)行vi /usr/local/hadoop/etc/hadoop/core-site.xml,編輯core-site.xml文件,共3個(gè)屬性和值。
執(zhí)行vi/usr/local/hadoop/etc/hadoop/mapred-site.xml,編輯mapred-site.xml文件,共3個(gè)屬性和值。在編輯mapred-site.xml文件時(shí),先由模板mapred-site.xml.template復(fù)制生成mapred-site.xml。
執(zhí)行vi /usr/local/hadoop/etc/hadoop/yarn-site.xml,編輯yarn-site.xml文件,共8個(gè)屬性和值。
執(zhí)行vi /usr/local/hadoop/etc/hadoop/slaves,編輯slaves文件。其中虛擬機(jī)master1、master2、slave是DataNode節(jié)點(diǎn)。
3、設(shè)置JAVA_HOME
在/usr/local/hadoop/etc/hadoop下的hadoop-env.sh、yarn-env.sh、mapred-env.sh三個(gè)配置文件中設(shè)置JAVA_HOME,增加語(yǔ)句:export JAVA_HOME=/usr/local/jdk,如果存在JAVA_HOME配置語(yǔ)句,注釋后再增加。
4、配置Hadoop環(huán)境變量
用vi .bashrc命令編輯.bashrc文件,文件內(nèi)容如圖1所示:
5、加載環(huán)境變量
用source .bashrc命令使設(shè)置的環(huán)境變量生效,在master1虛擬機(jī)上用hadoop version命令測(cè)試。
6、目錄打包、復(fù)制分發(fā)、解包
將/usr/local/hadoop目錄打包,使用scp命令分發(fā)到master2、slave并解包到/usr/local目錄。分別在master2和slave上執(zhí)行。如圖2所示:
7、分發(fā)加載.bashrc文件
將master1上的~/.bashrc文件分發(fā)到master2、slave,并加載。在master2和slave上執(zhí)行。
8、初始化
(1)啟動(dòng)ZooKeeper組件
分別在三臺(tái)虛擬機(jī)上用zkServer.sh start命令依次啟動(dòng)ZooKeeper組件,檢查ZooKeeper的角色:一個(gè)leader和兩個(gè)follower。
(2)啟動(dòng)所有節(jié)點(diǎn)的journalnode進(jìn)程
啟動(dòng)后,三臺(tái)虛擬機(jī)進(jìn)程都包括:journalNode、quorumPeerMain兩個(gè)進(jìn)程。
(3)在master1上執(zhí)行格式化命令
在master1上格式化~$ hdfs namenode - format,因兩個(gè)NameNode管理同一個(gè)元數(shù)據(jù),所以僅需在一個(gè)NameNode上格式化。
(4)啟動(dòng)master1虛擬機(jī)上的NameNode進(jìn)程
啟動(dòng)后,master1包括NameNode、journalNode、quorumPeerMain三個(gè)進(jìn)程。
(5)在master2上同步master1上的元數(shù)據(jù)
在master2上執(zhí)行~$ hdfs namenode -bootstrapStandby,圖4所示信息表示同步成功。
(6)停止master1的NameNode進(jìn)程
在master1上執(zhí)行~$ hadoop -daemon.sh stop namenode stopping namenode即可停止。
(7)同時(shí)開啟DataNode進(jìn)程
執(zhí)行master1的~$ hadoop -daemon.sh start datanode,即同時(shí)開啟所有主機(jī)上的DataNode進(jìn)程。
(8)初始化zkfc監(jiān)聽
執(zhí)行master1上~$ hdfszkfc - formatZK,進(jìn)入ZooKeeper客戶端,用ls命令顯示如圖5所示的hadoop-ha節(jié)點(diǎn)。
(9)在兩臺(tái)主機(jī)上單步啟動(dòng)zkfc
在master1和master2執(zhí)行~$ hadoop -daemon.sh start zkfc,單步啟動(dòng)zkfc。
(10)在兩臺(tái)主機(jī)上單步啟動(dòng)NameNode
分別在master1和master2執(zhí)行~$ hadoop -daemon.sh start namenode,單步啟動(dòng)NameNode。
(11)在master1上啟動(dòng)yarn
在master1上執(zhí)行~$ start -yarn.sh,但只啟動(dòng)了如圖6所示的一個(gè)resourcemanager,所以執(zhí)行~$ yarn --daemon.sh start resourcemanager單獨(dú)動(dòng)master2的進(jìn)程。
(8)檢查三臺(tái)虛擬機(jī)進(jìn)程,如圖7所示即完成了高可用的設(shè)置。
9、Hadoop高可用的日常啟動(dòng)
按ZooKeeper->所有節(jié)點(diǎn)的journalnode服務(wù)->所有節(jié)點(diǎn)的datanode服務(wù)->分別啟動(dòng)master1、master2上ZKFC監(jiān)聽器->分別啟動(dòng)master1、master2上namenode服務(wù)->啟動(dòng)master1所有節(jié)點(diǎn)的yarn服務(wù)->單獨(dú)啟動(dòng)master2的resourcemanager進(jìn)程順序能正常啟動(dòng),說(shuō)明Hadoop高可用搭建完成。
10、關(guān)閉高可用集群。
執(zhí)行master1的stop-all.sh后,如果master2上的resourcemanager進(jìn)程無(wú)法停止,需在master2上手工停止;master1和master2上的JournalNode進(jìn)程需單獨(dú)停止。
11、查看高可用狀態(tài)
分別用瀏覽器打開master1、master2的50070端口,在Web界面可以看到兩個(gè)主機(jī)的高可用狀態(tài),如圖8 所示。
12、測(cè)試Hadoop高可用
在Web界面看到兩個(gè)NameNode節(jié)點(diǎn),一個(gè)處于激活(active)狀態(tài),一個(gè)處于備用(standby)狀態(tài)。手工停止處于激活狀態(tài)節(jié)點(diǎn)(master2)的namenode進(jìn)程,觀察處于備用狀態(tài)的節(jié)點(diǎn)(master1)是否能自動(dòng)切換到激活狀態(tài)。
(1)手工停止master2虛擬機(jī)上namenode進(jìn)程. 如圖9所示:
(2)用瀏覽器查看master1和master2的50070端口。master1節(jié)點(diǎn)已經(jīng)切換到active狀態(tài),master2節(jié)點(diǎn)則因?yàn)橥V沽薾amenode進(jìn)程而無(wú)法訪問(wèn)。至此,Hadoop高可用配置成功。如圖10、圖11所示:
Hadoop高可用模式對(duì)硬件要求比較高,要求宿主機(jī)至少8G內(nèi)存,才能開出3臺(tái)1G內(nèi)存的ubuntu虛擬機(jī)。建議創(chuàng)建5臺(tái)虛擬機(jī),將NameNode和DataNode分開到不同虛擬機(jī)中,搭建Hadoop高可用的虛擬機(jī)或服務(wù)器使用奇數(shù)臺(tái)數(shù)。
Hadoop高可用的配置是一個(gè)比較復(fù)雜的過(guò)程,高可用性能能否在系統(tǒng)因故障停機(jī)時(shí)啟用,關(guān)鍵在于搭建過(guò)程中配置是否正確。在實(shí)際搭建過(guò)程,出現(xiàn)缺失進(jìn)程的情況,一般是配置出錯(cuò)使一些進(jìn)程無(wú)法正常啟動(dòng)。所以在搭建過(guò)程要注意一些操作技巧避免出錯(cuò):修改配置文件后,需重新格式化hdfs和zkfc。在格式化hdfs前,先刪除tmp目錄下所有內(nèi)容;格式化zkfc前,需進(jìn)入ZooKeeper客戶端,刪除hadoop-ha和yarn-leader-election節(jié)點(diǎn)。另外特別注意配置文件hdfs-core.xml中的dfs.namenode.shared.edits.dir值的設(shè)置,需設(shè)置為不運(yùn)行namenode進(jìn)程的主機(jī)。
參考文獻(xiàn):
[1]湯愈韜.Hadoop集群的高可用-HA[EB/OL].https://blog.csdn.net/qq_38200548/article/details/84790353.2018-07-05
[2]燈火闌珊.大數(shù)據(jù)之Hadoop HDFS-HA架構(gòu)[EB/OL].https://zhuanlan.zhihu.com/p/82190205.2019-09-11
課題項(xiàng)目:2020年湖北省職教學(xué)會(huì)課題,課題名稱:基于OBE理念課程體系建設(shè)的內(nèi)在邏輯及實(shí)踐路徑研究-以大數(shù)據(jù)技術(shù)與應(yīng)用專業(yè)為例,課題編號(hào): ZJGA202022
作者簡(jiǎn)介:
劉慶生(1971-),性別:男,民族:漢,籍貫:湖北咸寧,職稱:教授,本科,研究方向:大數(shù)據(jù)、人工智能
陳位妮(1974-),性別:女,民族:漢,籍貫:湖南常德,職稱:教授,碩士,研究方向:大數(shù)據(jù)、計(jì)算機(jī)應(yīng)用、職業(yè)教育