溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

HDFS中HA機(jī)制及Hadoop集群搭建的示例分析

發(fā)布時(shí)間:2021-12-09 14:08:44 來(lái)源:億速云 閱讀:142 作者:小新 欄目:云計(jì)算

小編給大家分享一下HDFS中HA機(jī)制及Hadoop集群搭建的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

1.HA的簡(jiǎn)介

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:

  • In the case of an unplanned event such as a machine crash, the cluster would be unavailable until an operator restarted the NameNode.

  • Planned maintenance events such as software or hardware upgrades on the NameNode machine would result in windows of cluster downtime.

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:

HDFS中HA機(jī)制及Hadoop集群搭建的示例分析

Hadoop2.x:

HDFS中HA機(jī)制及Hadoop集群搭建的示例分析

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ù) 。

2.Hadoop2中HA的架構(gòu)

      在一個(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)完全同步了,如圖所示:

HDFS中HA機(jī)制及Hadoop集群搭建的示例分析

為了確??焖偾袚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ò)。

3.自動(dòng)故障轉(zhuǎn)移

    有一個(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ǔ)選舉.

4.Hadoop集群的機(jī)器分配

    硬件:7臺(tái)CentOS虛擬機(jī),內(nèi)存512,硬盤(pán)20G.

    網(wǎng)絡(luò):

主機(jī)IP安裝的軟件
yun10-1192.168.2.11 jdk、hadoop
yun10-2192.168.2.12jdk、hadoop
yun10-3192.168.2.13jdk、hadoop
yun10-4192.168.2.14jdk、hadoop
yun10-5192.168.2.15jdk、hadoop、zookeeper
yun10-6192.168.2.16jdk、hadoop、zookeeper
yun10-7192.168.2.17jdk、hadoop、zookeeper

    服務(wù):

yun10-1namenodezkfc

yun10-2namenodezkfc

yun10-3


resourcemanager
yun10-4


resourcemanager
yun10-5datanodejournalNodeQuorumPeerMainnodemanager
yun10-6datanodejournalNodeQuorumPeerMainnodemanager
yun10-7datanodejournalNodeQuorumPeerMainnodemanager

     說(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)。

5.安裝配置zookeeper集群

   省略.見(jiàn)鏈接:http://my.oschina.net/codeWatching/blog/367309

6.安裝配置Hadoop集群

  Hadoop的配置文件集中在/etc/hadoop/下

 a.修改hadoop-env.sh

    export JAVA_HOME=/home/lisai/app/jdk1.7.0_55

  b.修改core-site.xml

HDFS中HA機(jī)制及Hadoop集群搭建的示例分析

  c.修改hdfs-site.xml

 HDFS中HA機(jī)制及Hadoop集群搭建的示例分析

HDFS中HA機(jī)制及Hadoop集群搭建的示例分析

HDFS中HA機(jī)制及Hadoop集群搭建的示例分析

  d.修改mapred-site.xml

HDFS中HA機(jī)制及Hadoop集群搭建的示例分析

  e.修改yarn-site.xml

HDFS中HA機(jī)制及Hadoop集群搭建的示例分析

HDFS中HA機(jī)制及Hadoop集群搭建的示例分析

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

7.配置信息的拷貝

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/

8.啟動(dòng)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

9.驗(yàn)證集群

         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è)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI