HDFS的工作流程分析

HDFS的工作機(jī)制

概述

  • HDFS集群分為兩大角色:NameNode、DataNode
  • NameNode負(fù)責(zé)管理整個(gè)文件系統(tǒng)的元數(shù)據(jù)
  • DataNode 負(fù)責(zé)管理用戶(hù)的文件數(shù)據(jù)塊
  • 文件會(huì)按照固定的大芯┝ (blocksize)切成若干塊后分布式存儲(chǔ)在若干臺(tái)datanode上
  • 每一個(gè)文件塊可以有多個(gè)副本锰蓬,并存放在不同的datanode上
  • Datanode會(huì)定期向Namenode匯報(bào)自身所保存的文件block信息,而namenode則會(huì)負(fù)責(zé)保持文件的副本數(shù)量
  • HDFS的內(nèi)部工作機(jī)制對(duì)客戶(hù)端保持透明幻碱,客戶(hù)端請(qǐng)求訪(fǎng)問(wèn)HDFS都是通過(guò)向namenode申請(qǐng)來(lái)進(jìn)行

HDFS寫(xiě)數(shù)據(jù)流程

概述

客戶(hù)端要向HDFS寫(xiě)數(shù)據(jù),首先要跟namenode通信以確認(rèn)可以寫(xiě)文件并獲得接收文件block的datanode,然后鸭丛,客戶(hù)端按順序?qū)⑽募饌€(gè)block傳遞給相應(yīng)datanode,并由接收到block的datanode負(fù)責(zé)向其他datanode復(fù)制block的副本

詳細(xì)步驟圖

詳細(xì)步驟分析

  1. 根namenode通信請(qǐng)求上傳文件唐责,namenode檢查目標(biāo)文件是否已存在鳞溉,父目錄是否存在
  2. namenode返回是否可以上傳
  3. client請(qǐng)求第一個(gè) block該傳輸?shù)侥男ヾatanode服務(wù)器上
  4. namenode返回3個(gè)datanode服務(wù)器ABC
  5. client請(qǐng)求3臺(tái)dn中的一臺(tái)A上傳數(shù)據(jù)(本質(zhì)上是一個(gè)RPC調(diào)用,建立pipeline)鼠哥,A收到請(qǐng)求會(huì)繼續(xù)調(diào)用B熟菲,然后B調(diào)用C,將真?zhèn)€pipeline建立完成朴恳,逐級(jí)返回客戶(hù)端
  6. client開(kāi)始往A上傳第一個(gè)block(先從磁盤(pán)讀取數(shù)據(jù)放到一個(gè)本地內(nèi)存緩存)抄罕,以packet為單位,A收到一個(gè)packet就會(huì)傳給B于颖,B傳給C贞绵;A每傳一個(gè)packet會(huì)放入一個(gè)應(yīng)答隊(duì)列等待應(yīng)答
  7. 當(dāng)一個(gè)block傳輸完成之后,client再次請(qǐng)求namenode上傳第二個(gè)block的服務(wù)器恍飘。

HDFS讀數(shù)據(jù)流程

概述

客戶(hù)端將要讀取的文件路徑發(fā)送給namenode榨崩,namenode獲取文件的元信息(主要是block的存放位置信息)返回給客戶(hù)端,客戶(hù)端根據(jù)返回的信息找到相應(yīng)datanode逐個(gè)獲取文件的block并在客戶(hù)端本地進(jìn)行數(shù)據(jù)追加合并從而獲得整個(gè)文件

詳細(xì)步驟圖

詳細(xì)步驟解析

  1. 跟namenode通信查詢(xún)?cè)獢?shù)據(jù)章母,找到文件塊所在的datanode服務(wù)器
  2. 挑選一臺(tái)datanode(就近原則母蛛,然后隨機(jī))服務(wù)器,請(qǐng)求建立socket流
  3. datanode開(kāi)始發(fā)送數(shù)據(jù)(從磁盤(pán)里面讀取數(shù)據(jù)放入流乳怎,以packet為單位來(lái)做校驗(yàn))
  4. 客戶(hù)端以packet為單位接收彩郊,現(xiàn)在本地緩存,然后寫(xiě)入目標(biāo)文件

NAMENODE工作機(jī)制

NAMENODE職責(zé)

