HDFS,數據塊,NameNode&DataNode概念及一些原理

分佈式文件系統 ?

管理網絡中跨多臺計算機存儲的文件系統稱爲分佈式文件系統(distributed fileSystem)

HDFS ?

HDFS 即 Hadoop Distributed FileSystem(Hadoop分佈式文件系統)

超大文件:上百M,GB,T的文件
流式數據訪問:一次寫入,多次讀取是最高效的訪問模式
不適合需要低時間延遲的數據訪問:HDFS爲高數據吞吐量應用優化,可能會以時間爲代價
帶個寫入者:HDSF的文件寫操作只支持單個寫入者,且寫操作以 只添加 的方式在文件末尾寫數據

數據塊

  • HDFS的塊(block)默認爲128M
  • HDFS中小於一個塊的文件不會佔據整個塊的空間

HDFS的塊爲什麼這麼大?

最小化尋址開銷

NameNode&DataNode

HDFS集羣有兩類節點:
1. 管理節點 NameNode
2. 工作節點 DataNode

NameNode

  • NameNode管理文件系統的命名空間
  • 維護文件系統樹及整棵樹內所有的文件和目錄
  • 記錄每個文件各個塊所在的數據節點信息(非永久保存,啓動時根據數據節點信息重建)

這些信息以文件形式保存在磁盤上:命名空間鏡像文件;編輯日誌文件

DataNode

DataNode是文件系統的工作節點,根據客戶端或NameNode調度需要,存儲並檢索數據塊

  • 沒有NameNode DataNode將無法使用

HDFS工作機制

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

NameNode

元數據存儲機制

  • 內存中有一份完整的元數據(內存meta data)
  • 磁盤有一個“準完整”的元數據鏡像(fsimage)文件(在namenode的工作目錄中)
  • 用於銜接內存metadata和持久化元數據鏡像fsimage之間的操作日誌(edits文件)
  • 當客戶端對hdfs中的文件進行新增或者修改操作,操作記錄首先被記入edits日誌文件中,當客戶端操作成功後,相應的元數據會更新到內存meta.data中

元數據的checkpoint

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

CheckPoint流程圖

配置參數

dfs.namenode.checkpoint.check.period=60  #檢查觸發條件是否滿足的頻率,60秒
dfs.namenode.checkpoint.dir=file://${hadoop.tmp.dir}/dfs/namesecondary
#以上兩個參數做checkpoint操作時,secondary namenode的本地工作目錄
dfs.namenode.checkpoint.edits.dir=${dfs.namenode.checkpoint.dir}

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

secondary namenode的另一個作用

namenode和secondary namenode的工作目錄存儲結構完全相同,所以,當namenode故障退出需要重新恢復時,可以從secondary namenode的工作目錄中將fsimage拷貝到namenode的工作目錄,以恢復namenode的元數據

DataNode

  • 存儲管理用戶的文件塊數據
  • 定期向namenode彙報自身所持有的block信息(通過心跳信息上報)

確定塊報告間隔配置(以毫秒爲單位)

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

Datanode掉線判斷時限參數

HDFS默認的超時時長爲10min+30s

超時時長的計算公式爲:

timeout  = 2 * heartbeat.recheck.interval + 10 * dfs.heartbeat.interval
<property>
        <name>heartbeat.recheck.interval</name>
        <value>2000</value><!-- 毫秒 -->
</property>
<property>
        <name>dfs.heartbeat.interval</name>
        <value>1</value><!-- 秒 -->
</property>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章