Hadoop でDBOutputFormatを使用する場合、最終結果が MySql データベースに移動するとします。Hadoop は、結果を書き込む必要があるたびに個別の接続を作成しますか? (オープン接続が多すぎるとDBに負担がかかります)。私はその形式を使用したことがないので、同じことについての提案は受け入れられます。Sqoopよりもパフォーマンスが優れていますか? Sqoop を使用して、出力ファイルを DB にエクスポートすることもできます。あなたの意見を共有してください。
1133 次
1 に答える
4
Cloudera のこのブログ投稿で見つけた説明を次に示します。
DBOutputFormat は、各レデューサーで一連の INSERT ステートメントを生成することにより、データベースに書き込みます。次に、レデューサーの close() メソッドがそれらを一括トランザクションで実行します。いくつかの削減タスクからこれらを同時に多数実行すると、データベースが圧倒される可能性があります。非常に大量のデータをエクスポートする場合は、INSERT ステートメントをテキスト ファイルに生成し、データベースが提供する一括データ インポート ツールを使用してデータベース インポートを実行することをお勧めします。
そのため、個々のレデューサーは 1 つの接続しか開かないように見えるため、データベースで開いている接続が多すぎることはないでしょうが、それでもパフォーマンスの問題が発生する可能性があります。確かなことはわかりませんが、おそらく Sqoop の方がわずかに効率的で堅牢です。
于 2012-09-18T23:10:32.583 に答える