環境
- Apache Zeppelin 0.9.0-preview1
- macOS 10.15
- Docker(docker-compose)
- Spark 2.4.4
- Scala
留意点
- 試した環境が、preview1 ということなので、変更されるかもしれません。
概要
- 単体のSparkで、最大のCPU、メモリを使うことができていたので、Zeppelin on Docker 環境でも実現したいと思いました。
- 直感で Zeppelin - interpreter - Spark の項目を設定してみたのですが、反映されないように感じました。
- 公式サイトとコードを読みながら、試行錯誤して目的を達成しました(正確性の保証はございません)。
私が試して成功した方法
CPUの使用コア数の設定方法
方法1「Zeppelinの設定画面を利用する」
- dockerが利用するCPUコア数を設定します。
- http://localhost:8080/#/interpreter から設定する
- Interpreters - Spark - propaties に spark.master=local[*] を新規に追加
- Interpreters - Spark - propaties に spark.cores.max=16 を新規に追加(なくても良さそうです)
方法2「環境変数を設定する」
- dockerが利用するCPUコア数を設定します。
- 環境変数 ZEPPELIN_INTP_JAVA_OPTS に'-Dspark.master=local[*]'を設定します。アスタリスクはコア数の指定で、アスタリスクにすると最大値になります。
- 環境変数は、/zeppelin/conf/zeppelin-env.sh で設定できるようです(他の設定項目が列挙されているので、読むと勉強になります)。
- 以下の例は、docker-compose.yml です。
environment:
ZEPPELIN_INTP_JAVA_OPTS: '-Dspark.cores.max=16 -Dspark.master=local[*]'
メモリの設定
- dockerが利用するメモリ量を設定します。
- Zeppelin - Interpreter - Spark でメモリ関連の設定をします。
- 環境変数 ZEPPELIN_INTP_MEM で JVM が使用するメモリについて設定します。
- 以下に docker-compose.yml の設定例を示します。
- 環境変数の設定は、/zeppelin/conf/zeppelin-env.sh でもできるようです。
environment:
ZEPPELIN_INTP_MEM: '-Xms2g -Xmx16g'
JVM メモリ利用量の設定
オプション | 意味 |
---|---|
-Xms | 起動時に確保するメモリ |
-Xmx | メモリの最大値 |
The flag Xmx specifies the maximum memory allocation pool for a Java virtual machine (JVM), while Xms specifies the initial memory allocation pool.
Executorsの確認(CPUとメモリの割り当ての確認)
Spark Contextの設定値の確認
方法1「設定値の確認方法」
方法2「API呼び出し」
// 全ての設定
spark.sparkContext.getConf.getAll.foreach(println)
// spark.masterの設定
println(spark.sparkContext.getConf.get("spark.master"))