mapreduce關於大量小檔案的優化策略

2021-12-29 19:49:58 字數 987 閱讀 5136

在分布式的架構中,分布式檔案系統hdfs,和分布式運算程式程式設計框架mapreduce。

hdfs:不怕大檔案,怕很多小檔案

mapreduce :怕資料傾斜

那麼mapreduce是如果解決多個小檔案的問題呢?

mapreduce關於大量小檔案的優化策略

(1) 預設情況下,textinputformat對任務的切片機制是按照檔案規劃切片,不管有多少個小檔案,都會是單獨的切片,都會交給乙個maptask,這樣,如果有大量的小檔案

就會產生大量的maptask,處理效率極端底下

(2)優化策略

最好的方法:在資料處理的最前端(預處理、採集),就將小檔案合併成大檔案,在上傳到hdfs做後續的分析

補救措施:如果已經是大量的小檔案在hdfs中了,可以使用另一種inputformat來做切片(combinefileinputformat),它的切片邏輯跟fileinputformat不同:

它可以將多個小檔案從邏輯上規劃到乙個切片中,這樣,多個小檔案就可以交給乙個maptask了

//如果不設定inputformat,它預設的用的是textinputformat.class

/*combinetextinputformat為系統自帶的元件類

* setmininputsplitsize 中的2048是表示n個小檔案之和不能大於2048

* setmaxinputsplitsize 中的4096是 當滿足setmininputsplitsize中的2048情況下 在滿足n+1個小檔案之和不能大於4096

*/job.setinputformatclass(combinetextinputformat.class);

combinetextinputformat.setmininputsplitsize(job, 2048);

combinetextinputformat.setmaxinputsplitsize(job, 4096);補充:當n+1大於最大值時候,大檔案會被切開,放到n個檔案去

MapReduce大量小檔案問題

1.預設情況下,textinputformat對任務的切片機制是按檔案規劃切片,不管檔案多小,都會是乙個單獨的切片,都會交給maptaskz這樣,如果有大量小檔案,就會產生大量的maptask,處理效率及其低下 2.優化方法 最好的辦法 在資料處理系統的最前端 預處理 採集 就將小檔案合併成大檔案,...

一文讀懂MapReduce

hadoop解決大規模資料分布式計算的方案是mapreduce。mapreduce既是乙個程式設計模型,又是乙個計算框架。也就是說,開發人員必須基於mapreduce程式設計模型進行程式設計開發,然後將程式通過mapreduce計算框架分發到hadoop集群中執行。我們先看一下作為程式設計模型的ma...

關於MapReduce的理解?

來自知乎 其實我們可以從word count這個例項來理解mapreduce。mapreduce大體上分為六個步驟 input,split,map,shuffle,reduce,output。細節描述如下 輸入 input 如給定乙個文件,包含如下四行 2.拆分 split 將上述文件中每一行的內容...