磁盤也是由數據塊組成的,一般默認大小是512字節,構建磁盤之上的文件系統一般是磁盤塊的整數倍。
HDFS也是采用塊管理的,但是比較大,在Hadoop1.x中默認大小是64M,Hadoop2.x中大小默認為128M,那為什么HDFS塊這么大呢,又為什么Hadoop2.x中數據塊更大了呢?
權威指南中說,為了最小化尋址開銷,也就是讓文件傳輸時間明顯大於塊的尋址時間,還有就是減輕NameNode的負擔,因為在NameNode中存儲這塊所在數據節點的信息。但是也不能過於大,因為MapReducer中一般一個map處理一個塊上的數據,如果塊很大,任務數會很少(少於集群中的節點個數)這樣執行效率會明顯降低。
使用塊有什么好處?假如上傳的一個文件非常大,沒有任何一塊磁盤能夠存儲,這樣這個文件就沒法上傳了,如果使用塊的概念,會把文件分割成許多塊,這樣這個文件可以使用集群中的任意節點進行存儲。數據存儲要考慮容災備份,以塊為單位非常有利於進行備份,HDFS默認每個塊備份3份,這樣如果這個塊上或這個節點壞掉,可以直接找其他節點上的備份塊。還有就是,有的時候需要將備份數量提高,這樣能夠分散機群的讀取負載,因為可以在多個節點中尋找到目標數據,減少單個節點讀取。