2011-12-28 33 views
3

我正在使用CompositeInputFormat向hadoop作業提供輸入。Hadoop文件拆分:CompositeInputFormat:內部加入

生成的分割數量是作爲輸入給予CompositeInputFormat(用於加入)的文件總數。

作業完全忽略塊大小和最大拆分大小(同時從CompositeInputFormat中獲取輸入)。這導致長時間運行Map Tasks,並且由於輸入文件大於塊大小而導致系統變慢。

是否有人知道任何方式可以通過哪些方式爲CompositeInputFormat管理分割數量?

回答

6

不幸的是,CompositeInputFormat必須忽略塊/拆分大小。在CompositeInputFormat中,需要對輸入文件進行排序並進行相同的分區...因此,Hadoop無法確定將文件拆分到何處以維護此屬性。它無法確定在哪裏分割文件以保持文件的組織。

解決此問題的唯一方法是將文件手動拆分並分割爲更小的拆分。您可以通過將數據通過mapreduce作業(可能只是標識映射器和身份縮減器)與更多的reducer進行傳遞。只要確保使用相同數量的減速器傳遞兩個數據集。

+0

我已經在使用減速器的最大數量。我需要更小塊大小的多個地圖波。目前,地圖任務太大,造成性能問題,有時還會造成任務失敗。 – TheHat 2011-12-29 05:39:33

+1

我不認爲你正在理解我在說什麼。問題是,當使用CompositeInputFormat時,您無法通過輸入拆分來分割地圖任務。解決這個問題的方法是自己手動分割文件。所以,把你的大文件分割成更小的文件。一種方法是我在第二段中提出的建議。順便說一下,沒有減速器的最大數量這樣的事情。 – 2011-12-29 13:04:50

+0

我的輸入是一個不同的mapreduce作業的輸出。 mapreduce作業的輸出文件數量等於所使用的reducer任務的數量。 redcuer任務的最大數量等於集羣的reducer任務容量。在這種情況下,運行一個mapreduce作業,然後拆分文件,然後運行另一個mapreduce作業並不適合作爲解決方案。 – TheHat 2012-01-02 11:16:10