在分布式的架構中,分布式檔案系統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 將上述文件中每一行的內容...