Hadoop框架基礎(五)

** Hadoop框架基礎(五)

已經部署了Hadoop的完全分布式集群,我們知道NameNode節點的正常運行對于整個HDFS系統來說非常重要,如果NameNode宕掉了,那么整個HDFS就要整段垮掉了,所以人類思考,能不能讓世界多一點愛:),我們能不能弄個備用的NameNode,一旦正在使用的NameNode原地爆炸了,另一臺備用的NameNode能立刻代替原先NameNode的位置,繼續讓HDFS系統正常運行?(同理,ResourceManager也是可以的。)

世界果然充滿愛,動物管理員橫空出世——zookeeper框架

** ZooKeeper

這個框架的翻譯為動物園管理員,想想其實是有道理的,大數據領域,Hadoop框架是大象,Hive框架是蜜蜂(為啥是個大象頭哎喂?),Pig框架是豬,都是人類的好朋友,所以有個動物管理員也不差異。接下來簡單介紹一下zookeeper框架。

** zookeeper功能:

* 統一命名服務(Name Service)

* 配置管理(Configuration Management)

* 集群管理(Group Membership)

* 共享鎖(Locks)/同步鎖

** zookeeper簡述:

apache開源項目,提供分布式集群,屬于Hadoop底下的一個分支,為分布式應用提供協調服務,官方網站:zookeeper.apache.org,zookeeper服務器為奇數個,即2n+1個服務器,允許有n個機器宕機,不影響整個系統的運行。比如:3臺機器,其中有1臺機器宕機,且存活的Server的數目不得少于n+1.,不會影響整個系統運行。 zookeeper集群會選擇出一個leader服務器,其他服務器角色是follower,它使用的FastLeaderELection選舉算法是類fast paoxs的算法(有興趣的可以周邊查閱下),投票數量結果過半的服務器選為leader服務器。

** zookeeper原理簡述

當leader崩潰或者leader失去大多數的follower,這時候zookeeper進入恢復模式,恢復模式需要重新選舉出一個新的leader,讓所有的Server都恢復到一個正確的狀態,系統默認的選舉算法為fast paxos。

** zookeeper的Fast Leader選舉機制

首先介紹幾個概念

服務器ID

比如有三臺服務器,編號分別是1,2,3。

編號越大在選擇算法中的權重越大。

數據ID

服務器中存放的最大數據ID.

值越大說明數據越新,在選舉算法中數據越新權重越大。

邏輯時鐘

或者叫投票的輪數,同一輪投票過程中的邏輯時鐘值是相同的。每投完一輪票這個數據就會增加,然后與接收到的其它服務器返回的投票信息中的數值相比,根據不同的值做出不同的判斷。

選舉狀態

LOOKING,競選狀態。

FOLLOWING,隨從狀態,同步leader狀態,參與投票。

OBSERVING,觀察狀態,同步leader狀態,不參與投票。

LEADING,領導者狀態。

選舉消息內容

在投票完成后,需要將投票信息發送給集群中的所有服務器,它包含如下內容。

服務器ID

數據ID

邏輯時鐘(或者理解為選舉輪數,從0開始遞增)

選舉狀態

開始投票:

1、恢復數據

zookeeper服務器中的每份數據,都有一個對應的id值,這個值是依次遞增的,越新的數據,對應的ID值就越大,所以先把數據恢復到最新。

2、廣播投票到其他服務器

恢復數據到最新之后,每個zookeeper服務器發送自己選舉的leader(嶄新狀態首次投票推選自己),這個協議中包含了以下幾部分的數據:

* 當前的服務器的id,即sid

* 當前服務器的最大的數據id,這個值大的服務器,說明存放了更新的數據.

* 當前服務器本次的邏輯時鐘的值

* 當前機器的選舉狀態

3、接收其他服務器的廣播

每個服務器將自己的數據(以上4個)廣播給其他服務器,同時也接收其他服務器廣播過來的數據,之后:

如果所接收數據中服務器的狀態還是在選舉階段(LOOKING 狀態),那么首先判斷邏輯時鐘值,又分為以下三種情況:

* 如果發送過來的邏輯時鐘大于目前的邏輯時鐘,那么說明這次選舉更加的新,此時需要更新一下本機的邏輯時鐘值,同時將之前收集到的來自其他服務器的選舉清空,因為這些數據已經過期了。然后判斷是否需要更新當前自己的選舉情況。在這里是根據選舉sid和保存的最大數據id來進行判斷的,這兩種數據之間對這個選舉結果的影響的權重關系是:首先看數據id,數據id大者勝出;其次再判斷sid,sid大者勝出。然后再將自身最新的選舉結果廣播給其他服務器。

* 如果發送過來數據的邏輯時鐘小于本機的邏輯時鐘,說明對方在一個相對較早的選舉進程中,此時只需要發送自己的選舉數據即可。

