您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“Java的Hadoop CombineTextInputFormat小文件切片怎么理解”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
框架默認(rèn)的TextInputFormat切片機制是對任務(wù)按文件規(guī)劃切片,不管文件多小,都會是一個單獨的切片,都會交給一個MapTask,這樣如果有大量小文件,就會產(chǎn)生大量的MapTask,比如有一個2m的文件,但是默認(rèn)分片還是128m,處理效率極其低下。
1、應(yīng)用場景:
CombineTextInputFormat用于小文件過多的場景,它可以將多個小文件從邏輯上規(guī)劃到一個切片中,這樣,多個小文件就可以交給一個MapTask處理,就不至于每個小文件規(guī)劃大的切片了。
2、虛擬存儲切片最大值設(shè)置
CombineTextInputFormat.setMaxInputSplitSize(job, 4194304);// 4m
注意:虛擬存儲切片最大值設(shè)置最好根據(jù)實際的小文件大小情況來設(shè)置具體的值。
3、切片機制
生成切片過程包括:虛擬存儲過程和切片過程二部分。
虛擬存儲過程:
獲取輸入目錄下所有文件大小,依次和代碼中設(shè)置的setMaxInputSplitSize值做比較,如果不大于設(shè)置的最大值,邏輯上劃分一個切片。如果輸入文件大于設(shè)置的最大值且大于兩倍,那么以最大值切割一塊切片;當(dāng)剩余數(shù)據(jù)大小超過設(shè)置的最大值且不大于最大值2倍,此時將文件均分成2個虛擬存儲塊(防止出現(xiàn)太小切片)。
例如setMaxInputSplitSize值為5M,輸入文件大小為10.02M,則先邏輯上分成一個5M。剩余的大小為5.02M,如果按照5M邏輯劃分,就會出現(xiàn)0.02M的小的虛擬存儲文件,所以將剩余的5.02M文件切分成(2.51M和2.51M)兩個文件。
切片過程:
(a) 判斷虛擬存儲的文件大小是否大于setMaxInputSplitSize值,大于等于則單獨形成一個切片。
(b) 如果不大于則跟下一個虛擬存儲文件進(jìn)行合并,共同形成一個切片。
(c) 測試舉例:有4個小文件大小分別為1.7M、5.1M、3.4M以及6.8M這四個小文件,則虛擬存儲之后形成6個文件塊,大小分別為:
1.7M,(2.55M、2.55M),3.4M 以及(3.4M、3.4M)
(d) 最終會形成3個切片,大小分別為:(1.7+2.55)M,(2.55+3.4)M,(3.4+3.4)M
1.需求
將輸入的大量小文件合并成一個切片統(tǒng)一處理。
(1)輸入數(shù)據(jù)
準(zhǔn)備4個小文件
(2)期望
期望一個切片處理4個文件
2.實現(xiàn)過程
(1)不做任何處理,運行WordCount案例程序,觀察切片個數(shù)為4。
(2)在WordcountDriver中增加如下代碼,運行程序并觀察運行的切片個數(shù)為3。
(a)驅(qū)動類中添加代碼如下:
// 如果不設(shè)置InputFormat,它默認(rèn)用的是TextInputFormat.classjob.setInputFormatClass(CombineTextInputFormat.class);//虛擬存儲切片最大值設(shè)置4mCombineTextInputFormat.setMaxInputSplitSize(job, 4194304);
(b)運行結(jié)果為3個切片。
(3)在WordcountDriver中增加如下代碼,運行程序并觀察運行的切片個數(shù)為1。
(a)驅(qū)動中添加代碼如下:
// 如果不設(shè)置InputFormat,它默認(rèn)用的是TextInputFormat.class
job.setInputFormatClass(CombineTextInputFormat.class);
//虛擬存儲切片最大值設(shè)置20m
CombineTextInputFormat.setMaxInputSplitSize(job, 20971520);
(b)運行結(jié)果為1個切片。
“Java的Hadoop CombineTextInputFormat小文件切片怎么理解”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。