Hadoop HDFS 原理詳解

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

目錄

  • HDFS的工做機制
  • 概述
  • HDFS 寫數據流程
  • HDFS 讀數據流程
  • NameNode的工做機制
  • NameNode的職責
  • 元數據的管理
  • DataNode的工做機制
  • 概述
  • 觀察驗證DataNode 功能

HDFS的工做機制

工做機制的學習主要是爲加深對分佈式系統的理解,以及加強遇到各類問題時的分析解決能力,造成必定的集羣運維能力。node

不少不是真正理解hadoop技術體系的人會經常以爲HDFS可用於網盤類應用,但實際並不是如此。要想將技術準確用在恰當的地方,必須對技術有深入的理解。緩存

概述

  • 1.HDFS集羣分爲兩大角色:NameNode、DataNode
  • 2.NameNode負責管理整個文件系統的元數據(元數據就是文件數據塊放置在DataNode位置和數量等信息)
  • 3.DataNode 負責管理用戶的文件數據塊
  • 4.文件會按照固定的大小(blocksize)切成若干塊後分布式存儲在若干臺datanode上
  • 5.每個文件塊能夠有多個副本,並存放在不一樣的datanode上
  • 6.Datanode會按期向Namenode彙報自身所保存的文件block信息,而namenode則會負責保持文件的副本數量
  • 7.HDFS的內部工做機制對客戶端保持透明,客戶端請求訪問HDFS都是經過向namenode申請來進行

HDFS 寫數據流程

  • 概述
    客戶端要向HDFS寫數據,首先要跟Namenode通訊以確承認以寫文件並得到接收文件block的Datanode,而後,客戶端按順序將文件逐個block傳遞給相應Datanode,並由接收到block的Datanode負責向其餘Datanode複製block的副本
 
HDFS寫數據流程圖
  • 寫數據步驟詳解
    一、Client向Namenode通訊請求上傳文件,Namenode檢查目標文件是否已存在,父目錄是否存在
    二、Namenode返回是否能夠上傳
    三、Client請求第一個 block該傳輸到哪些Datanode服務器上
    四、Namenode返回3個Datanode服務器ABC
    五、Client請求3臺DataNode中的一臺A上傳數據(本質上是一個RPC調用,創建pipeline),A收到請求會繼續調用B,而後B調用C,將真個pipeline創建完成,逐級返回客戶端
    六、Client開始往A上傳第一個block(先從磁盤讀取數據放到一個本地內存緩存),以packet爲單位,A收到一個packet就會傳給B,B傳給C;A每傳一個packet會放入一個應答隊列等待應答
    七、當一個block傳輸完成以後,Client再次請求Namenode上傳第二個block的服務器。

HDFS 讀數據流程

  • 概述
    客戶端將要讀取的文件路徑發送給namenode,namenode獲取文件的元信息(主要是block的存放位置信息)返回給客戶端,客戶端根據返回的信息找到相應datanode逐個獲取文件的block並在客戶端本地進行數據追加合併從而得到整個文件
 
HDFS讀數據流程圖
  • 讀數據步驟詳解
    一、跟namenode通訊查詢元數據,找到文件塊所在的datanode服務器
    二、挑選一臺datanode(就近原則,而後隨機)服務器,請求創建socket流
    三、datanode開始發送數據(從磁盤裏面讀取數據放入流,以packet爲單位來作校驗)
    四、客戶端以packet爲單位接收,如今本地緩存,而後寫入目標文件

