第一課 Hadoop生態(tài)圈與Zookeeper應(yīng)用實(shí)踐筆記

第一課Hadoop生態(tài)圈與Zookeeper應(yīng)用實(shí)踐

一)相關(guān)原理以及知識(shí)點(diǎn)

1.什么是分布式系統(tǒng)

《分布式系統(tǒng)概念與設(shè)計(jì)》一書定義分布式系統(tǒng)是一個(gè)硬件或軟件組件分布在不同的網(wǎng)絡(luò)計(jì)算機(jī)上,彼此之間通過(guò)消息傳遞進(jìn)行通信和協(xié)調(diào)的系統(tǒng)

[if !supportLists]2.[endif]腦裂

集群整體提供服務(wù),但是由于各種網(wǎng)絡(luò)原因,分裂成小單元提供同樣的服務(wù)驹溃。

3.Zookeeper簡(jiǎn)介

一個(gè)開源的針對(duì)大型分布式系統(tǒng)的可靠協(xié)調(diào)系統(tǒng)纠脾,將復(fù)雜且容易出錯(cuò)的分布式式一致性服務(wù)饵筑,封裝起來(lái)捧搞,構(gòu)成一個(gè)高效可靠的原語(yǔ)集圾浅,并以簡(jiǎn)單易用的接口提供給用戶使用腹尖。

4.Zookeeper特性

最終一致性

保證最終數(shù)據(jù)能夠達(dá)到一致柳恐,這是Zookeeper最重要的功能。

?順序性

從同一個(gè)客戶端發(fā)起的事務(wù)請(qǐng)求热幔,最終會(huì)嚴(yán)格地按照其發(fā)送順序被應(yīng)用到Zookeeper中乐设。

?可靠性

一旦服務(wù)器成功的應(yīng)用一個(gè)事務(wù),并完成了客戶端的響應(yīng)绎巨,那么該事

務(wù)所引起的服務(wù)端狀態(tài)變更將會(huì)被一直保留下去近尚。

實(shí)時(shí)性

Zookeeper不能保證兩個(gè)客戶端能同時(shí)得到剛更新的數(shù)據(jù),如果需要最新數(shù)據(jù)场勤,應(yīng)該在讀數(shù)據(jù)之前調(diào)用sync()接口戈锻。

原子性:

一次數(shù)據(jù)更新要么成功,要么失敗和媳。

? 單一視圖:

無(wú)論客戶端連接到哪個(gè)服務(wù)器格遭,看到的數(shù)據(jù)模型都是一致的。

[if !supportLists]5.[endif]zookeeper角色

Leader更新系統(tǒng)狀態(tài)留瞳,處理事務(wù)請(qǐng)求拒迅,負(fù)責(zé)進(jìn)行投票的發(fā)起和決議

Leaner Follower處理客戶端非事務(wù)請(qǐng)求并向客戶端返回結(jié)果,將寫事務(wù)請(qǐng)求轉(zhuǎn)發(fā)給Leader她倘,同步Leader的狀態(tài)璧微,選主過(guò)程中參與投票。

Observer接收客戶端讀請(qǐng)求硬梁,將客戶端寫請(qǐng)求轉(zhuǎn)發(fā)給Leader前硫,不參與投票過(guò)程,只同步Leader的狀態(tài)靶溜。目的是為了擴(kuò)展系統(tǒng),提高讀取速度。

Client請(qǐng)求發(fā)起方罩息。

6.Zookeeper寫入


當(dāng)集群中的任何一個(gè)follower節(jié)點(diǎn)接收到客戶端的事務(wù)請(qǐng)求嗤详,都會(huì)轉(zhuǎn)發(fā)給leader,也就是說(shuō)整個(gè)集群只有l(wèi)eader可以處理事務(wù)請(qǐng)求瓷炮,其它角色的節(jié)點(diǎn)都不能處理葱色,當(dāng)leader處理事務(wù)請(qǐng)求的時(shí)候,就要向整個(gè)集群廣播一個(gè)提議娘香,這個(gè)提議就是告訴follower你們要?jiǎng)?chuàng)建/修改/刪除一個(gè)znode,然后follower接收到leader的提議之后苍狰,就會(huì)做相應(yīng)的操作,操作完成告訴leader完成了烘绽。當(dāng)leader接收到集群中的大多數(shù)follower的成功操作的回復(fù)之后淋昭,這里的大多數(shù)指的是超過(guò)集群機(jī)器數(shù)量的一半,當(dāng)收到大多數(shù)follower的回復(fù)之后安接,leader就認(rèn)為這次事務(wù)被成功處理了翔忽,然后再向集群通知所有的follower提交事務(wù),最后會(huì)返回給客戶端一個(gè)事務(wù)被成功處理的狀態(tài)盏檐。如果有落后的follower歇式,這些落后的follower也會(huì)從leader同步狀態(tài),保持與leader的狀態(tài)一致胡野。

