[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í)主要是為加深對分布式系統(tǒng)的理解际乘,以及增強(qiáng)遇到各種問題時的分析解決能力住拭,形成一定的集群運(yùn)維能力遇八。

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

概述

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

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

  • 概述
    客戶端要向HDFS寫數(shù)據(jù),首先要跟Namenode通信以確認(rèn)可以寫文件并獲得接收文件block的Datanode鳍贾,然后鞍匾,客戶端按順序?qū)⑽募饌€block傳遞給相應(yīng)Datanode,并由接收到block的Datanode負(fù)責(zé)向其他Datanode復(fù)制block的副本
HDFS寫數(shù)據(jù)流程圖
  • 寫數(shù)據(jù)步驟詳解
    1骑科、Client向Namenode通信請求上傳文件橡淑,Namenode檢查目標(biāo)文件是否已存在,父目錄是否存在
    2咆爽、Namenode返回是否可以上傳
    3梁棠、Client請求第一個 block該傳輸?shù)侥男〥atanode服務(wù)器上
    4、Namenode返回3個Datanode服務(wù)器ABC
    5斗埂、Client請求3臺DataNode中的一臺A上傳數(shù)據(jù)(本質(zhì)上是一個RPC調(diào)用符糊,建立pipeline),A收到請求會繼續(xù)調(diào)用B呛凶,然后B調(diào)用C男娄,將真?zhèn)€pipeline建立完成,逐級返回客戶端
    6把兔、Client開始往A上傳第一個block(先從磁盤讀取數(shù)據(jù)放到一個本地內(nèi)存緩存)沪伙,以packet為單位,A收到一個packet就會傳給B县好,B傳給C围橡;A每傳一個packet會放入一個應(yīng)答隊列等待應(yīng)答
    7、當(dāng)一個block傳輸完成之后缕贡,Client再次請求Namenode上傳第二個block的服務(wù)器翁授。

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

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

NAMENODE工作機(jī)制

  • NAMENODE職責(zé)

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

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

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

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

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

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

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

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

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

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

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

  • 元數(shù)據(jù)手動查看
    可以通過hdfs的一個工具來查看edits中的信息
    bin/hdfs oev -i edits -o edits.xml
    bin/hdfs oiv -i fsimage_0000000000000000087 -p XML -o fsimage.xml

  • 元數(shù)據(jù)的checkpoint
    每隔一段時間,會由secondary namenode將namenode上積累的所有edits和一個最新的fsimage下載到本地由捎,并加載到內(nèi)存進(jìn)行merge(這個過程稱為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} #以上兩個參數(shù)做checkpoint操作時,secondary namenode的本地工作目錄
    dfs.namenode.checkpoint.max-retries=3 #最大重試次數(shù)
    dfs.namenode.checkpoint.period=3600 #兩次checkpoint之間的時間間隔3600秒
    dfs.namenode.checkpoint.txns=1000000 #兩次checkpoint之間最大的操作記錄

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

DATANODE的工作機(jī)制

  • 概述

  • Datanode工作職責(zé):
    1碌宴、存儲管理用戶的文件塊數(shù)據(jù)
    2、定期向namenode匯報自身所持有的block信息(通過心跳信息上報)(這點(diǎn)很重要蒙畴,因?yàn)榉×停?dāng)集群中發(fā)生某些block副本失效時,集群如何恢復(fù)block初始副本數(shù)量的問題)

     <property>  
     <name>dfs.blockreport.intervalMsec</name>
     <value>3600000</value> 
     <description>Determines block reporting interval in milliseconds.  
     </description> 
     </property>  
    
  • Datanode掉線判斷時限參數(shù)
    datanode進(jìn)程死亡或者網(wǎng)絡(luò)故障造成datanode無法與namenode通信膳凝,namenode不會立即把該節(jié)點(diǎn)判定為死亡碑隆,要經(jīng)過一段時間,這段時間暫稱作超時時長蹬音。HDFS默認(rèn)的超時時長為10分鐘+30秒上煤。如果定義超時時間為timeout,則超時時長的計算公式為:
    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的單位為秒永部。所以独泞,舉個例子,如果heartbeat.recheck.interval設(shè)置為5000(毫秒)苔埋,dfs.heartbeat.interval設(shè)置為3(秒懦砂,默認(rèn)),則總的超時時間為40秒组橄。

           <property>  
               <name>heartbeat.recheck.interval</name>
               <value>2000</value>  
           </property>  
           <property> 
               <name>dfs.heartbeat.interval</name>  
               <value>1</value>
           </property>  
    
  • 觀察驗(yàn)證DATANODE功能
    上傳一個文件荞膘,觀察文件的block具體的物理存放情況:
    在每一臺datanode機(jī)器上的這個目錄中能找到文件的切塊:
    /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)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市晨炕,隨后出現(xiàn)的幾起案子衫画,更是在濱河造成了極大的恐慌毫炉,老刑警劉巖瓮栗,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡费奸,警方通過查閱死者的電腦和手機(jī)弥激,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來愿阐,“玉大人微服,你說我怎么就攤上這事∮Ю” “怎么了以蕴?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長辛孵。 經(jīng)常有香客問我丛肮,道長,這世上最難降的妖魔是什么魄缚? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任宝与,我火速辦了婚禮,結(jié)果婚禮上冶匹,老公的妹妹穿的比我還像新娘习劫。我一直安慰自己,他們只是感情好嚼隘,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布诽里。 她就那樣靜靜地躺著,像睡著了一般飞蛹。 火紅的嫁衣襯著肌膚如雪须肆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天桩皿,我揣著相機(jī)與錄音豌汇,去河邊找鬼。 笑死泄隔,一個胖子當(dāng)著我的面吹牛拒贱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播佛嬉,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼逻澳,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了暖呕?” 一聲冷哼從身側(cè)響起斜做,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎湾揽,沒想到半個月后瓤逼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體笼吟,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年霸旗,在試婚紗的時候發(fā)現(xiàn)自己被綠了贷帮。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡诱告,死狀恐怖撵枢,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情精居,我是刑警寧澤锄禽,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站靴姿,受9級特大地震影響沟绪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜空猜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一绽慈、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧辈毯,春花似錦坝疼、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至唁影,卻和暖如春耕陷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背据沈。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工哟沫, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人锌介。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓嗜诀,卻偏偏與公主長得像,于是被迫代替她去往敵國和親孔祸。 傳聞我的和親對象是個殘疾皇子隆敢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評論 2 353

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

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