3 回答

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