分布式文件系統架構


分布式文件系統架構

  • FS (File System)
    • 文件系統是基於硬盤上的一個文件管理的工具
    • 我們用戶操作文件系統可以和硬盤解耦
  • DFS (Distributed File System)
    • 分布式文件系統
    • 將數據存放到多台電腦上存儲
    • 分布式文件系統有很多
    • HDFS(Hadoop Distributed File System)是Map Reduce計算的基礎

文件切分思想

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

Block拆分標准

  • 拆分的數據塊需要等大

    • 數據計算的時候簡化問題的復雜度
      • 進行分布式算法設計的時候,數據不統一,算法很難設計
    • 數據讀取的時間相對一致
    • 通過偏移量可以知道數據塊的位置
    • 相同文件,分成的數據塊大小應該相等
  • 數據塊Block

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

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

Block數據安全

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

image-20211102194001594

Block管理效率

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

image-20211102142031496

HDFS的特點

優點

  1. 高容錯性

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

    • 副本丟失或宕機后自動恢復。默認保存三個副本

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

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

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

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

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

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

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

缺點(不適合小量數據處理)

  1. 不擅長低延遲數據訪問

    • 比如毫秒級
  2. 不擅長小文件分區

    • 占用NameNode大量內存,NameNode是管理datanode並記錄block存儲到了哪個datanode。所有每存儲一個文件會生成一個1k或者幾k的數據文件,如果小文件多的話,小文件累積最終也會達到一個比較大的規模
    • 磁盤尋道時間超過讀取時間
  • 不擅長並發寫入,文件隨機修改
    • 一個文件只能有一個寫入者
    • 僅支持append向尾部添加(有組件可以實現刪除等功能)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM