分佈式存儲基石:HDFS

基本概念

HDFS分佈式文件存儲系統,是基於Java實現的,是Hadoop最重要的核心組件,支持順序寫入,而非隨機定爲讀寫。

HDFS前提和設計目標

  • 存儲超大文件
    • HDFS適合存儲大文件,單個文件大小通常在百兆以上
    • HDFS適合存儲海量文件,總存儲量可達PB,EB級
  • 硬件容錯
    • 基於普通機器搭建,硬件錯誤是常態而不是異常,因此錯誤檢測和快速、自動的恢復是HDFS最核心的架構目標
  • 流式數據訪問
    • 爲數據批處理而設計,關注數據訪問的高吞吐量
  • 簡單的一致性模型
    • 一次寫入,多次讀取
    • 一個文件經過創建、寫入和關閉之後就不需要改變
  • 本地計算
    • 將計算移動到數據附近

基本構成

  • 數據塊
    • 文件以塊爲單位進行切分存儲,塊通常設置的比較大(最小6M,默認128M)
    • 塊越大,尋址越快,讀取效率越高,但同時由於MapReduce任務也是以塊爲最小單位來處理,所以太大的塊不利於對數據的並行處理
    • 一個文件至少佔用一個塊(邏輯概念)
  • nameNode與DataNode
    • nameNode負責維護整個文件系統的信息,包括:整個文件樹,文件的塊分佈信息,文件系統的元數據,數據複製策略等;
    • dataNode存儲文件內容,負責文件實際的讀寫操作,保持與nameNode的通信,同步文件塊信息

nameNode深入

  • 啓動過程:
  1. 開啓安全模式:不能執行數據修改操作
  2. 加載fsimage
  3. 逐個執行所有Edits文件中的每一條操作將操作合併到fsimage,完成後生成一個空的edits文件
  4. 接收dataNode發送來的心跳消息和塊消息
  5. 根據以上信息確定文件系統狀態
  6. 退出安全模式
  • 安全模式:文件系統只接受讀數據請求,而不接收刪除、修改等變更請求
  • 什麼情況下進入:nameNode主節點啓動時,HDFS進入安全模式
  • 什麼時候退出:系統達到安全標準時,HDFS退出安全模式
    • dfs.namenode.safemode.min.datanodes:最小可用datanode數量
    • dfs.namenode.safemode.threshold-pct:副本數達到最小要求的block佔系統總block數的百分比
    • dfs.namenode.dafemode.extension:穩定時間
  • 相關命令:
    • hdfs dfsadmin -safemode get:查看當前狀態
    • hdfs dfsadmin -safemode enter:進入安全模式
    • hdfs dfsadmin -safemode leave:強制離開安全模式
    • hdfs dfsadmin -safemode wait:一直等待直到安全模式結束

HDFS HA高可用性

  • dataNode:通過數據冗餘保證數據的可用性
  • nameNode:在2.0以前存在SPOF(single point of failure單點故障)風險,從2.0之後:
  1. 把name.dir指向NFS(Network File System)
  2. QJM(Quorum Journal Manager)方案

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章