您好,登錄后才能下訂單哦!
小編給大家分享一下HDFS中HA機(jī)制及Hadoop集群搭建的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
Background Prior to Hadoop 2.0.0, the NameNode was a single point of failure (SPOF) in an HDFS cluster. Each cluster had a single NameNode, and if that machine or process became unavailable, the cluster as a whole would be unavailable until the NameNode was either restarted or brought up on a separate machine. This impacted the total availability of the HDFS cluster in two major ways:
The HDFS High Availability feature addresses the above problems by providing the option of running two redundant NameNodes in the same cluster in an Active/Passive configuration with a hot standby. This allows a fast failover to a new NameNode in the case that a machine crashes, or a graceful administrator-initiated failover for the purpose of planned maintenance. 這一段英文用有道翻譯了一下.就是說(shuō)以前的機(jī)制怎么怎么不行,要改進(jìn)什么什么!就是主要解決NameNode節(jié)點(diǎn)的單點(diǎn)故障,然后說(shuō)更新后的NameNode可以如何保持高可用性,就是crash掛掉了,也可以快速的恢復(fù)。其實(shí)我們能想到就是搞主從備份的策略,但是往往說(shuō)起來(lái)容易,實(shí)現(xiàn)就可復(fù)雜。接下來(lái),讓我們就來(lái)看看.... |
還是用圖來(lái)說(shuō)明吧:
Hadoop1.x:
Hadoop2.x:
hadoop2中HDFS的高可靠指的是可以同時(shí)啟動(dòng)2個(gè)NameNode。其中一個(gè)處于工作狀態(tài),另一個(gè)處于隨時(shí)待命狀態(tài)。
這樣,當(dāng)一個(gè)NameNode所在的服務(wù)器宕機(jī)時(shí),可以在數(shù)據(jù)不丟失的情況下,手工或者自動(dòng)切換到另一個(gè)NameNode提供服務(wù)。 這些NameNode之間通過(guò)共享數(shù)據(jù),保證數(shù)據(jù)的狀態(tài)一致。多個(gè)NameNode之間共享數(shù)據(jù),可以通過(guò)Nnetwork File System或者Quorum Journal Node。前者是通過(guò)linux共享的文件系統(tǒng),屬于操作系統(tǒng)的配置;后者是hadoop自身的東西,屬于軟件的配置。我們這里講述使用Quorum Journal Node的配置方式??梢允谷斯ぃ部梢宰詣?dòng)配置(使用zookeeper就行啦).
至于NFS的配置方法,訪問(wèn):http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithNFS.html
看apache上的文檔要比我這好多太多,上面的資料給的比較全面。搞的我都不想寫(xiě)博客了?。?!
集群?jiǎn)?dòng)時(shí),可以同時(shí)啟動(dòng)2個(gè)NameNode。這些NameNode只有一個(gè)是active的,另一個(gè)屬于standby狀態(tài)。
active狀態(tài)意味著提供服務(wù),standby狀態(tài)意味著處于休眠狀態(tài),只進(jìn)行數(shù)據(jù)同步,時(shí)刻準(zhǔn)備著提供服務(wù) 。
在一個(gè)典型的HA集群中,每個(gè)NameNode是一臺(tái)獨(dú)立的服務(wù)器。在任一時(shí)刻,只有一個(gè)NameNode處于active狀態(tài),另一個(gè)處于standby狀態(tài)。其中,active狀態(tài)的NameNode負(fù)責(zé)所有的客戶端操作,standby狀態(tài)的NameNode處于從屬地位,維護(hù)著數(shù)據(jù)狀態(tài),隨時(shí)準(zhǔn)備切換。
兩個(gè)NameNode為了數(shù)據(jù)同步,會(huì)通過(guò)一組稱作JournalNodes的獨(dú)立進(jìn)程進(jìn)行相互通信。當(dāng)active狀態(tài)的NameNode的命名空間有任何修改時(shí),會(huì)告知大部分的JournalNodes進(jìn)程。standby狀態(tài)的NameNode有能力讀取JNs中的變更信息,并且一直監(jiān)控edit log的變化,把變化應(yīng)用于自己的命名空間。standby可以確保在集群出錯(cuò)時(shí),命名空間狀態(tài)已經(jīng)完全同步了,如圖所示:
為了確??焖偾袚Q,standby狀態(tài)的NameNode有必要知道集群中所有數(shù)據(jù)塊的位置。為了做到這點(diǎn),所有的datanodes必須配置兩個(gè)NameNode的地址,發(fā)送數(shù)據(jù)塊位置信息和心跳給他們兩個(gè)。
對(duì)于HA集群而言,確保同一時(shí)刻只有一個(gè)NameNode處于active狀態(tài)是至關(guān)重要的。否則,兩個(gè)NameNode的數(shù)據(jù)狀態(tài)就會(huì)產(chǎn)生分歧,可能丟失數(shù)據(jù),或者產(chǎn)生錯(cuò)誤的結(jié)果。為了保證這點(diǎn),JNS必須確保同一時(shí)刻只有一個(gè)NameNode可以向自己寫(xiě)數(shù)據(jù)。
注意:在HA集群中,standby狀態(tài)的NameNode可以完成checkpoint操作,因此沒(méi)必要配置Secondary NameNode、CheckpointNode、BackupNode。如果真的配置了,還會(huì)報(bào)錯(cuò)。
有一個(gè)洋氣的名字叫做automaticaly failover.
而手動(dòng)故障轉(zhuǎn)移配置叫做configure a manual failover.也就是說(shuō),在手動(dòng)的模式下,系統(tǒng)不會(huì)自動(dòng)啟動(dòng)故障轉(zhuǎn)移,就是Active----》Stanby的過(guò)程。就必須執(zhí)行一條命令: hdfs haadmin -failover --forcefence serviceId serviced2.就會(huì)把狀態(tài)進(jìn)行安全的切換。其中serviceId2就會(huì)變成active狀態(tài).
但是自動(dòng)就沒(méi)有這樣簡(jiǎn)單啦,自動(dòng)故障處理需要兩個(gè)組件:a ZooKeeper quorum和ZKFailoverController進(jìn)程(簡(jiǎn)稱ZKFC).在其中ZooKeeper主要做兩件事:
Failure detection故障檢測(cè),集群中的每個(gè)NameNode機(jī)器的持久會(huì)話都會(huì)在ZooKeeper管理保存,如果機(jī)器崩潰的話,zookeeper就會(huì)將會(huì)話到期,然后通知另一個(gè)故障轉(zhuǎn)移會(huì)被觸發(fā).
Active NameNode election:Active NameNode的選舉,zookeeper提供了一個(gè)簡(jiǎn)單的機(jī)制來(lái)專門(mén)選擇一個(gè)節(jié)點(diǎn)作為活躍。如果當(dāng)前活動(dòng)NameNode崩潰,另一個(gè)節(jié)點(diǎn)可能拿到一個(gè)特殊的互斥型鎖用來(lái)表明它應(yīng)該成為下一個(gè)active NameNode。
ZKFailoverController實(shí)際上是zookeeper的一個(gè)客戶端,同時(shí)監(jiān)控和管理著NameNode的狀態(tài),每一個(gè)跑著ZKFC的NameNode,都有下面的作用:
健康的監(jiān)控,ZooKeeper會(huì)話管理,Zookeeper基礎(chǔ)選舉.
硬件:7臺(tái)CentOS虛擬機(jī),內(nèi)存512,硬盤(pán)20G.
網(wǎng)絡(luò):
主機(jī) | IP | 安裝的軟件 |
yun10-1 | 192.168.2.11 | jdk、hadoop |
yun10-2 | 192.168.2.12 | jdk、hadoop |
yun10-3 | 192.168.2.13 | jdk、hadoop |
yun10-4 | 192.168.2.14 | jdk、hadoop |
yun10-5 | 192.168.2.15 | jdk、hadoop、zookeeper |
yun10-6 | 192.168.2.16 | jdk、hadoop、zookeeper |
yun10-7 | 192.168.2.17 | jdk、hadoop、zookeeper |
服務(wù):
yun10-1 | namenode | zkfc | ||
yun10-2 | namenode | zkfc | ||
yun10-3 | resourcemanager | |||
yun10-4 | resourcemanager | |||
yun10-5 | datanode | journalNode | QuorumPeerMain | nodemanager |
yun10-6 | datanode | journalNode | QuorumPeerMain | nodemanager |
yun10-7 | datanode | journalNode | QuorumPeerMain | nodemanager |
說(shuō)明:
1.在hadoop2.0中通常由兩個(gè)NameNode組成,一個(gè)處于active狀態(tài),另一個(gè)處于standby狀態(tài)。Active NameNode對(duì) 外提供服務(wù),而Standby NameNode則不對(duì)外提供服務(wù),僅同步active namenode的狀態(tài),以便能夠在它失敗時(shí)快速 進(jìn)行切換。hadoop2.0官方提供了兩種HDFS HA的解決方案,一種是NFS,另一種是QJM。這里我們使用簡(jiǎn)單的QJM 在該方案中,主備NameNode之間通過(guò)一組JournalNode同步元數(shù)據(jù)信息,一條數(shù)據(jù)只要成功寫(xiě)入多數(shù)JournalNode 即認(rèn)為寫(xiě)入成功。通常配置奇數(shù)個(gè)JournalNode.這里還配置了一個(gè)zookeeper集群,用于ZKFC(DFSZKFailoverCont roller)故障轉(zhuǎn)移,當(dāng)Active NameNode掛掉了,會(huì)自動(dòng)切換Standby NameNode為standby狀態(tài)。 2.hadoop-2.2.0中依然存在一個(gè)問(wèn)題,就是ResourceManager只有一個(gè),存在單點(diǎn)故障,hadoop-2.4.1解決了這個(gè)問(wèn) 題,有兩個(gè)ResourceManager,一個(gè)是Active,一個(gè)是Standby,狀態(tài)由zookeeper進(jìn)行協(xié)調(diào)。 |
省略.見(jiàn)鏈接:http://my.oschina.net/codeWatching/blog/367309
Hadoop的配置文件集中在/etc/hadoop/下
a.修改hadoop-env.sh export JAVA_HOME=/home/lisai/app/jdk1.7.0_55 |
b.修改core-site.xml |
c.修改hdfs-site.xml
|
d.修改mapred-site.xml |
e.修改yarn-site.xml |
f.修改slaves(slaves是指定子節(jié)點(diǎn)的位置,因?yàn)橐趛un10-1上啟動(dòng)HDFS、在yun10-3啟動(dòng)yarn,所以yun10-1上的slaves文件指定的是datanode的位置,在yun10-3上的slaves文件指定的是nodemanager的位置) yun10-5 yun10-6 yun10-7 |
g.配置免密碼登陸 #首先要配置yun10-1到y(tǒng)un10-2、yun10-3、yun10-4、yun10-5、yun10-6、yun10-7的免密碼登陸 #在yun10-1上生產(chǎn)一對(duì)鑰匙 ssh-keygen -t rsa #將公鑰拷貝到其他節(jié)點(diǎn),包括自己 ssh-coyp-id yun10-1 ssh-coyp-id yun10-2 ssh-coyp-id yun10-3 ssh-coyp-id yun10-4 ssh-coyp-id yun10-5 ssh-coyp-id yun10-6 ssh-coyp-id yun10-7 #配置yun10-3到y(tǒng)un10-4、yun10-5、yun10-6、yun10-7的免密碼登陸 #在yun10-3上生產(chǎn)一對(duì)鑰匙 ssh-keygen -t rsa #將公鑰拷貝到其他節(jié)點(diǎn) ssh-coyp-id yun10-4 ssh-coyp-id yun10-5 ssh-coyp-id yun10-6 ssh-coyp-id yun10-7 #注意:兩個(gè)namenode之間要配置ssh免密碼登陸,別忘了配置yun10-2到y(tǒng)un10-1的免登陸 在yun10-2上生產(chǎn)一對(duì)鑰匙 ssh-keygen -t rsa ssh-copy-id -i yun10-1 |
scp -r ./hadoop/ yun10-2:/home/lisai/app/hadoop-2.4.1/etc/hadoop/ scp -r ./hadoop/ yun10-3:/home/lisai/app/hadoop-2.4.1/etc/hadoop/ scp -r ./hadoop/ yun10-4:/home/lisai/app/hadoop-2.4.1/etc/hadoop/ scp -r ./hadoop/ yun10-5:/home/lisai/app/hadoop-2.4.1/etc/hadoop/ scp -r ./hadoop/ yun10-6:/home/lisai/app/hadoop-2.4.1/etc/hadoop/ scp -r ./hadoop/ yun10-7:/home/lisai/app/hadoop-2.4.1/etc/hadoop/
a.啟動(dòng)ZooKeeper.
./bin/zkServer.sh start ./bin/zkserver.sh status
b.啟動(dòng)journalnode(分別在在yun10-5、yun10-6、yun10-7上執(zhí)行)
./sbin/hadoop-daemon.sh start journalnode jps
c.格式化HDFS
#在yun10-1上執(zhí)行命令: hdfs namenode -format #格式化后會(huì)在根據(jù)core-site.xml中的hadoop.tmp.dir配置生成個(gè)文件. 這里我配置的是/home/lisai/app/hadoop-2.4.1/tmp,然后將/home/lisai/app/hadoop-2.4.1/tmp拷貝到y(tǒng)un10-2的/home/lisai/app/hadoop-2.4.1下。 scp -r tmp/ yun10-2:/home/lisai/app/hadoop-2.4.1/tmp
d.格式化ZK
#在yun10-1執(zhí)行 hdfs zkfc -formatZK
d.啟動(dòng)HDFS
#在yun10-1執(zhí)行NameNode進(jìn)程 ./sbin/start-hdfs.sh #在yun10-2執(zhí)行NameNode進(jìn)程 ./sbin/hadoop-daemon.sh start NameNode/可能是小寫(xiě). #在yun10-5,yun10-6,yun10-7三臺(tái)別人啟動(dòng) ./sbin/hadoop-daemon.sh start datanode
e.啟動(dòng)YARN(#####注意#####:是在yun10-3上執(zhí)行start-yarn.sh,把namenode和resourcemanager分開(kāi)是因?yàn)樾阅軉?wèn)題,因?yàn)樗麄兌家加么罅抠Y源,所以把他們分開(kāi)了,他們分開(kāi)了就要分別在不同的機(jī)器上啟動(dòng))
#yun10-3 ./sbin/start-yarn.sh #yun10-4 ./sbin/yarn-daemon.sh start resourcemanager
HDFS:http://yun10-1:50070
MapReducer:http://yun10-3:8090
以上是“HDFS中HA機(jī)制及Hadoop集群搭建的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。