簡體   English   中英

使用Hadoop處理大量小文件

[英]Processing large set of small files with Hadoop

我正在使用Hadoop示例程序WordCount來處理大量的小文件/網頁(cca.2-3 kB)。 由於這遠離hadoop文件的最佳文件大小,因此程序非常慢。 我想這是因為設置和撕毀工作的成本遠遠高於工作本身。 這些小文件也會導致文件名的命名空間耗盡。

我讀到在這種情況下我應該使用HDFS歸檔(HAR),但我不知道如何修改此程序WordCount以從此檔案中讀取。 程序可以繼續工作而無需修改或需要進行一些修改嗎?

即使我在檔案中打包了很多文件,問題仍然存在,這是否會提高性能。 我讀到即使我打包多個文件,一個存檔中的這些文件也不會由一個映射器處理,但很多,在我的情況下(我猜)不會提高性能。

如果這個問題太簡單,請理解我是Hadoop的新手並且對它的經驗很少。

使用HDFS不會改變你導致hadoop處理大量小文件的情況。 在這種情況下,最好的選擇可能是cat的文件合並為一個(或少數幾個大)文件(S)。 這將減少您擁有的映射器數量,這將減少需要處理的事物數量。

如果您在分布式系統上運行,則使用HDFS可以提高性能。 如果你只是偽分布式(一台機器),那么HDFS不會提高性能。 限制是機器。

當您對大量小文件進行操作時,需要大量的映射器和縮減器。 設置/關閉可以與文件本身的處理時間相比,從而導致很大的開銷。 cat荷蘭國際集團的文件,應減少作業映射器Hadoop的運行,這應該提高性能的數目。

使用HDFS存儲文件時可以看到的好處是分布式模式,有多台機器。 這些文件將存儲在跨機器的塊(默認為64MB)中,每台機器都能夠處理駐留在機器上的數據塊。 這減少了網絡帶寬的使用,因此它不會成為處理的瓶頸。

歸檔文件,如果hadoop將取消歸檔它們只會導致hadoop仍然有大量的小文件。

希望這有助於您的理解。

從我仍然有限的理解和Hadoop,我相信正確的解決方案是創建包含HTML文件作為值的SequenceFile ,並可能將URL作為鍵。 如果您對SequenceFile執行M / R作業,則每個映射器將處理許多文件(取決於拆分大小)。 每個文件將作為單個輸入呈現給地圖功能。 您可能希望使用SequenceFileAsTextInputFormat作為InputFormat來讀取這些文件。

另請參閱: 在Hadoop MapReduce中為單個映射提供多個非文本文件

我最近給這篇文章添加了書簽以便稍后閱讀並在此處找到相同的問題:)這個條目有點陳舊,不太確定它現在有多相關。 Hadoop的變化發生得非常快。

http://www.cloudera.com/blog/2009/02/the-small-files-problem/

博客文章由Tom White撰寫,他也是“Hadoop:The Definitive Guide,Second Edition”的作者,對於那些開始使用Hadoop的人來說是推薦讀物。

http://oreilly.com/catalog/0636920010388

你可以在將文件提交給Hadoop之前連接文件嗎?

CombineFileInputFormat可用於這種情況,適用於大型小文件。 這將許多此類文件打包在一個拆分中,因此每個映射器都需要處理更多(1 split = 1 map task)。 mapreduce的整體處理時間也將下降,因為映射器的運行次數較少。 由於沒有使用CombineFileInputFormat的歸檔感知InputFormat,因此可以提高性能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM