大量小檔案的優化策略

2021-09-29 07:52:03 字數 2035 閱讀 2317

1)預設情況下

textinputformat對任務的切片機制是按檔案規劃切片,不管檔案多小,都會是乙個單獨的切片,都會交給乙個maptask,這樣如果有大量小檔案,就會產生大量的maptask,處理效率極其低下。

2)優化策略

(1)最好的辦法,在資料處理系統的最前端(預處理/採集),將小檔案先合併成大檔案,再上傳到hdfs做後續分析。

(2)補救措施:如果已經是大量小檔案在hdfs中了,可以使用另一種inputformat來做切片                 (combinetextinputformat),它的切片邏輯跟textfileinputformat不同:它可以將多個小檔案從邏輯上規劃到乙個切片中,這樣,多個小檔案就可以交給乙個maptask。

下面的是fileinputformat的結構目錄:     結構樹:

(3)優先滿足最小切片大小,不超過最大切片大小

combinetextinputformat.setmaxinputsplitsize(job, 3*1024*1024);// 3m (初始單位是位元組)

combinetextinputformat.setmininputsplitsize(job, 2*1024*1024);// 2m(初始單位是位元組)

10=3+3+4(三片)

11=3+3+3+2(四片)(因為最後一片,滿足最小切片)

3)具體實現步驟

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

job.setinputformatclass(combinetextinputformat.class)

combinetextinputformat.setmaxinputsplitsize(job, 4194304);// 3m

combinetextinputformat.setmininputsplitsize(job, 2097152);// 2m

注:在看

number of splits

時,和最大值

(maxsplitsize)

有關、總體規律就是和低於最大值是一片、高於最大值

1.5倍

+,則為兩片;高於最大值

2倍以上則向下取整,比如檔案大小

65mb

,切片最大值為

4mb,

那麼切片為16個

.總體來說,切片差值不超過

1個,不影響整體效能 (會有誤差,不是精準型)

優化多個小檔案案例:

優化檔案**:

//將多個小檔案劃分為乙個maptask執行----一種優化

//檢視繼承樹快捷鍵 ctrl+h

job.setinputformatclass(combinetextinputformat.class);

combinetextinputformat.setmaxinputsplitsize(job,3*1024*1024);

combinetextinputformat.setmininputsplitsize(job,2*1024*1024);

輸出:

//配置輸入資料的路徑

fileinputformat.setinputpaths(job, new path("d:\\input\\test\\plus\\five"));

//配置輸出的路徑

fileoutputformat.setoutputpath(job, new path("d:\\input\\test\\plus\\11031"));

下面是檔案大小:六個檔案一共42.6m

結果:

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

在分布式的架構中,分布式檔案系統hdfs,和分布式運算程式程式設計框架mapreduce。hdfs 不怕大檔案,怕很多小檔案 mapreduce 怕資料傾斜 那麼mapreduce是如果解決多個小檔案的問題呢?mapreduce關於大量小檔案的優化策略 1 預設情況下,textinputformat...

MapReduce大量小檔案問題

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

快速刪除大量小檔案

由於bash會展開例如 rm aa 這樣的命令 如果後面的檔案太多就會報引數太長,所以有時候刪除大量小檔案就不適合用rm了 可以使用find先查詢在刪除 就不會出現上面那種報錯問題,可是還有乙個問題檔案太多的話 exec rm 完全沒有效率,一兩個小時估計也就只能刪除幾十萬的檔案 對於需要刪除百萬為...