* 兩邊的邏輯時鐘相同,此時只需要判斷是否需要更新本機的數據,如果更新了再將自己最新的選舉結果廣播出去就是了。

然后再處理兩種情況:

* 服務器判斷是不是已經收集到了所有服務器的選舉狀態,如果是,那么這臺服務器選舉的leader就定下來了,然后根據選舉結果設置自己的角色(FOLLOWING還是LEADER),選舉結束。

* 即使沒有收集到所有服務器的選舉狀態,也可以根據該節點上選擇的最新的leader是不是得到了超過半數以上服務器的支持,如果是,那么當前線程將被阻塞等待一段時間(這個時間在finalizeWait定義)看看是不是還會收到當前leader的數據更優的leader,如果經過一段時間還沒有這個新的leader提出來,那么這臺服務器最終的leader就確定了,否則進行下一次選舉。

?如果所接收服務器不在選舉狀態,也就是在FOLLOWING或者LEADING狀態做以下兩個判斷:

* 如果邏輯時鐘相同,將該數據保存到recvset,如果所接收服務器宣稱自己是leader,那么將判斷是不是有半數以上的服務器選舉它,如果是則設置選舉狀態,選舉結束。

* 否則這是一條與當前邏輯時鐘不符合的消息,那么說明在另一個選舉過程中已經有了選舉結果,于是將該選舉結果加入到集合中,再根據集合來判斷是否可以結束選舉,如果可以也是保存邏輯時鐘,設置選舉狀態,選舉結束。

原理引用網絡上的一張圖,如圖所示:

在此舉個例子:假設有5臺機器

服務器1啟動,給自己投票,然后發投票信息,由于其它機器還沒有啟動所以它收不到反饋信息,服務器1的狀態一直屬于Looking。

服務器2啟動,給自己投票,同時與之前啟動的服務器1交換結果,由于服務器2的編號大所以服務器2勝出,但此時投票數沒有大于半數,所以兩個服務器的狀態依然是LOOKING。

服務器3啟動,給自己投票,同時與之前啟動的服務器1,2交換信息,由于服務器3的編號最大所以服務器3勝出,此時投票數正好大于半數,所以服務器3成為leader,服務器1,2成為follower。

服務器4啟動,給自己投票,同時與之前啟動的服務器1,2,3交換信息,盡管服務器4的編號大,但之前服務器3已經勝出,所以服務器4只能成為follower。

服務器5啟動,后面的邏輯同服務器4成為follower。

zookeeper安裝:

* 下載地址傳送門:

zookeeper下載:鏈接:http://pan.baidu.com/s/1o78IBsY 密碼:xh3k

* 解壓到modules目錄中

* 修改配置文件(cp -a命令意為保留原文件屬性的情況下,復制文件)

復制conf目錄下的zoo_sample.cfg文件并重命名為zoo.cfg文件

$ cp -a zoo_sample.cfg zoo.cfg,執行后,如圖:

對文件做如下修改:

$ vi zoo.cfg

dataDir=/opt/modules/zookeeper-3.4.5/zkData, 如圖:

創建這個目錄:

$ mkdir /opt/modules/zookeeper-3.4.5/zkData

* 啟動zookeeper

單節點啟動,切換到zookeeper的安裝根目錄:

$ bin/zkServer.sh start

查看啟動狀態:

$ bin/zkServer.sh status,如圖:

** zookeeper集群的部署

集群規劃如下:

* 修改zoo.cfg

dataDir=/opt/modules/zookeeper-3.4.5/zkData

server.1=192.168.122.200:2888:3888

server.2=192.168.122.201:2888:3888

server.3=192.168.122.202:2888:3888

注意:這里我使用的是三臺服務器的ip地址,如圖:

* 添加myid文件,注意一定要在linux里面創建

$ vi zkData/myid

添加內容:1

* 把zookeeper目錄拷貝給其他集群服務器

$ scp -r zookeeper-3.4.5/ z02:/opt/modules/

$ scp -r zookeeper-3.4.5/ z03:/opt/modules/

修改myid文件

z02 為 2

z03 為 3

* 依次啟動所有集群服務

$ bin/zkServer.sh start

* 檢查每個服務器的狀態

$ bin/zkServer.sh status

一頓操作之后,如圖:通過查看狀態,可以發現,現在的leader服務器是z02,其他的服務器為follower。

** NameNode的HA部署

目標: 防止單個namenode宕機以后,整個HDFS集群失效

集群規劃:

注意:建議配置之前把之前服務器配置備份一次,方便以后使用

$ cp -ra hadoop-2.5.0/ back-up-hadoop-2.5.0/,如圖:

* 配置core-site.xml,如圖:


* 配置:hdfs-site.xml,如圖:

