MapReduce獲取分片數目

2021-09-07 17:10:44 字數 1555 閱讀 5863

有的程式會設定map的數目,那麼map數目是如何影響分片的數目的呢?

假設檔案大小為0,是否會作為乙個分片傳給map任務?

fileinputformat.getsplits返回檔案的分片數目,這部分將介紹其執行流程,後面將貼上其源**並給出凝視

通過liststatus()獲取輸入檔案列表files,當中會遍歷輸入資料夾的子資料夾,並過濾掉部分檔案。如檔案_success

獲取全部的檔案大小totalsize

goalsize=totalsize/nummaps。nummaps是使用者指定的map數目

files中取出乙個檔案file

計算splitsize。splitsize=max(minsplitsize,min(file.blocksize,goalsize)),當中minsplitsize是同意的最小分片大小。默覺得1b

將file的分片增加到splits中

返回4。直到將files遍歷完

結束。返回splits

* numsplits為設定的map數目

* 期待的分片大小

*/long goalsize = totalsize / (numsplits == 0 ? 1 : numsplits);

/** fileinputformat.split_minsize為引數值:mapreduce.input.fileinputformat.split.minsize,默覺得0

* minsplitsize默覺得1

*/long minsize = math.max(job.getlong(org.apache.hadoop.mapreduce.lib.input.

fileinputformat.split_minsize, 1), minsplitsize);

// generate splits

arraylistsplits = new arraylist(numsplits);

networktopology clustermap = new networktopology();

for (filestatus file: files) else

if (issplitable(fs, path))

if (bytesremaining != 0)

} else

} else

}log.debug("total # of splits: " + splits.size());

return splits.toarray(new filesplit[splits.size()]);

}看源**還是非常實用的。非常多時候,部落格或者書介紹的不是非常中肯,或者會有錯誤。看源**就不會出現這些問題。

mfc 獲取網絡卡數目

int cgetsysinfo getinte cecount 如果regqueryvalueex返回值仍舊未成功則函式返回.注意記憶體洩露 free函式 這個if保證了這個while只能進入一次 避免死迴圈 if ret error success return 0 0個介面 函式執行成功之後就是...

MapReduce分片 分割槽 分組 傻傻分不清

對於hdfs中儲存的乙個檔案,要進行map處理前,需要將它切分成多個塊,才能分配給不同的maptask去執行。分片的數量等於啟動的maptask的數量。預設情況下,分片的大小就是hdfs的blocksize。blocksize預設大小128m。可通過設定minsize和maxsize來設定分片的大小...

MapReduce獲取輸入檔案路徑 全

對於mapreduce而言,在map端經常需要知道處理檔案的輸入路徑,以此來區分不同的處理方式。我們知道在mapreduce框架中會將輸入的檔案切分成許多 inputsplit 檔案塊,每個檔案塊包含了檔案路徑,起止偏移量等資訊,每乙個檔案塊交給乙個map任務進行處理。而檔案塊的生成是通過input...