7.Zookeeper選舉

服務(wù)器四種狀態(tài):

?LOOKING:尋找Leader狀態(tài)材失,處于該狀態(tài)需要進(jìn)入選舉流程

?LEADING:領(lǐng)導(dǎo)者狀態(tài),表明當(dāng)前服務(wù)角色為L(zhǎng)eader

?FOLLOWING:跟隨者狀態(tài)硫豆,Leader已經(jīng)選舉出來(lái)龙巨,表明當(dāng)前服務(wù)角色為Follower

?OBSERVER:觀察者狀態(tài),表明當(dāng)前服務(wù)角色Observer事務(wù)ID:用ZXID表示够庙,是一個(gè)64位的數(shù)字恭应,由Leader統(tǒng)一分配,全局唯一耘眨,不斷遞增昼榛。

8.關(guān)于全新啟動(dòng)期間的leader選舉過(guò)程


在前zk1和zk2啟動(dòng)的時(shí)候,兩個(gè)節(jié)點(diǎn)都會(huì)發(fā)出廣播當(dāng)leader剔难,他們發(fā)出的廣播信息內(nèi)容是(myid,ZXID)胆屿,由于是全新啟動(dòng)期ZXID是0

zk1的myid是1,zk2的myid是2偶宫,所以zk1和zk2發(fā)出的廣播消息分別是(1,0)和(2,0)非迹,在zk1和zk2分別接受到對(duì)方發(fā)出的選舉廣播消息的時(shí)候,首先對(duì)比消息中的ZXID纯趋,誰(shuí)的ZXID大誰(shuí)就優(yōu)先作為leader憎兽,由于全新啟動(dòng)期間ZXID都是0冷离,繼續(xù)進(jìn)行下一步比較,比較myid纯命,誰(shuí)的myid大誰(shuí)優(yōu)先作為laeder西剥,很明顯zk2的myid大,所以zk1會(huì)重新發(fā)出選舉的信息選zk2作為leader亿汞,然后zk2自己也選自己作為leader瞭空,集群中已經(jīng)有兩個(gè)選了zk2作為leader,所以zk2當(dāng)選為leader疗我,都選出zk2是leader了咆畏,zk3再啟動(dòng)的時(shí)候發(fā)現(xiàn)zk2已經(jīng)是leader了,那zk3自認(rèn)為自己就是follower

9.Zookeeper選舉(運(yùn)行期間)


當(dāng)集群中的leader zk2掛掉之后吴裤,所有的follower將自己的狀態(tài)調(diào)整為looking狀態(tài)旧找,集群進(jìn)入選舉階段。先比較ZXID嚼摩。如圖所示zk1和zk3發(fā)出廣播钦讳。Zk1的ZXID大于zk3,zk3會(huì)選zk1為leader,然后zk1自己也選自己作為leader.所以zk1為leader

10.數(shù)據(jù)模型Znode

?Zookeeper特有的數(shù)據(jù)節(jié)點(diǎn)Znode,視圖結(jié)構(gòu)類似

Linux文件系統(tǒng)枕面,沒(méi)有目錄和文件的概念

?Znode是Zookeeper中數(shù)據(jù)的最小單元

?Znode上可以保存數(shù)據(jù)愿卒,通過(guò)掛載子節(jié)點(diǎn)構(gòu)成一個(gè)

樹狀的層次化命名空間

?Znode樹的根由“/”斜杠開始

11.znode版本

版本類型

