簡體   English   中英

Hadoop較小的輸入文件

[英]Hadoop smaller input file

我以某種不同的方式使用hadoop。 就我而言,輸入大小確實很小。 但是,計算時間更多。 我有一些復雜的算法,將在輸入的每一行上運行。 因此,即使輸入大小小於5mb,整個計算時間仍超過10小時。 所以我在這里使用hadoop。 我正在使用NLineInputFormat按行數而不是塊大小分割文件。 在最初的測試中,我大約有1500條線(拆分為200條線),與在一台計算機上串行運行相比,在四節點群集中僅看到1.5倍的改進。 我正在使用VM。 這可能是問題,還是對於較小尺寸的輸入,hadoop不會帶來太多好處? 任何見解都會非常有幫助。

對我來說,您的工作量類似於SETI @ Home的工作量-很小的有效載荷,但是卻要花費數小時的時間。

Hadoop(或更確切地說是HDFS)並非為大量小文件而設計。 但是我懷疑這對於MapReduce是一個問題-您正在使用的處理框架。

如果要將工作負載放在一起:1)將它們分成單個文件(一個工作負載,一個文件),如果該文件小於塊大小,則它將轉到一個映射器。 典型的塊大小為64MB或128MB

2)為FileInputFormat創建包裝器,並將'isSplitable()'方法重寫為false。 這將確保將整個文件內容饋送到一個映射器,而不是hadoop試圖逐行拆分它

參考: http : //hadoopilluminated.com/hadoop_book/HDFS_Intro.html

Hadoop並不是真正擅長處理大量小文件,因此,通常需要將大量較小的輸入文件合並為較少數量的較大文件,以減少映射器的數量。

作為Input to Hadoop的MapReduce流程由InputFormat抽象化。 FileInputFormat是處理HDFS中文件的默認實現。 使用FileInputFormat ,每個文件被分成一個或多個InputSplits通常以block size為上限。 這意味着輸入拆分的數量受輸入文件數量的下限限制。 當MapReduce進程處理大量小文件時,這不是理想的環境,因為協調分布式進程的開銷遠遠大於存在大量小文件時的開銷。

驅動吐痰尺寸的基本參數是mapred.max.split.size

使用CombineFileInputFormat和此參數,我們可以控制映射器的數量。

這里檢查實現的另一個答案。

暫無
暫無

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

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