MapReduce1 を実行して、Hadoop クラスター (CDH4) を構成する最善の方法を見つけるのに苦労しています。ノードごとに複数のマッパーを実行できないほど大量のJavaヒープスペースを必要とする両方のマッパーを実行する必要がある状況にありますが、同時にジョブを実行できるようにしたいですノードごとに多くのマッパーの恩恵を受けることができます。
Cloudera 管理 UI を使用してクラスターを構成していますが、Max Map Tasks と mapred.map.child.java.opts はかなり静的な設定のようです。
私が望んでいるのは、毎回 MapReduce サービスを再構成する必要なく、両方の種類のジョブに対応できる、X GB を使用できるヒープ スペース プールのようなものです。1 つのマッパーを実行する場合、X GB ヒープを割り当てる必要があります。8 つのマッパーを実行する場合、X/8 GB ヒープを割り当てる必要があります。
最大仮想メモリと Cgroup メモリのソフト/ハード制限の両方を検討しましたが、どちらも希望どおりにはなりません。最大仮想メモリはタスクごとの設定であるため、有効ではありません。Cgroup の設定には問題があります。これは、個々のタスクがより多くのヒープを持っている場合に実際にはそれらをより少ない量のヒープに制限するようには見えず、むしろタスクが大量のメモリを使用してプロセスを強制終了することを許可するためです。
達成したい動作を構成できますか?