NAMENODE工做機制

  • NAMENODE職責服務器

  • 負責客戶端請求的響應網絡

  • 元數據的管理(查詢,修改)app

  • 元數據管理
    namenode對數據的管理採用了三種存儲形式:運維

  • 內存元數據(NameSystem)socket

  • 磁盤元數據鏡像文件分佈式

  • 數據操做日誌文件(可經過日誌運算出元數據)工具

  • 元數據存儲機制oop

  • A、內存中有一份完整的元數據(內存meta data)

  • B、磁盤有一個「準完整」的元數據鏡像(fsimage)文件(在namenode的工做目錄中)

  • C、用於銜接內存metadata和持久化元數據鏡像fsimage之間的操做日誌(edits文件)

    注:當客戶端對hdfs中的文件進行新增或者修改操做,操做記錄首先被記入edits日誌文件中,當客戶端操做成功後,相應的元數據會更新到內存meta.data中

  • 元數據手動查看
    能夠經過hdfs的一個工具來查看edits中的信息
    bin/hdfs oev -i edits -o edits.xml 
    bin/hdfs oiv -i fsimage_0000000000000000087 -p XML -o fsimage.xml

  • 元數據的checkpoint
    每隔一段時間,會由secondary namenode將namenode上積累的全部edits和一個最新的fsimage下載到本地,並加載到內存進行merge(這個過程稱爲checkpoint)

  • checkpoint的詳細過程

 
checkpoint 流程圖
  • checkpoint操做的觸發條件配置參數
    dfs.namenode.checkpoint.check.period=60 #檢查觸發條件是否知足的頻率,60秒
    dfs.namenode.checkpoint.dir=file://${hadoop.tmp.dir}/dfs/namesecondary
    dfs.namenode.checkpoint.edits.dir=${dfs.namenode.checkpoint.dir} #以上兩個參數作checkpoint操做時,secondary namenode的本地工做目錄
    dfs.namenode.checkpoint.max-retries=3 #最大重試次數
    dfs.namenode.checkpoint.period=3600 #兩次checkpoint之間的時間間隔3600秒
    dfs.namenode.checkpoint.txns=1000000 #兩次checkpoint之間最大的操做記錄

  • checkpoint的附帶做用
    namenode和secondary namenode的工做目錄存儲結構徹底相同,因此,當namenode故障退出須要從新恢復時,能夠從secondary namenode的工做目錄中將fsimage拷貝到namenode的工做目錄,以恢復namenode的元數據

DATANODE的工做機制

  • 概述

  • Datanode工做職責:
    一、存儲管理用戶的文件塊數據
    二、按期向namenode彙報自身所持有的block信息(經過心跳信息上報)(這點很重要,由於,當集羣中發生某些block副本失效時,集羣如何恢復block初始副本數量的問題)

     <property>  
     <name>dfs.blockreport.intervalMsec</name>
     <value>3600000</value> 
     <description>Determines block reporting interval in milliseconds.  
     </description> 
     </property>
    
  • Datanode掉線判斷時限參數
    datanode進程死亡或者網絡故障形成datanode沒法與namenode通訊,namenode不會當即把該節點斷定爲死亡,要通過一段時間,這段時間暫稱做超時時長。HDFS默認的超時時長爲10分鐘+30秒。若是定義超時時間爲timeout,則超時時長的計算公式爲:
    timeout = 2 * heartbeat.recheck.interval + 10 * dfs.heartbeat.interval

    而默認的heartbeat.recheck.interval 大小爲5分鐘,dfs.heartbeat.interval默認爲3秒。
    須要注意的是hdfs-site.xml 配置文件中的heartbeat.recheck.interval的單位爲毫秒,dfs.heartbeat.interval的單位爲秒。因此,舉個例子,若是heartbeat.recheck.interval設置爲5000(毫秒),dfs.heartbeat.interval設置爲3(秒,默認),則總的超時時間爲40秒。

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

     

  • 觀察驗證DATANODE功能
    上傳一個文件,觀察文件的block具體的物理存放狀況:
    在每一臺datanode機器上的這個目錄中能找到文件的切塊:
    /home/hadoop/app/hadoop-2.7.3/tmp/dfs/data/current/BP-193442119-192.168.88.3-1432458743457/current/finalized

 

轉自簡書:https://www.jianshu.com/p/855dff19fd66

相關文章
相關標籤/搜索