8 つのノードを持つクラスター セットアップがあり、20 GB のテキスト ファイルを mapreduce で解析しています。通常、私の目的は、マッパーによってすべての行を取得し、入力ファイルの行の列の 1 つであるキーを使用して送信することです。レデューサーがそれを取得すると、キー値に基づいて別のディレクトリに書き込まれます。例を挙げると:入力ファイル:
test;1234;A;24;49;100
test2;222;B;29;22;22
test2;0099;C;29;22;22
したがって、これらの行は次のように記述されます。
/output/A-r-0001
/output/B-r-0001
/output/C-r-0001
レデューサーで MultipleOutputs オブジェクトを使用していますが、小さなファイルを使用する場合はすべて問題ありません。しかし、20GBのファイルを使用すると、152個のマッパーと8個のリデューサーが初期化されています。マッパー側ではすべてが非常に高速に終了しますが、1 つのレデューサーが継続します。減速機の 7 つは最大 18 分で終了しますが、最後の減速機は 3 時間かかります。まず、そのレデューサーの入力が他のレデューサーよりも大きいと思われますが、そうではありません。1 つの Reducer は遅いものよりも 3 倍の入力があり、17 分で終了します。
また、reducer の数を 14 に増やそうとしましたが、これにより、さらに 2 つの遅い reduce タスクが発生しました。
多くのドキュメントをチェックしましたが、なぜこれが起こっているのかわかりませんでした。手伝ってくれませんか?
編集済み
この問題は、データセット内の一部のデータが破損していたことが原因でした。マッパー側で入力データにいくつかの厳密なチェックを行いましたが、現在は正常に機能しています。
みんなありがとう。