1. 程式人生 > 其它 >分散式檔案系統架構

分散式檔案系統架構

分散式檔案系統架構

  • FS (File System)
    • 檔案系統是基於硬碟上的一個檔案管理的工具
    • 我們使用者操作檔案系統可以和硬碟解耦
  • DFS (Distributed File System)
    • 分散式檔案系統
    • 將資料存放到多臺電腦上儲存
    • 分散式檔案系統有很多
    • HDFS(Hadoop Distributed File System)是Map Reduce計算的基礎

檔案切分思想

  • 檔案存放在一個磁碟上效率低
    • 讀取效率低
    • 如果檔案特別大會超出單臺機器的儲存範圍
  • 位元組陣列
    • 檔案在磁碟真實儲存檔案的抽象概念
    • 陣列可以進行拆分和組裝,原始檔不會受到影響
  • 切分資料
    • 對位元組陣列進行切分
  • 拼接資料
    • 按照陣列的偏移量將資料連線到一起,將位元組陣列連線到一起
  • 偏移量
    • 當前資料在陣列中的相對位置,可以理解為下標
    • 陣列都有對應的索引(下標),可以快速地定位資料
  • 資料儲存的原理
    • 不管檔案的大小,所有的檔案都是由位元組數構成
    • 如果要切分檔案,就是將i個位元組陣列分成多份
    • 只要將切分後的資料拼接到一起,資料就可以繼續使用
    • 拼接的時候需要參照的是每個資料的偏移量

Block拆分標準

  • 拆分的資料塊需要等大

    • 資料計算的時候簡化問題的複雜度
      • 進行分散式演算法設計的時候,資料不統一,演算法很難設計
    • 資料讀取的時間相對一致
    • 通過偏移量可以知道資料塊的位置
    • 相同檔案,分成的資料塊大小應該相等
  • 資料塊Block

    • 資料被切分後的一個整體成為資料塊
    • 在Hadoop1.0中預設大小為64M,在Hadoop2.0及其以後預設大小為128 M
    • 在同一個檔案中,每個資料塊大小要一致,除了最後一個節點之外
      • 不同檔案中,塊的大小可以不一致
      • 檔案大小不同可以設定不同的塊的數量
    • 真實情況下,會根據檔案大小和叢集節點的數量綜合考慮塊的大小
    • 資料塊的個數=ceil(檔案大小/每個塊的大小)
  • 注意事項

    • HDFS中一旦檔案被儲存,資料便不被允許被修改
      • 修改會影響偏移量
      • 修改會導致資料傾斜
      • 修改資料會導致蝴蝶效應
    • 可以被追加資料,但是不推薦
      • 追加設定需要手動開啟
    • 一般HDFS儲存的都是歷史資料。所以將來Hadoop的Mapreduce都會被用來進行離線資料處理
    • 一旦檔案被上傳之後,塊的大小就不允許被修改,之後的可以適當縮小
      • 塊大小範圍:128M-512M
    • 如果資料檔案的切割點128M正好是一個單詞的中間部分,切分資料如何保證資料的完整性?
      • 根據每個字元的偏移量,可以來為不同塊的字元找到其原來的檔案中的位置
      • 參考檔案拆分思想中的資料儲存原理

Block資料安全

  • 肯定是要對資料進行備份
  • 備份的資料不能存放在一個節點上
  • 儲存的副本資料要儘可能的近,這樣獲取資料的速度會很快從而減少讀取的代價
  • 備份的數量小於等於節點數量
    • 備份的資料節點越多的話,可能導致資源浪費嚴重
    • 備份少的話,發生集體崩潰的可能性會增大
    • 備份數量是通過資料的使用頻率和資料的重要性來決定的
  • 預設每個資料塊會有3個副本,相同副本是不會存放在同一個節點上
  • 副本的數量可以變更
    • 如果資料近期被使用的可能性很大,那麼可以多設定一些資料備份
    • 後期資料很少被分析,可以減少副本數量

Block管理效率

  • 需要專門給節點進行分工
    • DataNode:儲存資料,儲存的資料塊(data block)
    • NameNode:記錄資料。用來管理/分配所有訪問對應DataNode的程序,監控對應DataNode的狀態以及對應NameNode都做了什麼,NameNode對DataNode進行記錄
    • SecondaryNameNode:資料日誌

HDFS的特點

優點

  1. 高容錯性

    • 儲存多個副本,並且提供容錯機制

    • 副本丟失或宕機後自動恢復。預設儲存三個副本

  2. 可以執行在廉價的機器上

    • 通過副本提高可靠性
    • 提供容錯機制和恢復機制
  3. 適合批處理

    • 移動計算而非資料
    • 資料位置暴露給計算框架,這樣所有節點都可以進行資料訪問
  4. 適合大資料的處理

    • TB級資料處理,甚至是PB級資料的處理
    • 百萬規模以上的檔案數量
    • 10K+節點規模
  5. 流式資料訪問

    • 一次寫入,多次讀取,高吞吐量,所以可以同時處理大量資料
  6. 批處理和流處理

    • 批處理:安按照一個定量不停的處理

    • 流處理:源源不斷,上流不停處理不停

缺點(不適合小量資料處理)

  1. 不擅長低延遲資料訪問

    • 比如毫秒級
  2. 不擅長小檔案分割槽

    • 佔用NameNode大量記憶體,NameNode是管理datanode並記錄block儲存到了哪個datanode。所有每儲存一個檔案會生成一個1k或者幾k的資料檔案,如果小檔案多的話,小檔案累積最終也會達到一個比較大的規模
    • 磁碟尋道時間超過讀取時間
  • 不擅長併發寫入,檔案隨機修改
    • 一個檔案只能有一個寫入者
    • 僅支援append向尾部新增(有元件可以實現刪除等功能)