分佈式文件系統 之 數據塊(Block)

衆所周知,HDFS中以數據塊(block)爲單位進行存儲管理。本文簡單介紹一下HDFS中數據塊(block)的概念,以及衆多分佈式存儲系統(不止是HDFS)使用block做爲存儲管理基本單位的意義。node

 

數據塊網絡

數據塊的概念並不陌生,在磁盤中,每一個磁盤都有默認的數據塊大小,這是磁盤進行數據讀/寫的最小單位,磁盤塊通常爲512字節。在分佈式文件系統中,數據塊通常遠大於磁盤塊的大小,而且爲磁盤塊大小的整數倍,例如,HDFS block size默認爲64MB。架構

分佈式存儲系統中選擇大block size的主要緣由是爲了最小化尋址開銷,使得磁盤傳輸數據的時間能夠明顯大於定位這個塊所需的時間。然而,在HDFS中block size也很差設置的過大,這是由於MapReduce中的map任務一般一次處理一個塊中的數據,所以若是block太大,則map數就會減小,做業運行的並行度就會受到影響,速度就會較慢。分佈式

 

Why blockoop

在不少分佈式文件系統中咱們均可以看到block的存在,這種設計的好處主要有如下幾點:學習

  1. 存儲的文件大小能夠大於集羣中任意一個磁盤的容量。這很好理解,文件被劃分到多個block中存儲,對磁盤透明;
  2. 使用block抽象而非整個文件做爲存儲單元,能夠極大簡化存儲子系統的設計。由於block size是統一的,所以一個節點上能夠存儲多少block就是能夠推算的;
  3. Block 很是適合用於數據備份,進而提供數據容錯能力和可用性。

 

Why bigger block大數據

在普通文件系統中,使用較大的磁盤塊:spa

  1. 能夠減小管理數據塊須要的開銷。如在Linux中能夠減小保存在i-node中磁盤地址表中的信息鏈的長度;
  2. 在對文件進行讀寫時,能夠減小尋址開銷,即磁盤定位數據塊的次數。

在HDFS中,使用大數據塊:架構設計

  1. 能夠減小名字節點上管理文件和數據塊關係的開銷;
  2. 對數據塊進行讀寫時,能夠有效減小創建網絡鏈接須要的成本。

 

Block VS. Chunk設計

因爲我也是最近纔開始比較仔細的接觸Hadoop,GFS中的DataNode又被稱爲ChuckServer,所以常常會被HDFS中的block和chunk搞得confused掉。今天看到了一個比較好的解釋,在這裏記錄一下:

block:如上文,是HDFS中的存儲管理單元,相似磁盤的block。

chuck:HDFS中存儲的文件被劃分爲多個塊(chuck),每一個chuck的大小與block的大小相同(除了最後一個chuck),這些文件chuck就被存儲到block中。

 

好啦,記錄的很簡單。之前很喜歡一篇文章記錄的很詳盡,所以好久都憋不出一篇博文,就算準備充分能夠開寫了,可是又會以爲好長,懶得寫。因此呢,爲了讓本身學習得更有節奏吧,如今決定有點感悟就記錄下來,方便之後查看。固然,也能夠一段時間merge 整理一下 相關的短文啦!

YUKI,乾巴爹 哈哈

 

參考

《Hadoop權威指南》(第二版)P43

《Hadoop技術內幕:深刻解析Hadoop Common和HDFS架構設計與實現原理》 P218

相關文章
相關標籤/搜索