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