* 拷貝文件給其他服務器

刪除三臺服務器的數據目錄,去每個機器上執行該命令:

$ rm -rf data/ ?

拷貝給其他兩臺服務器:

$ scp etc/hadoop/core-site.xml etc/hadoop/hdfs-site.xml ?z02:/opt/modules/hadoop-2.5.0/etc/hadoop/

$ scp etc/hadoop/core-site.xml etc/hadoop/hdfs-site.xml? z03:/opt/modules/hadoop-2.5.0/etc/hadoop/

* 啟動服務

* 在各個JournalNode節點上,輸入以下命令啟動journalnode服務:

$ sbin/hadoop-daemon.sh start journalnode

* 在[nn1]上,對其進行格式化,并啟動

$ bin/hdfs namenode -format

$ sbin/hadoop-daemon.sh start namenode

* 在[nn2]上,同步nn1的元數據信息,并啟動

$ bin/hdfs namenode -bootstrapStandby

$ sbin/hadoop-daemon.sh start namenode

* 在nn1中與nn2中查看jps進程如下圖:

* 瀏覽器瀏覽,以下兩個地址均可以訪問HDFS:

http://z01:50070/

http://z02:50070/

* 手動把nn1設置為active

$ bin/hdfs haadmin -transitionToActive nn1

以上為手動故障轉移,如果我們想自動切換故障,需要進行如下配置,即開啟故障自動轉移功能

*關閉所有HDFS服務

在[nn1]執行:

$ sbin/stop-dfs.sh,如圖:

配置core-site.xml

添加屬性:

ha.zookeeper.quorum:z01:2181,z02:2181,z03:2181

配置hdfs-site.xml

添加屬性:

dfs.ha.automatic-failover.enabled.mycluster:true

* 拷貝文件給后面兩臺服務器

$ scp etc/hadoop/core-site.xml etc/hadoop/hdfs-site.xml z02:/opt/modules/hadoop-2.5.0/etc/hadoop/

$ scp etc/hadoop/core-site.xml etc/hadoop/hdfs-site.xml z03:/opt/modules/hadoop-2.5.0/etc/hadoop/

* 啟動Zookeeper服務

$ bin/zkServer.sh start

啟動zookeeper,初始化HA在Zookeeper中狀態

$ bin/hdfs zkfc -formatZK

*啟動HDFS服務

在[nn1]執行:

$ sbin/start-dfs.sh

nn1與nn2的jps如圖所示:

* 查看活躍狀態

$ bin/hdfs haadmin -getServiceState nn1

$ bin/hdfs haadmin -getServiceState nn2

如圖:

* 測試,訪問如下站點也可以查看NameNode的活躍狀態:

http://z01:50070/

http://z02:50070/

此時kill掉active的NameNode進程,查看standby狀態會自動切換到active

** Yarn的HA部署

目標: 防止單個resourcemanager宕機以后,整個YARN集群失效

集群規劃:

* 配置:yarn-site.xml,如圖:

* 拷貝給其他服務器并修改

$ scp etc/hadoop/yarn-site.xml z02:/opt/modules/hadoop-2.5.0/etc/hadoop/

$ scp etc/hadoop/yarn-site.xml z03:/opt/modules/hadoop-2.5.0/etc/hadoop/

* 啟動每個服務器的服務

通過jps查看每個服務器的zookeeper服務QuorumPeerMain已經運行,沒有運行則開啟,方式前文已經說過,不再贅述。

在 z02中:

$ sbin/start-yarn.sh

在z03中:

$ sbin/yarn-daemon.sh start resourcemanager

查看服務狀態:

$ bin/yarn rmadmin -getServiceState rm1

$ bin/yarn rmadmin -getServiceState rm2

如圖:

測試:

運行我們之前打好的jar包,進行wordcount實例運算,在運算過程中kill掉active的rm,觀察任務運行。

先開啟HDFS服務(忘記的請看上邊的內容),再上傳一個words.txt文檔到HDFS,再開始單詞統計,涉及命令:

$ bin/hdfs dfs -mkdir /input/

$ bin/hdfs dfs -mkdir /input/words/

$ bin/hdfs dfs -put words.txt /input/words/

如圖:

$ bin/yarn jar MyWordCount.jar /input/words/words.txt /output/

** 總結

這一節簡單介紹了zookeeper并闡述其工作原理,成功使用zookeeper部署了NameNode HA和Resourcemanager HA。


IT全棧公眾號:

QQ大數據技術交流群(廣告勿入):476966007


下一節:Hadoop框架基礎(六)后續更新

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,908評論 6 541
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,324評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,018評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,675評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,417評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,783評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,779評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,960評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,522評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,267評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,471評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,009評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,698評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,099評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,386評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,204評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,436評論 2 378

推薦閱讀更多精彩內容