?dataVersion:當(dāng)前數(shù)據(jù)節(jié)點(diǎn)數(shù)據(jù)內(nèi)容的版本號(hào)

?cVersion:當(dāng)前數(shù)據(jù)節(jié)點(diǎn)子節(jié)點(diǎn)的版本號(hào)

?aVersion:當(dāng)前數(shù)據(jù)節(jié)點(diǎn)ACL權(quán)限變更版本號(hào)

如何保證分布式數(shù)據(jù)原子性操作

? 悲觀鎖

? 樂(lè)觀鎖

? 使用version實(shí)現(xiàn)樂(lè)觀鎖機(jī)制中的“寫入校驗(yàn)”

12.Znode - Watcher機(jī)制


二.其它的重點(diǎn)

1. znode是zookeeper中的一個(gè)數(shù)據(jù)節(jié)點(diǎn),znode下還可以創(chuàng)建子znode,可以理解為文件夾的構(gòu)造潮秘,一個(gè)文件夾下可以有子文件夾或者子文件琼开。

2.心跳的意思是從節(jié)點(diǎn)周期性的向leader發(fā)送消息,比如2秒鐘發(fā)送一次消息枕荞,這種有規(guī)律的通信就叫做心跳

3.臨時(shí)節(jié)點(diǎn)下是不能創(chuàng)建子節(jié)點(diǎn)

4.znode不對(duì)應(yīng)機(jī)器

5.zookeeper提供了一種存儲(chǔ)系統(tǒng)柜候。這個(gè)存儲(chǔ)系統(tǒng)里存儲(chǔ)的是znode的樹形結(jié)構(gòu)

6.每一個(gè)znode就是一個(gè)數(shù)據(jù)節(jié)點(diǎn),znode可以存數(shù)據(jù)躏精,也可以實(shí)現(xiàn)類似文件夾的功能渣刷,就是znode下可以創(chuàng)建子znode

7.leader和follower分別在單獨(dú)的機(jī)器上部署。

8.整個(gè)集群會(huì)選舉出一個(gè)leader矗烛,這個(gè)leader負(fù)責(zé)處理客戶端的事務(wù)請(qǐng)求辅柴,事務(wù)請(qǐng)求包括znode的創(chuàng)建、修改瞭吃、刪除等碌嘀,follower負(fù)責(zé)處理客戶端的讀請(qǐng)求。

11整個(gè)zookeeper集群只有一個(gè)leader負(fù)責(zé)事務(wù)處理歪架,每次接收到一個(gè)事務(wù)處理請(qǐng)求股冗,就會(huì)生成一個(gè)全局唯一,自動(dòng)遞增的事務(wù)ID

三)Zookeeper搭建與常用操作

1)安裝過(guò)程

1.安裝zookeeper-3.4.10.tar.gz

2.root創(chuàng)建軟連接,修改zookeeper軟鏈接屬主為hadoop

ln -s /home/hadoop/apps/zookeeper-3.4.10 /usr/local/zookeeper

chown -R hadoop:hadoop /usr/local/zookeeper


3.root編輯環(huán)境變量

vim /etc/profile

export ZOOKEEPER_HOME=/usr/local/zookeeper

export PATH=$PATH:${JAVA_HOME}/bin:${ZOOKEEPER_HOME}/bin


4.重新編譯環(huán)境變量

source /etc/profile

5.切換到addop用戶

su hadoop

6..修改zookeeper配置文件

cd /usr/local/zookeeper/conf

拷貝樣例配置文件并重命名zoo.cfg

cp zoo_sample.cfg zoo.cfg


編輯zoo.cfg文件

vim zoo.cfg

添加內(nèi)容

dataDir=/usr/local/zookeeper/data ???#快照文件存儲(chǔ)目錄

dataLogDir=/usr/local/zookeeper/log ??#事務(wù)日志文件目錄

#注意node01和蚪、node02止状、node03是安裝zookeeper的主機(jī)名烹棉,根據(jù)自己的虛擬機(jī)自行修改

server.1=node01:2888:3888 (主機(jī)名,心跳端口、數(shù)據(jù)端口)

server.2=node02:2888:3888

server.3=node03:2888:3888


7.創(chuàng)建data怯疤、log目錄,只有hadoop用戶具有寫權(quán)限

