Hadoopのマップタスクでメモリの静的データ(RAMルーゼンインデックス)を共有したいのですか?同じJVMを複数のマップ/リダクションタスクで共有する方法はありますか?複数のマップタスクを1つのJVMで実行できますか?
答えて
ジョブでは、ジョブ構成mapred.job.reuse.jvm.num.tasksを指定することで、タスクJVMを再利用することができます。値が1(デフォルト)の場合、JVMは再利用されません(つまり、JVMごとに1つのタスク)。 -1の場合、(同じジョブの)JVMが実行できるタスクの数に制限はありません。 apiを使って1より大きい値を指定することもできます。 $HADOOP_HOME/conf/mapred-site.xml
で
#
は、JVMは、制限なしのために(デフォルトは1
である)、再利用、または-1
に設定する回数を指定する回数に設定することができ
<property>
<name>mapred.job.reuse.jvm.num.tasks</name>
<value>#</value>
</property>
次のプロパティを追加再利用量。私はあなたがここで説明するものを達成するためにJVMを再利用して静的オブジェクトを使用して上に行く
恥知らずなプラグ
: http://chasebradford.wordpress.com/2011/02/05/distributed-cache-static-objects-and-fast-setup/
別のオプション、より複雑なものの、読み出し専用メモリと分散キャッシュを使用することですマップされたファイル。そうすれば、JVMプロセス全体でリソースを共有することもできます。
複数のマップタスク(Hadoop)が静的なデータ構造を共有するための簡単な方法はありません。
これは実際に現在のMap Reduceモデルの既知の問題です。現在の実装では、マップタスク全体で静的なデータを共有しない理由は、Hadoopが高い信頼性を持つように設計されているためです。その結果、タスクが失敗した場合、タスクは自身のJVMのみをクラッシュさせます。他のJVMの実行には影響しません。
私は現在、単一のJVMの作業を複数のコアに分散できるプロトタイプを作成しています(基本的に、マルチコアを利用するためには1つのJVMが必要です)。このようにして、CPU使用率を損なうことなくメモリデータ構造の重複を減らすことができます。次のステップは、1つのJVM内で複数のMapタスクを実行できるHadoopのバージョンを開発することです。これはまさにあなたが求めているものです。
ここに興味深い記事 https://issues.apache.org/jira/browse/MAPREDUCE-2123
- 1. 複数のPCで1つのjvmを実行することはできますか?
- 2. 1つのコマンドで複数の制御ファイルを実行できますか?
- 3. TortoiseHgのコンソールで複数のコマンドを1行で実行できますか?
- 4. コードネイターで1つずつ実行できない複数のクエリを実行しています
- 5. 複数のコマンドをOracleの1つのExecuteScalarで実行する
- 6. 1つのクエリで複数のクエリを実行する方法
- 7. 1つのコマンドでFFMPEG複数のオーバーレイコマンドを実行する
- 8. 複数のクエリを1つのPHP mysqli_query関数で実行しています
- 9. JBoss ASのJVM内でMainクラスを実行できますか?
- 10. VS2010の1つのファイルでstylecopを実行できますか?
- 11. Microsoft.Practices.EnterpriseLibrary.Data:1つのトランザクションで複数のステートメントを実行
- 12. 1つのスクリプトから複数のスクリプトを実行する
- 13. boost :: asioでは、複数の実行時間で1つのdeadline_timerを使用できますか?
- 14. 1つの行から複数の行を1つの行にまとめる
- 15. 実行方法1つのファイルに対して複数の書き込みオペレーションを実行しますか?
- 16. 複数のアクションを1つずつ実行する
- 17. 複数のトリガーで1つのジョブを実行しています
- 18. 1つのWebサイトで複数のWebサービスを実行しています
- 19. 1つの検索バーから複数の検索を実行
- 20. SQLクエリは1つのクエリで実行できますか?
- 21. SpringとStrutsを同じJVMで実行できますか?
- 22. 複数のファイルを1つに縮小できますか?
- 23. mysql-複数の値でINSERT IGNOREを実行できますか?
- 24. MS Accessでは、複数のクエリを実行できますか?
- 25. 複数のマシンでF#エージェントを実行できますか?
- 26. Perl - 複数のマシン間でスレッドを実行できますか?
- 27. devicefarmの1つのプロジェクトに対して複数のテスト実行を作成できますか
- 28. 1つのtryブロックに対応する複数のcatchブロックを実行できますか?
- 29. 1つのコマンドを実行し、複数のRubyファイルを実行する
- 30. 1つのクエリで複数のテーブルの行数をカウントする
おかげで、もう一つ質問があります。これらのタスクはいくつかのクラスローダーも共有するので、すべての静的リソースは一度だけロードされますか? (あるいは、Tomcatのように動作して、JVMを共有する理由はほとんどありません...) – yura
タスクが完了すると、JVMはクリアされます。このパラメータは、jvmインスタンス化が非常に高価であるため、「長期実行」ではないジョブの実行時間を向上させます。タスクインスタンスに対してすべてのリソースを共有することはできませんでした。 –