Hadoop中的塊、片、區
阿新 • • 發佈:2021-07-14
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;