在/usr/local/zookeeper目錄下創(chuàng)建

mkdir -m 755 data

mkdir -m 755 log

8.在data文件夾下新建myid文件峦耘,myid的文件內(nèi)容為該節(jié)點(diǎn)的編號(hào)

cd data

創(chuàng)建myid文件

touch myid

添加編號(hào)1

echo 1 > myid

9.通過(guò)scp將安裝包拷貝到其他兩個(gè)節(jié)點(diǎn)hadoop02和hadoop03的/home/hadoop/apps目錄下scp -r /home/hadoop/apps/zookeeper-3.4.10 hadoop@hadoop02:/home/hadoop/apps

scp -r /home/hadoop/apps/zookeeper-3.4.10 hadoop@hadoop03:/home/hadoop/apps

分別創(chuàng)軟鏈接并且添加環(huán)境變量,注意要配置SSH免密碼登錄

10.修改其他節(jié)點(diǎn)的myid

hadoop02的myid文件內(nèi)容是2

hadoop03的myid文件內(nèi)容是3

11.啟動(dòng)

/usr/local/zookeeper/bin/zkServer.sh start


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Hadoop01

/usr/local/zookeeper/bin/zkServer.sh start


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Hadoop02

/usr/local/zookeeper/bin/zkServer.sh start

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Hadoop03

查看zk狀態(tài)

zkServer.sh status


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Hadoop01

zkServer.sh status


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Hadoop02

zkServer.sh status


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Hadoop03

關(guān)閉命令

/usr/local/zookeeper/bin/zkServer.sh stop

2)注意事項(xiàng)

1.用root創(chuàng)建軟連接時(shí)旅薄,要修改軟鏈接屬主為hadoop用戶,避免后邊hadoop沒(méi)有權(quán)限

2.ssh免密碼登入(root和haddop用戶)注意用切換到hadoop用戶的時(shí)候拷貝到其它的節(jié)點(diǎn)泣崩,也要用hadoop用戶啟動(dòng)少梁,注意用戶權(quán)限。

Root用戶在/root/.ssh下執(zhí)行ssh-keygen -t rsa

Hadoop用戶(普通用戶)/home/hadoop/.ssh下執(zhí)行ssh-keygen -t rsa

通過(guò)ssh-copy-id命令將hadoo01這臺(tái)機(jī)器root用戶的公鑰文件(id_rsa.pub)文件內(nèi)容拷貝到hadoop02和hadoo03兩臺(tái)機(jī)器

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末矫付,一起剝皮案震驚了整個(gè)濱河市凯沪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌买优,老刑警劉巖妨马,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異杀赢,居然都是意外死亡烘跺,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門脂崔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)滤淳,“玉大人,你說(shuō)我怎么就攤上這事砌左。” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵澳淑,是天一觀的道長(zhǎng)犁罩。 經(jīng)常有香客問(wèn)我,道長(zhǎng)产弹,這世上最難降的妖魔是什么派歌? 我笑而不...
    開封第一講書人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮取视,結(jié)果婚禮上硝皂,老公的妹妹穿的比我還像新娘。我一直安慰自己作谭,他們只是感情好稽物,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著折欠,像睡著了一般贝或。 火紅的嫁衣襯著肌膚如雪吼过。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評(píng)論 1 290
  • 那天咪奖,我揣著相機(jī)與錄音盗忱,去河邊找鬼。 笑死羊赵,一個(gè)胖子當(dāng)著我的面吹牛趟佃,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播昧捷,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼闲昭,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了靡挥?” 一聲冷哼從身側(cè)響起序矩,我...
    開封第一講書人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎跋破,沒(méi)想到半個(gè)月后簸淀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡毒返,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年租幕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拧簸。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡令蛉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出狡恬,到底是詐尸還是另有隱情珠叔,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布弟劲,位于F島的核電站祷安,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏兔乞。R本人自食惡果不足惜汇鞭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望庸追。 院中可真熱鬧霍骄,春花似錦、人聲如沸淡溯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)咱娶。三九已至米间,卻和暖如春强品,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背屈糊。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工的榛, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人逻锐。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓夫晌,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親昧诱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子慷丽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容