3 回答

TA貢獻2021條經驗 獲得超8個贊
一般情況下,都為1,特殊情況除外。
minSize:取的1和mapred.min.split.size中較大的一個。
blockSize:HDFS的塊大小,默認為64M,一般大的HDFS都設置成128M。
splitSize:就是最終每個Split的大小,那么Map的數量基本上就是totalSize/splitSize。
接下來看看computeSplitSize的邏輯:
首先在goalSize(期望每個Mapper處理的數據量)和HDFS的block size中取較小的,然后與mapred.min.split.size相比取較大的。
有了2的分析,下面調整Map的數量就很容易了。
3.1 減小Map-Reduce job 啟動時創建的Mapper數量
當處理大批量的大數據時,一種常見的情況是job啟動的mapper數量太多而超出了系統限制,導致Hadoop拋出異常終止執行。解決這種異常的思路是減少mapper的數量。具體如下:
3.1.1 輸入文件size巨大,但不是小文件
這種情況可以通過增大每個mapper的input size,即增大minSize或者增大blockSize來減少所需的mapper的數量。增大blockSize通常不可行,因為當HDFS被hadoop namenode -format之后,blockSize就已經確定了(由格式化時dfs.block.size決定),如果要更改blockSize,需要重新格式化HDFS,這樣當然會丟失已有的數據。所以通常情況下只能通過增大minSize,即增大mapred.min.split.size的值。
3.1.2 輸入文件數量巨大,且都是小文件
添加回答
舉報