3

cgroup が有効になっている場合、Mesos の細粒度モードでの Spark の動作はどうなるのだろうと思っていました。

1 つの懸念事項は次のとおりです。cgroup なしで Mesos+spark を使用すると、実際の spark エグゼキュータ プロセスが、Mesos に約束したよりも少なくとも 10% 多くのメモリを使用することが既に示されています。cgroup を有効にすると、Spark 実行プログラムが強制終了されますか?

次に、ファイルキャッシュはどのように処理されますか? Spark はファイルキャッシュに大きく依存しています。ファイルキャッシュはMesosのメモリ量に含まれていますか? おそらくそうではありませんが、これに影響を与えることができますか? たとえば、理想的には、Spark で合計 8GB を使用し、そのうちの 5GB を Java プロセスに使用する必要があります (Spark が適切に動作し、5GB を超えて拡大しないと仮定すると)。3GB はファイルキャッシュとして使用する必要があります (最大)。

cgroup はある時点で root 資格情報に依存しているため、これらのことを自分でテストするには、クラスターのシステム管理者から多くのサポート要求を受けなければならないため、誰かがこれを経験したことを願っています。他の人に尋ねずに無駄に。

4

1 に答える 1

0

あなたの最初の質問に答えるために、cgroup の仕組みと何かが混同されているようです。エグゼキュータは、cgroups が許可するよりも多くのメモリを割り当てることができません (そして、私が確認できるように実際にそうです)。したがって、Mesos は実際にはプロセス キラーなどとしては機能しません*。しかし、一部のタイプのプログラムは実際には、より多くのメモリを割り当てることができず、プログラムが終了するか、正常に実行できるかどうかに依存しますが、メモリやパフォーマンスが低下する可能性があります。

2 番目の質問については、実際の cgroup メモリ量に影響を与えるための構成設定はないようです。Executor のメモリ設定と Spark が Mesos から取得するものとの間には 1 対 1 のマッピングがあるようです。ただし、Spark が約 5.8 GB を要求していることがわかりますが、実際には executor メモリを 5 GB に設定しているため、隠れた要因があると思います。(ソース コードでおそらく 15% のこの隠れた要因を見つけたら、チケットを更新します。)

更新、必要な設定はspark.mesos.executor.memoryOverhead. Mesos リソースとして使用される合計メモリとしてエグゼキュータ メモリに追加されるメガバイト単位の数値を指定できます。したがって、cgroup メモリ制限として使用されます。

*=Update2、実際にはデフォルトで cgroups は、コントロール グループの制限を超えて成長するプロセスを強制終了します。memory.oom_controlinが「0」に設定されていることを確認できます/cgroups/memory/x/(これは直感に反して有効になっています)。ただし、Spark の場合、前述の 10 ~ 15% のオーバーヘッドにより、OOM に遭遇しない十分な余裕が得られます。

于 2016-06-12T13:00:31.627 に答える