1. 程式人生 > 其它 >Hadoop中的塊、片、區

Hadoop中的塊、片、區

Hadoop中的分塊、分片、分割槽

塊(Block)

檔案上傳HDFS的時候,HDFS客戶端將檔案切分成一個一個的塊,然後進行上傳。

塊的預設大小在Hadoop2.x/3.x版本中是128M,1.x版本中是64M。

思考:為什麼塊的大小不能設定太小,也不能設定太大?

(1)HDFS的塊設定太小,會增加定址時間,程式一直在找塊的開始位置;

(2)如果塊設定的太大,從磁碟傳輸資料的時間會明顯大於定位這個塊開 始位置所需的時間。導致程式在處理這塊資料時,會非常慢。

總結:HDFS塊的大小設定主要取決於磁碟傳輸速率。

片(Split)

Block 是 HDFS 物理上把資料分成一塊一塊。資料塊是 HDFS 儲存資料單位。

資料切片只是在邏輯上

對輸入進行分片,並不會在磁碟上將其切分成片進行儲存。資料切片是 MapReduce 程式計算輸入資料的單位,一個切片會對應啟動一個 MapTask。

切片機制:

(1)簡單地按照檔案的內容長度進行切片

(2)切片大小,預設等於Block大小

(3)切片時不考慮資料集整體,而是逐個針對每一個檔案單獨切片

區(Partition)

一般情況下,一個分割槽對應一個ReduceTask。(二者也可以不相等)

(1)如果ReduceTask的數量> getPartition的結果數,則會多產生幾個空的輸出檔案part-r-000xx;

(2)如果1<ReduceTask的數量<getPartition的結果數,則有一部分分割槽資料無處安放,會Exception;
(3)如 果ReduceTask的數量=1,則不管MapTask端輸出多少個分割槽檔案,最終結果都交給這一個ReduceTask,最終也就只會產生一個結果檔案 part-r-00000;