NAMENODE職責(zé):
負(fù)責(zé)客戶(hù)端請(qǐng)求的響應(yīng)
元數(shù)據(jù)的管理(查詢(xún)蚪缀,修改)

元數(shù)據(jù)管理

namenode對(duì)數(shù)據(jù)的管理采用了三種存儲(chǔ)形式:
內(nèi)存元數(shù)據(jù)(NameSystem)
磁盤(pán)元數(shù)據(jù)鏡像文件
數(shù)據(jù)操作日志文件(可通過(guò)日志運(yùn)算出元數(shù)據(jù))

元數(shù)據(jù)存儲(chǔ)機(jī)制

  • 內(nèi)存中有一份完整的元數(shù)據(jù)(內(nèi)存meta data)
  • 磁盤(pán)有一個(gè)“準(zhǔn)完整”的元數(shù)據(jù)鏡像(fsimage)文件(在namenode的工作目錄中)
  • 用于銜接內(nèi)存metadata和持久化元數(shù)據(jù)鏡像fsimage之間的操作日志(edits文件)注:當(dāng)客戶(hù)端對(duì)hdfs中的文件進(jìn)行新增或者修改操作秫逝,操作記錄首先被記入edits日志文件中,當(dāng)客戶(hù)端操作成功后询枚,相應(yīng)的元數(shù)據(jù)會(huì)更新到內(nèi)存meta.data中

元數(shù)據(jù)手動(dòng)查看

可以通過(guò)hdfs的一個(gè)工具來(lái)查看edits中的信息
bin/hdfs oev -i edits -o edits.xml
bin/hdfs oiv -i fsimage_0000000000000000087 -p XML -o fsimage.xml

元數(shù)據(jù)的checkpoint

每隔一段時(shí)間违帆,會(huì)由secondary namenode將namenode上積累的所有edits和一個(gè)最新的fsimage下載到本地,并加載到內(nèi)存進(jìn)行merge(這個(gè)過(guò)程稱(chēng)為checkpoint)

checkpoint的詳細(xì)過(guò)程

過(guò)程解析

  1. 從SecondaryNameNode節(jié)點(diǎn)通知NameNode進(jìn)行CheckPoint
  2. NameNode切換出新的日志文件金蜀,以后的日志都寫(xiě)到新的日志文件中刷后。
  3. 從SecondaryNameNode節(jié)點(diǎn)從節(jié)點(diǎn)下載fsimage文件及舊的日志文件的畴,fsimage文件只有第一次下載,以后只需要傳輸edits日志文件
  4. SecondaryNameNode節(jié)點(diǎn)將fsimage文件加載到內(nèi)存中尝胆,并將日志文件與fsimage的合并丧裁,然后生成新的fsimage文件。
  5. 從SecondaryNameNode節(jié)點(diǎn)將新的fsimage文件用傳回NameNode節(jié)點(diǎn)
  6. NameNode節(jié)點(diǎn)可以將舊的fsimage文件及舊的日志文件切換為新的fsimage和edit日志文件并更新fstime文件含衔,寫(xiě)入此次checkpoint的時(shí)間煎娇。

這樣NameNode中只需要花費(fèi)很少的時(shí)間,始終保持了最新的元數(shù)據(jù)信息贪染,由于有了備份機(jī)制逊桦,即使宕機(jī)后重啟后還是可以恢復(fù)元數(shù)據(jù),但最新的日志可能來(lái)不及同步會(huì)有丟失)

checkpoint配置參數(shù)

配置在hdfs-site.xml文件中
dfs.namenode.checkpoint.check.period=60#檢查觸發(fā)條件是否滿(mǎn)足的頻率抑进,60秒
dfs.namenode.checkpoint.dir=file://${hadoop.tmp.dir}/dfs/namesecondary
以上兩個(gè)參數(shù)做checkpoint操作時(shí)强经,secondary namenode的本地工作目錄
dfs.namenode.checkpoint.edits.dir=${dfs.namenode.checkpoint.dir}

dfs.namenode.checkpoint.max-retries=3 #最大重試次數(shù)
dfs.namenode.checkpoint.period=3600 #兩次checkpoint之間的時(shí)間間隔3600秒
dfs.namenode.checkpoint.txns=1000000#兩次checkpoint之間最大的操作記錄

checkpoint的附帶作用
namenode和secondary namenode的工作目錄存儲(chǔ)結(jié)構(gòu)完全相同,所以寺渗,當(dāng)namenode故障退出需要重新恢復(fù)時(shí)匿情,可以從secondary namenode的工作目錄中將fsimage拷貝到namenode的工作目錄,以恢復(fù)namenode的元數(shù)據(jù)

DATANODE的工作機(jī)制

概述

Datanode工作職責(zé):
存儲(chǔ)管理用戶(hù)的文件塊數(shù)據(jù)
定期向namenode匯報(bào)自身所持有的block信息(通過(guò)心跳信息上報(bào))
(這點(diǎn)很重要信殊,因?yàn)榫娉疲?dāng)集群中發(fā)生某些block副本失效時(shí),集群如何恢復(fù)block初始副本數(shù)量的問(wèn)題)

datanode進(jìn)程死亡或者網(wǎng)絡(luò)故障造成datanode無(wú)法與namenode通信涡拘,namenode不會(huì)立即把該節(jié)點(diǎn)判定為死亡玲躯,要經(jīng)過(guò)一段時(shí)間,這段時(shí)間暫稱(chēng)作超時(shí)時(shí)長(zhǎng)鳄乏。HDFS默認(rèn)的超時(shí)時(shí)長(zhǎng)為10分鐘+30秒

配置超時(shí)

<property>
    <name>dfs.blockreport.intervalMsec</name>
    <value>3600000</value>
    <description>Determines block reporting interval in milliseconds.</description>
</property>

如果定義超時(shí)時(shí)間為timeout跷车,則超時(shí)時(shí)長(zhǎng)的計(jì)算公式為:
timeout = 2 * heartbeat.recheck.interval + 10 * dfs.heartbeat.interval。
而默認(rèn)的heartbeat.recheck.interval 大小為5分鐘橱野,dfs.heartbeat.interval默認(rèn)為3秒朽缴。
需要注意的是hdfs-site.xml 配置文件中的heartbeat.recheck.interval的單位為毫秒,dfs.heartbeat.interval的單位為秒水援。所以密强,舉個(gè)例子,如果heartbeat.recheck.interval設(shè)置為5000(毫秒)蜗元,dfs.heartbeat.interval設(shè)置為3(秒或渤,默認(rèn)),則總的超時(shí)時(shí)間為40秒奕扣。

<property>
        <name>heartbeat.recheck.interval</name>
        <value>2000</value>
</property>  

<property>
        <name>dfs.heartbeat.interval</name>
        <value>1</value>
</property>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末薪鹦,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子成畦,更是在濱河造成了極大的恐慌距芬,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件循帐,死亡現(xiàn)場(chǎng)離奇詭異框仔,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)拄养,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)离斩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人瘪匿,你說(shuō)我怎么就攤上這事跛梗。” “怎么了棋弥?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵核偿,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我顽染,道長(zhǎng)漾岳,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任粉寞,我火速辦了婚禮尼荆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘唧垦。我一直安慰自己捅儒,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布振亮。 她就那樣靜靜地躺著巧还,像睡著了一般。 火紅的嫁衣襯著肌膚如雪坊秸。 梳的紋絲不亂的頭發(fā)上狞悲,一...
    開(kāi)封第一講書(shū)人閱讀 49,816評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音妇斤,去河邊找鬼摇锋。 笑死,一個(gè)胖子當(dāng)著我的面吹牛站超,可吹牛的內(nèi)容都是我干的荸恕。 我是一名探鬼主播,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼死相,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼融求!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起算撮,我...
    開(kāi)封第一講書(shū)人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤生宛,失蹤者是張志新(化名)和其女友劉穎县昂,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體陷舅,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡倒彰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了莱睁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片待讳。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖仰剿,靈堂內(nèi)的尸體忽然破棺而出创淡,到底是詐尸還是另有隱情,我是刑警寧澤南吮,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布琳彩,位于F島的核電站,受9級(jí)特大地震影響部凑,放射性物質(zhì)發(fā)生泄漏汁针。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一砚尽、第九天 我趴在偏房一處隱蔽的房頂上張望施无。 院中可真熱鬧,春花似錦必孤、人聲如沸猾骡。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)兴想。三九已至,卻和暖如春赡勘,著一層夾襖步出監(jiān)牢的瞬間嫂便,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工闸与, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留毙替,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓践樱,卻偏偏與公主長(zhǎng)得像厂画,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子拷邢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

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