2011-12-28 16 views
3

CompositeInputFormatを使用して、ハンプジョブに入力を提供しています。Hadoopファイル分割:CompositeInputFormat:内部結合

生成される分割数は、(結合のための)CompositeInputFormatへの入力として与えられたファイルの合計数です。

ジョブはブロックサイズと最大分割サイズを完全に無視しています(CompositeInputFormatから入力を取得中)。これは長い実行中のマップタスクにつながり、入力ファイルがブロックサイズよりも大きくなるとシステムが遅くなります。

CompositeInputFormatで分割数を管理できる方法はありますか?

答えて

6

残念ながら、CompositeInputFormatはブロック/分割サイズを無視する必要があります。 CompositeInputFormatでは、入力ファイルをソートして同じように分割する必要があります。したがって、Hadoopでは、このプロパティを維持するためにファイルを分割する場所を決める方法がありません。ファイルを分割してファイルを整理しておく場所を決める方法はありません。

この問題を回避する唯一の方法は、手動でファイルを分割して分割することです。これを行うには、mapreduceジョブ(おそらくアイデンティティマッパーとアイデンティティーレデューサー)を介して大量のレデューサーでデータを渡します。同数のレデューサーで両方のデータセットを渡すようにしてください。

+0

私は既に最大数のレデューサーを使用しています。私は複数のマップ波のためのより小さいブロックサイズが必要です。現在のところ、地図のタスクが大きすぎるため、パフォーマンスの問題やタスクの失敗が発生することがあります。 – TheHat

+1

私はあなたが私が言っていることを理解しているとは思わない。問題は、CompositeInputFormatを使用しているときに入力分割によってマップタスクを分割できないことです。これを回避する方法は、ファイルを手動で分割することです。だから、あなたの大きなファイルを取り出し、小さなファイルに分割します。これを行う1つの方法は、私が第2段落で示唆していることです。ところで、減速機の最大数などはありません。 –

+0

私の入力は、別のmapreduceジョブの出力です。 mapreduceジョブによる出力ファイルの数は、使用される減速タスクの数に等しい。 Redcuerタスクの最大数は、クラスタのReduceタスク容量に等しい。このシナリオでは、1つのmapreduceジョブを実行してからファイルを分割し、別のmapreduceジョブを実行することは解決策としては当てはまりません。 – TheHat