2

Hadoop ジョブでは、いくつかの XML ファイルをマッピングし、すべての要素の ID をフィルタリングしています(from < id>-tags)。ジョブを特定の ID セットに制限したいので、大きなファイル (2.7 GB で約 2 億 5000 万行、すべての行に ID として整数のみ) を読み込みます。そこで、DistributedCache を使用しsetup()、Mapper のメソッドで BufferedReader を使用してファイルを解析し、ID を HashSet に保存します。

今、仕事を始めると無数に

Task attempt_201201112322_0110_m_000000_1 failed to report status. Killing!

マップジョブが実行される前。

クラスタは 40 個のノードで構成されており、ジョブのタスクが実行される前に a のファイルがDistributedCacheスレーブ ノードにコピーされるため、大きなHashSet. 私はすでに 2000 年代に増加していmapred.task.timeoutます。もちろんもっと時間を延ばすこともできますが、実際にはこの時間で十分ですよね?

「大きな読み取り専用ファイルを効率的に配布する」方法として使用されていたためDistributedCache's、ここで失敗する原因と、関連する ID をすべてのマップジョブに渡す別の方法があるかどうか疑問に思いましたか?

4

1 に答える 1

0

いくつかのデバッグprintlnをセットアップメソッドに追加して、このメソッドでタイムアウトしていることを確認できますか(開始時間と終了時間をログに記録します)?

ブルームフィルターを使用してIDを保持することも検討してください。これらの値を50MBのブルームフィルターに偽陽性率(〜0.5%)で保存してから、セカンダリジョブを実行してパーティションチェックを実行することもできます。実際の参照ファイルに対して。

于 2012-05-17T01:35:30.080 に答える