2

30 以上のマッパーがあり、各マッパーはメモリ内マップである共通のルックアップ データを使用しています。各マッパーでは、セットアップ関数でこのルックアップ データをロードする必要があります。Hbase テーブルやいくつかの rdbms データベースでクエリと計算を行うことにより、このルックアップ データを計算します。各マッパーから同じことを行っているため、上記の共通タスクは各マッパーで 30 回実行されます。

とにかく、mapReduceジョブを送信する前にそのルックアップデータを計算してどこかに設定できるので、mappesから直接行ってその値を(メモリ構造で)取得できますか? 構成などのどこかに保存します...ルックアップの生成は重いタスクであり、これには多くの時間がかかります。

それがルックアップ ファイルだった場合、分散キャッシュを使用していましたが、その動的計算はファイルに保存されませんでした。

この一般的な問題の解決策を提案してください。

4

1 に答える 1

1

データを生成してから、分散キャッシュにリンクされたHDFSに保存することはできませんか?

使用できるもう1つのトリック(JVMの再利用を使用していて、小さなクラスターを使用している場合)は、マッパーでルックアップマップを静的にし、セットでnull以外のチェックを実行して、データのみを計算することです。そのタスクトラッカーの最初のマップインスタンスで。

于 2012-06-14T14:00:01.307 に答える