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 をすべてのマップジョブに渡す別の方法があるかどうか疑問に思いましたか?