分布式文件系統(tǒng)HDFS中Block介紹
Block概念
磁盤有一個Block size的概念,它是磁盤讀/寫數(shù)據(jù)的最小單位。構建在這樣的磁盤上的文件系統(tǒng)也是通過塊來管理數(shù)據(jù)的,文件系統(tǒng)的塊通常是磁盤塊的整數(shù)倍。文件系統(tǒng)的塊一般為幾千字節(jié)(byte),磁盤塊一般為512字節(jié)(byte)。
HDFS也有Block的概念,但它的塊是一個很大的單元,默認是64MB。像硬盤中的文件系統(tǒng)一樣,在HDFS中的文件將會按塊大小進行分解,并作為獨立的單元進行存儲。但和硬盤中的文件系統(tǒng)不一樣的是,存儲在塊中的硬的一個比塊小的文件并不會占據(jù)一個塊大小盤物理空間(HDFS中一個塊只存儲一個文件的內容)。
那為什么HDFS中的塊如此之大呢?
在HDFS學習(一) – HDFS設計中,我們曾說過,對HDFS來說,讀取整個數(shù)據(jù)的時間延遲要比讀取到第一條記錄的數(shù)據(jù)延遲更重要,就體現(xiàn)在這里。HDFS的Block設計的如此之大,也就是為了最小化尋道時間。把一個數(shù)據(jù)塊設計的足夠大,就能夠使得數(shù)據(jù)傳輸?shù)臅r間顯著地大于尋找到Block所在時間。這樣,傳輸一個由多個Block組成的文件的時間就取決于磁盤的傳輸速率。
舉一個簡單的例子,假設尋道時間大約為10ms,傳輸速度為100MB/s。為了使得尋道時間僅為傳輸時間的1%,我們就需要設置塊的大小為100MB。HDFS默認的Block size是64MB,但是更多的企業(yè)里邊,已經設置成128M,而且這個參數(shù)將隨著新一代硬盤速度的增長而增長。
而Block Size的值也不宜設置過大,通常,Mapreduce中的Map任務一次只處理一個Block中的數(shù)據(jù),如果啟動太少的Task(少于集群中的節(jié)點的數(shù)量),作業(yè)的速度就會比較慢。
對HDFS進行塊抽象有哪些好處呢?
一、一個顯而易見的好處是:一個文件的大小,可以大于網絡中任意一個硬盤的大小。
文件的塊并不需要存儲在同一個硬盤上,一個文件的快可以分布在集群中任意一個硬盤上。事實上,雖然實際中并沒有,整個集群可以只存儲一個文件,該文件的塊占滿整個集群的硬盤空間。
二、使用抽象塊而非整個文件作為存儲單元,大大簡化了系統(tǒng)的設計。
簡化設計,對于故障種類繁多的分布式系統(tǒng)來說尤為重要。以塊為單位,一方面簡化存儲管理,因為塊大小是固定的,所以一個硬盤放多少個塊是非常容易計算的;另一方面,也消除了元數(shù)據(jù)的顧慮,因為Block僅僅是存儲的一塊數(shù)據(jù),其文件的元數(shù)據(jù),例如權限等就不需要跟數(shù)據(jù)塊一起存儲,可以交由另外的其他系統(tǒng)來處理。
三、塊更適合于數(shù)據(jù)備份,進而提供數(shù)據(jù)容錯能力和系統(tǒng)可用性。
為了防止數(shù)據(jù)塊損壞或者磁盤或者機器故障,每一個block都可以被分到少數(shù)幾天獨立的機器上(默認3臺)。這樣,如果一個block不能用了,就從其他的一處地方,復制過來一份。詳細的關于HDFS數(shù)據(jù)完整性的問題,將在《Hadoop I/O學習(一) – 數(shù)據(jù)完整性》中詳細介紹。
原文鏈接:http://shitouer.cn/2012/12/hdfs-block-introduction/
編輯推薦】