分散式檔案系統架構
阿新 • • 發佈:2021-11-02
分散式檔案系統架構
- 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正好是一個單詞的中間部分,切分資料如何保證資料的完整性?
- 根據每個字元的偏移量,可以來為不同塊的字元找到其原來的檔案中的位置
- 參考檔案拆分思想中的資料儲存原理
- HDFS中一旦檔案被儲存,資料便不被允許被修改
Block資料安全
- 肯定是要對資料進行備份
- 備份的資料不能存放在一個節點上
- 儲存的副本資料要儘可能的近,這樣獲取資料的速度會很快從而減少讀取的代價
- 備份的數量小於等於節點數量
- 備份的資料節點越多的話,可能導致資源浪費嚴重
- 備份少的話,發生集體崩潰的可能性會增大
- 備份數量是通過資料的使用頻率和資料的重要性來決定的
- 預設每個資料塊會有3個副本,相同副本是不會存放在同一個節點上
- 副本的數量可以變更
- 如果資料近期被使用的可能性很大,那麼可以多設定一些資料備份
- 後期資料很少被分析,可以減少副本數量
Block管理效率
- 需要專門給節點進行分工
- DataNode:儲存資料,儲存的資料塊(data block)
- NameNode:記錄資料。用來管理/分配所有訪問對應DataNode的程序,監控對應DataNode的狀態以及對應NameNode都做了什麼,NameNode對DataNode進行記錄
- SecondaryNameNode:資料日誌
HDFS的特點
優點
-
高容錯性
-
儲存多個副本,並且提供容錯機制
-
副本丟失或宕機後自動恢復。預設儲存三個副本
-
-
可以執行在廉價的機器上
- 通過副本提高可靠性
- 提供容錯機制和恢復機制
-
適合批處理
- 移動計算而非資料
- 資料位置暴露給計算框架,這樣所有節點都可以進行資料訪問
-
適合大資料的處理
- TB級資料處理,甚至是PB級資料的處理
- 百萬規模以上的檔案數量
- 10K+節點規模
-
流式資料訪問
- 一次寫入,多次讀取,高吞吐量,所以可以同時處理大量資料
-
批處理和流處理
-
批處理:安按照一個定量不停的處理
-
流處理:源源不斷,上流不停處理不停
-
缺點(不適合小量資料處理)
-
不擅長低延遲資料訪問
- 比如毫秒級
-
不擅長小檔案分割槽
- 佔用NameNode大量記憶體,NameNode是管理datanode並記錄block儲存到了哪個datanode。所有每儲存一個檔案會生成一個1k或者幾k的資料檔案,如果小檔案多的話,小檔案累積最終也會達到一個比較大的規模
- 磁碟尋道時間超過讀取時間
- 不擅長併發寫入,檔案隨機修改
- 一個檔案只能有一個寫入者
- 僅支援append向尾部新增(有元件可以實現刪除等功能)