[Hadoop] HDFS 詳解一(原理篇)

目錄

  • HDFS的工作機(jī)制
  • 概述
  • HDFS 寫數(shù)據(jù)流程
  • HDFS 讀數(shù)據(jù)流程
  • NameNode的工作機(jī)制
  • NameNode的職責(zé)
  • 元數(shù)據(jù)的管理
  • DataNode的工作機(jī)制
  • 概述
  • 觀察驗(yàn)證DataNode 功能

HDFS的工作機(jī)制

工作機(jī)制的學(xué)習(xí)主要是為加深對(duì)分布式系統(tǒng)的理解,以及增強(qiáng)遇到各種問題時(shí)的分析解決能力,形成一定的集群運(yùn)維能力。

很多不是真正理解hadoop技術(shù)體系的人會(huì)常常覺得HDFS可用于網(wǎng)盤類應(yīng)用,但實(shí)際并非如此。要想將技術(shù)準(zhǔn)確用在恰當(dāng)?shù)牡胤剑仨殞?duì)技術(shù)有深刻的理解。

概述

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

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

  • 概述
    客戶端要向HDFS寫數(shù)據(jù),首先要跟Namenode通信以確認(rèn)可以寫文件并獲得接收文件block的Datanode,然后,客戶端按順序?qū)⑽募饌€(gè)block傳遞給相應(yīng)Datanode,并由接收到block的Datanode負(fù)責(zé)向其他Datanode復(fù)制block的副本
HDFS寫數(shù)據(jù)流程圖
  • 寫數(shù)據(jù)步驟詳解
    1、Client向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)DataNode中的一臺(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í)返回客戶端
    6、Client開始往A上傳第一個(gè)block(先從磁盤讀取數(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ù)流程

  • 概述
    客戶端將要讀取的文件路徑發(fā)送給namenode,namenode獲取文件的元信息(主要是block的存放位置信息)返回給客戶端,客戶端根據(jù)返回的信息找到相應(yīng)datanode逐個(gè)獲取文件的block并在客戶端本地進(jìn)行數(shù)據(jù)追加合并從而獲得整個(gè)文件
HDFS讀數(shù)據(jù)流程圖
  • 讀數(shù)據(jù)步驟詳解
    1、跟namenode通信查詢?cè)獢?shù)據(jù),找到文件塊所在的datanode服務(wù)器
    2、挑選一臺(tái)datanode(就近原則,然后隨機(jī))服務(wù)器,請(qǐng)求建立socket流
    3、datanode開始發(fā)送數(shù)據(jù)(從磁盤里面讀取數(shù)據(jù)放入流,以packet為單位來做校驗(yàn))
    4、客戶端以packet為單位接收,現(xiàn)在本地緩存,然后寫入目標(biāo)文件

NAMENODE工作機(jī)制

  • NAMENODE職責(zé)

  • 負(fù)責(zé)客戶端請(qǐng)求的響應(yīng)

  • 元數(shù)據(jù)的管理(查詢,修改)

  • 元數(shù)據(jù)管理
    namenode對(duì)數(shù)據(jù)的管理采用了三種存儲(chǔ)形式:

  • 內(nèi)存元數(shù)據(jù)(NameSystem)

  • 磁盤元數(shù)據(jù)鏡像文件

  • 數(shù)據(jù)操作日志文件(可通過日志運(yùn)算出元數(shù)據(jù))

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

  • A、內(nèi)存中有一份完整的元數(shù)據(jù)(內(nèi)存meta data)

  • B、磁盤有一個(gè)“準(zhǔn)完整”的元數(shù)據(jù)鏡像(fsimage)文件(在namenode的工作目錄中)

  • C、用于銜接內(nèi)存metadata和持久化元數(shù)據(jù)鏡像fsimage之間的操作日志(edits文件)

    注:當(dāng)客戶端對(duì)hdfs中的文件進(jìn)行新增或者修改操作,操作記錄首先被記入edits日志文件中,當(dāng)客戶端操作成功后,相應(yīng)的元數(shù)據(jù)會(huì)更新到內(nèi)存meta.data中

  • 元數(shù)據(jù)手動(dòng)查看
    可以通過hdfs的一個(gè)工具來查看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è)過程稱為checkpoint)

  • checkpoint的詳細(xì)過程

checkpoint 流程圖
  • checkpoint操作的觸發(fā)條件配置參數(shù)
    dfs.namenode.checkpoint.check.period=60 #檢查觸發(fā)條件是否滿足的頻率,60秒
    dfs.namenode.checkpoint.dir=file://${hadoop.tmp.dir}/dfs/namesecondary
    dfs.namenode.checkpoint.edits.dir=${dfs.namenode.checkpoint.dir} #以上兩個(gè)參數(shù)做checkpoint操作時(shí),secondary namenode的本地工作目錄
    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é):
    1、存儲(chǔ)管理用戶的文件塊數(shù)據(jù)
    2、定期向namenode匯報(bào)自身所持有的block信息(通過心跳信息上報(bào))(這點(diǎn)很重要,因?yàn)椋?dāng)集群中發(fā)生某些block副本失效時(shí),集群如何恢復(fù)block初始副本數(shù)量的問題)

     <property>  
     <name>dfs.blockreport.intervalMsec</name>
     <value>3600000</value> 
     <description>Determines block reporting interval in milliseconds.  
     </description> 
     </property>  
    
  • Datanode掉線判斷時(shí)限參數(shù)
    datanode進(jìn)程死亡或者網(wǎng)絡(luò)故障造成datanode無法與namenode通信,namenode不會(huì)立即把該節(jié)點(diǎn)判定為死亡,要經(jīng)過一段時(shí)間,這段時(shí)間暫稱作超時(shí)時(shí)長(zhǎng)。HDFS默認(rèn)的超時(shí)時(shí)長(zhǎng)為10分鐘+30秒。如果定義超時(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>  
    
  • 觀察驗(yàn)證DATANODE功能
    上傳一個(gè)文件,觀察文件的block具體的物理存放情況:
    在每一臺(tái)datanode機(jī)器上的這個(gè)目錄中能找到文件的切塊:
    /home/hadoop/app/hadoop-2.7.3/tmp/dfs/data/current/BP-193442119-192.168.88.3-1432458743457/current/finalized

待續(xù)...

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

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

  • HDFS的工作機(jī)制 概述 HDFS集群分為兩大角色:NameNode、DataNode NameNode負(fù)責(zé)管理整...
    張魚貓閱讀 2,060評(píng)論 0 8
  • hadoop HDFS原理解析01 HDFS架構(gòu)?NameNode?DataNode?Sencondary Nam...
    白菜青蘿卜閱讀 2,756評(píng)論 2 30
  • 首先,我們?cè)谑褂们跋瓤纯碒DFS是什麼?這將有助于我們是以后的運(yùn)維使用和故障排除思路的獲得。 HDFS采用mast...
    W_Bousquet閱讀 4,223評(píng)論 0 2
  • hdfs是什么? 問題: 1. hdfs是基于什么樣的原理將文件分塊存儲(chǔ)到分布式環(huán)境中的各個(gè)設(shè)備上的? 2. h...
    4762d2980c91閱讀 4,753評(píng)論 0 6
  • 總有那么一個(gè)人 會(huì)機(jī)緣巧合地出現(xiàn)在你生命里 一起經(jīng)歷過歡笑 有過傷痛離別 時(shí)間荏苒 最后走到一起 最后沒在一起 后...
    小奴兒閱讀 231評(píng)論 0 0