Mesos上でSparkを実行
- セキュリティ
- どうやって動くか
- Mesosのインストール
- SparkをMesosに接続
- Mesos 実行モード
- MesosのDocker サポート
- Hadoopと一緒に実行
- Mesosを使った動的なリソースの割り当て
- 設定
- トラブルシューティングとデバッグ
注意: Apache Mesos サポートは Apache Spark 3.2.0 の時点で非推奨です。将来のバージョンで削除されるでしょう。
SparkはApache Mesosで管理されるハードウェアクラスタ上で実行することができます。
SparkをMesosと一緒にデプロイする利点には以下が含まれます:
- Sparkと他のフレームワークの間の動的なパーティション
- Sparkの複数のインスタンス間のパーティションのスケール
セキュリティ
認証のようなセキュリティ機能はデフォルトでは有効にされていません。インターネットや信頼できないネットワークに開かれたクラスタを配備する場合、認証されていないアプリケーションをクラスタ上で実行することを防ぐためにクラスタへのアクセスを安全にすることが重要です。Sparkを実行する前にSpark セキュリティとこのドキュメントの特定のセキュリティの章を見てください。
どうやって動くか
スタンドアローンクラスター配備の場合、以下の図のクラスタマネージャーはSparkマスターインスタンスです。Mesosを使う場合は、MesosマスターはクラスターマネージャーとしてSparkマスターを置き換えます。
ドライバーがジョブを生成しスケジューリングのためのタスクの発行を開始する場合は、Mesosはどのマシーンがどのタスクを処理するかを決定します。これらの多くの短時間のタスクをスケジュールする場合他のフレームワークを考慮に入れるため、リソースの静的なパーティションの助け無しに複数のフレームワークが同じクラスタ上で共存することができます。
開始するには、MesosをインストールしMesosを使ってSparkジョブをデプロイするには以下のステップに従います。
Mesosのインストール
Spark 3.2.1 はMesos 1.0.0 以上と一緒に使うように設計され、Mesosのどのような特別なパッチも必要としません。ファイルと環境に基づいた秘密鍵のサポートはMesos 1.3.0 以降を必要とします。
既に実行中のMesosクラスタがある場合は、このMesosインストールステップをスキップすることができます。
そうでなければ、SparkのためのMesosのインストールは他のフレームワークによって使われるMesosのインストールと変わりません。Mesosをソースからあるいはprebuiltパッケージのどちらかからインストールすることができます。
ソースから
Apache Mesosをソースからインストールするには、これらのステップに従います:
注意: Mesosをシステムのデフォルトのパスにインストールすること無しにMesosを実行したい場合(例えば、インストールするための管理権限が無い)、どこにインストールするかを教えるために--prefix
オプションを configure
に渡します。例えば、--prefix=/home/me/mesos
を渡します。出悪fるとでは、prefixは/usr/local
です。
サードパーティパッケージ
Apache Mesosプロジェクトはバイナリパッケージではなく、ソースリリースのみで公開しています。しかし他のサードパーティプロジェクトはMesos設定に役立つかも知れないバイナリリリースを公開しています。
それらの一つが Mesosphere です。Mesosphereによって提供されるバイナリリリースを使ってMesosをインストールするには:
- downloads pageからMesosインストレーションパッケージをダウンロードします。
- インストレーションと設定はそれらの指示に従ってください。
Mesosphere インストレーションの文章は、Mesosマスターフェイルオーバーを処理するためにZooKeeperのセットアップを提案します。しかしMesosは単一のマスターを使ってZooKeeper無しに実行することもできます。
検証
MesosクラスタがSparkの準備ができていることを確認するために、ポート :5050
のMesosマスターweb UIに行き、すべての期待しているマシーンがagentタブ内に存在することを確認します。
SparkをMesosに接続
SparkからMesosを使うには、Mesosからアクセス可能な場所にSparkバイナリパッケージと、Mesosに接続するように設定されたSparkドライバプログラムが必要です。
代わりに、全てのMesos agent内の同じ場所にSparkをインストールし、spark.mesos.executor.home
(SPARK_HOMEのデフォルト) がその場所を示すように設定することもできます。
Mesosの認証
Mesosフレームワークの認証が有効な場合、MesosへSparkを認証するためのプリンシパルと秘密鍵を提供する必要があります。各Sparkジョブは別個のフレームワークとしてMesosと一緒に登録するでしょう。
配備環境に応じて、全てのユーザに渡って共有されるフレームワークの証明書の1つのセットを作成するか、各ユーザについてフレームワークの証明書を作成したいとお思うかもしれません。フレームワークの証明書を作成および管理はMesosの認証ドキュメントに従って行われなければなりません。
フレームワークの証明書は配備環境とセキュリティの要求に依存して様々な方法で指定されるかもしれません。最も簡単な方法はspark.mesos.principal
と spark.mesos.secret
の値を直接Spark設定の中で指定することです。別のやり方として、代わりにspark.mesos.principal.file
と spark.mesos.secret.file
を指定することで間接的にそれらの値を指定することができます。これらの設定はプリンシパルと秘密鍵を含むファイルを示します。これらのファイルはUTF-8エンコーディングの平文ファイルでなければなりません。適切なファイルの所有とモード/ACLの組み合わせにより、これはこれらの証明書を指定するより安全な方法を提供します。
更に、もし環境変数を使うことを好む場合は、上の全てを環境変数を使って指定することができます。環境変数の名前は単純に.
を_
で置き換えた大文字の設定です。例えば、SPARK_MESOS_PRINCIPAL
。
認定の仕様の優先順
証明書を取得する複数の方法を指定する場合、以下の優先順位が適用されることに注意してください。Sparkは最初に見つけた有効な値を使い、それ以降の値は無視されるでしょう:
spark.mesos.principal
構成設定SPARK_MESOS_PRINCIPAL
環境変数spark.mesos.principal.file
構成設定SPARK_MESOS_PRINCIPAL_FILE
環境変数
同じ順番が証明書についても適用されます。特に間接的にファイルよって指定するより指定することを好みます。構成設定が環境変数より使われることを好みます。
Secure ソケット上で実行中の Mesos へのデプロイ
セキュアモードで実行されている Mesos クラスタに Spark アプリケーションを配備する場合は、幾つかの環境変数を設定する必要があります。
LIBPROCESS_SSL_ENABLED=true
SSL 通信を有効にしますLIBPROCESS_SSL_VERIFY_CERT=false
SSL 証明書を検証しますLIBPROCESS_SSL_KEY_FILE=pathToKeyFile.key
キーへのパスLIBPROCESS_SSL_CERT_FILE=pathToCRTFile.crt
使用する証明書ファイル
全てのオプションは http://mesos.apache.org/documentation/latest/ssl/ にあります
次に、以下のクライアントモードあるいはクラスタモードで説明されるように、送信が行われます。
Sparkパッケージのアップロード
Mesosが初めてMesos agent上でタスクを実行する場合、agentはSpark Mesos executor バックエンドを実行するためにSparkバイナリパッケージを持つ必要があります。Sparkパッケージはhttp://
を使ったHTTP、s3n://
を使ったAmazon Simple Storage Serviceあるいはhdfs://
を使ったHDFSを含む、どのようなHadoopでアクセス可能なURIでホストすることができます。
precompileパッケージを使うには:
- Sparkの ダウンロードページからSparkバイナリパッケージをダウンロードします。
- hdfs/http/s3 にアップロードします
HDFS上でホストするには、Hadoop fs put コマンドを使用します: hadoop fs -put spark-3.2.1.tar.gz /path/to/spark-3.2.1.tar.gz
あるいは、Sparkの独自コンパイルバージョンを使っている場合は、Sparkソースの tarball/checkoutに含まれるdev/make-distribution.sh
スクリプトを使ってパッケージを作成する必要は無いでしょう。
- ここの説明を使ってSparkをダウンロードおよびビルドする。
./dev/make-distribution.sh --tgz
を使ってバイナリパッケージを作成する。- 圧縮ファイルを http/s3/hdfs にアップロードする
MesosマスターURLの使用
MesosのマスターURLは、一つのマスターのMesosクラスタについては mesos://host:5050
、ZooKeeperを使った複数マスターのMesosクラスタについては mesos://zk://host1:2181,host2:2181,host3:2181/mesos
の形式です。
クライアントモード
クライアントモードでは、Spark Mesosフレームワークは直接クライアントマシーン上で起動され、ドライバ出力を待ちます。
ドライバーはMesosと適切にやり取りするためにspark-env.sh
の中に幾つかの設定を必要とします:
spark-env.sh
の中で幾つかの環境変数を設定します:export MESOS_NATIVE_JAVA_LIBRARY=<path to libmesos.so>
. このパスは一般的には<prefix>/lib/libmesos.so
で、デフォルトではprefixが/usr/local
です。上のMesosインストレーションの説明を見てください。Mac OS X上では、libmesos.so
の代わりにlibmesos.dylib
ライブラリが呼ばれます。export SPARK_EXECUTOR_URI=<URL of spark-3.2.1.tar.gz uploaded above>
.
- また
spark.executor.uri
を<URL of spark-3.2.1.tar.gz>
に設定します。
これでクラスタに対してSparkアプリケーションを開始する場合に、SparkContext
を作成する時にmesos://
URLをマスターとして渡します。例えば:
(spark-submit
を使い、conf/spark-defaults.conf ファイル内のspark.executor.uri
を設定することもできます。)
シェルを実行する場合には、spark.executor.uri
パラメータがSPARK_EXECUTOR_URI
から継承されるため、システムプロパティとして重複して渡す必要はありません。
クラスターモード
Mesos上のSparkもクラスタモードをサポートします。ドライバはクラスタ内で起動され、クライアントはドライバの結果をMesos Web UIから見つけることができます。
クラスタモードを使うには、クラスタ内でMesosClusterDispatcher
を sbin/start-mesos-dispatcher.sh
スクリプトを使って開始し、MesosマスターURL(例えば mesos://host:5050)を渡さなければなりません。これはMesosClusterDispatcher
をホスト上で実行するデーモンとして開始します。MesosClusterDispatcher
は認証をサポートしないことに注意してください。それにアクセスする全てのネットワークが保護されるようにしなければなりません (デフォルトではポート 7077)。
Mesosプロキシ設定プロパティを設定することで (mesos version >= 1.4 が必要です) --conf spark.mesos.proxy.baseURL=http://localhost:5050
ディスパッチャーを起動する時に各ドライバのためのmesosサンドボックスURIがmesosディスパッチャーUIに追加されます。
Marathonを使ってMesosClusterDispatcher
を実行したい場合は、フォアグラウンドで MesosClusterDispatcher
を実行する必要があります (つまり: ./bin/spark-class org.apache.spark.deploy.mesos.MesosClusterDispatcher
)。MesosClusterDispatcher
はまだHAのための複数のインスタンスをサポートしていません。
MesosClusterDispatcher
もZookeeperへの回復状態の書き込みをサポートします。これによりMesosClusterDispatcher
は再起動時に全てのサブミットされ実行中のコンテナを回復することができます。この回復モードを有効にするために、spark.deploy.recoveryMode
と関係する spark.deploy.zookeeper.* 設定を設定することで、SPARK_DAEMON_JAVA_OPTS を設定することができます。これらの設定についての詳しい情報は設定ドキュメントを参照してください。
spark-env内の環境変数SPARK_DAEMON_CLASSPATHを設定することで、MesosClusterDispatcher
に必要とされる任意の追加のjarをクラスパスに指定することもできます。
クライアントからは、spark-submit
を実行し、マスターURLをMesosClusterDispatcher
のURL(例えば: mesos://dispatcher:7077)に指定することで、ジョブをサブミットすることができます。ドライバの状態をSpark クラスターWeb UI上で見ることができます。
例えば:
Sparkドライバーは自動的にローカルのjarをアップロードしないため、spark-submitに渡されるjarあるいはphtyonファイルはMesos agentによってアクセス可能なURLでなければならないことに注意してください。
Mesos 実行モード
Mesos上でSparkは2つのモードで実行することができます: "coarse-grained" (デフォルト) および "fine-grained"(非推奨)。
Coarse-Grained
"coarse-grained" モードでは、Sparkの各executorは単一のMesosタスクとして実行します。Sparkのexecutors は以下の設定変数に応じて調整されます:
- Executor メモリ:
spark.executor.memory
- Executor コア:
spark.executor.cores
- executorsの数:
spark.cores.max
/spark.executor.cores
詳細とデフォルト値についてはSpark設定 ページを見てください。
アプリケーションが開始すると、executorは熱心にspark.cores.max
に到達するまで起動されます。spark.cores.max
を設定しない場合、SparkアプリケーションはMesosによって提供される全てのリソースを消費しようとします。そのため、同時実行の複数のSparkアプリケーションを含めてどのような種類のマルチテナントのクラスターでもこの変数を設定することをもちろん強くお勧めします。
スケジューラはMesosの勧めでround-robinでexecutorを開始するでしょうが、Mesosは提供ストリーム上でそのような保証を提供しないため、拡散の保証はありません。
このモードでは、Sparkのexecutorはユーザから提供されたport割り当てのようなものは喜んで引き受けるでしょう。特に、もしユーザがSpark設定の中でspark.blockManager.port
を定義した場合、mesosスケジューラはポート番号を含む有効なポートの範囲のための利用可能な申し出をチェックするでしょう。そのような範囲が利用可能では無い場合、タスクを起動しないでしょう。ユーザによってポート番号に押し付けの制限が無い場合、いつものように短命ポートが使われます。もしユーザがポートを定義する場合、このポートの引き受けの実装はホストあたりに1つのタスクを意味します。将来、ネットワークの隔離がサポートされるべきです。
coarse-grained モードでの恩恵は、アプリケーションの完了までの時間についてMesosリソースを保持する犠牲の上で、スタートアップ時のオーバーヘッドが少ないことです。リソースの要求に動的に適合するようにジョブを設定するためには、動的割り当てを調べてください。
Fine-Grained (非推奨)
注意: Fine-grained モードはSpark 2.0.0の時点で非推奨です。その恩恵のいくつかについては、動的割り当てを使って考えてください。完全な説明はSPARK-11857を見てください。
"fine-grained"モード(デフォルト)では、Spark executor内の各Sparkタスクは個別のMesosタスクとして実行されます。これにより、Sparkの複数のインスタンス(と他のフレームワーク)は、とても良い粒度でコアを共有することができ、各アプリケーションはコアをより多くあるいは少なく取ることができますが、各タスクの起動の追加のオーバーヘッドがあります。このモードは、対話的な問い合わせあるいはwebアプリケーションの提供のようなレイテンシの低い要求には適切ではないかも知れません。
fine-grainedでのSparkのタスクは終了した時にコアを破棄しますが、JVMはメモリをオペレーティングシステムに戻さないため、メモリを破棄しないだろうことに注意してください。executorの仕事が無い場合にもexecutorは終了しないでしょう。
fine-grained モードで実行するには、SparkConf内の spark.mesos.coarse
プロパティをfalseに設定します。
mesosのリソースが提供する制限に基づいた属性を設定するためにspark.mesos.constraints
も利用したいかも知れません。デフォルトでは、提供される全てのリソースが使われるでしょう。
例えば、spark.mesos.constraints
が os:centos7;us-east-1:false
に設定された場合、これらの制約に合うかどうかを見るためにリソースがチェックされ、その場合にのみ新しいexecutorを開始するために受け付けられるでしょう。
ドライバのタスクが実行される場所を制約するには、spark.mesos.driver.constraints
を使います
MesosのDocker サポート
SparkはSparkConf内のspark.mesos.executor.docker.image
プロパティを設定することで、Mesos Docker containerizer を使うことができます。
Dockerイメージは既にイメージの一部であるSparkの適切なバージョンを持たなければなりません。あるいは通常の方法を使ってMesosダウンロードのSparkを持つことができます。
必要なMesosのバージョンは 0.20.1 以上です。
デフォルトではMesosエージェントは画像がエージェント上にまだ無い場合は画像を取りださないことに注意してください。複数のイメージタグを使う場合は、executorを実行する前にエージェントがイメージを常に取り出すように強制するためにspark.mesos.executor.docker.forcePullImage
をtrue
にすることができます。画像の強制取り出しはMesosバージョン 0.22以上でのみ利用可能です。
Hadoopと一緒に実行
SparkおよびMesosをそれらを別個のサービスとしてマシーン上で起動するだけで、既存のHadoopクラスタ上で実行することができます。HadoopデータにSparkからアクセスするには、完全な hdfs://
URL が必要です(一般的には hdfs://<namenode>:9000/path
)。しかし、Hadoop Namenode web UI上でその正しいURLを見つけることができます。
更に、より良いリソースの隔離および二者間の共有のために、Mesos上のHadoop MapReduceを実行することもできます。この場合、各ノード上のLinuxスケジューラを使ってリソースを共有するのとは逆に、MesosはHadoopあるいはSparkのどちらかにコアを割り当てる統一されたスケジューラとして振る舞うでしょう。Mesos上のHadoopを参照してください。
いずれの場合も、HDFSはMesosを使ってスケジュールされること無しにHadoop MapReduceとは別個に実行します。
Mesosを使った動的なリソースの割り当て
Meosはcoarse grainモードでのみ動的割り当てをサポートします。これはアプリケーションの統計に基づいてexecutorの数を変更します。一般的な情報については動的なリソースの割り当てを見てください。
使用する外部のシャッフルサービスはMesosシャッフルサービスです。Mesosはまだ他のフレームワークの終了の通知をサポートしないため、シャッフルサービス上でシャッフルデータの掃除の機能を提供します。起動するには、全てのagentノード上でspark.shuffle.service.enabled
をtrue
に設定して、$SPARK_HOME/sbin/start-mesos-shuffle-service.sh
を実行します。
これはユニークなホストの制限有りでMarahonと以下のコマンドを使ってすることもできます:./bin/spark-class org.apache.spark.deploy.mesos.MesosExternalShuffleService
.
設定
Sparkの設定の情報については 設定ページを見てください。以下の設定はMesos上でSparkのために固有のものです。
Sparkのプロパティ
プロパティ名 | デフォルト | 意味 | これ以降のバージョンから |
---|---|---|---|
spark.mesos.coarse |
true |
true に設定すると、"coarse-grained"共有モードのMesosクラスタ上で実行します。Sparkは各マシーン上で一つだけ長く続くMesosタスクを獲得します。false に設定すると、"fine-grained"共有モードで実行します。Sparkのタスクごとに1つのMesosタスクが生成されます。'Mesos Run Modes'で詳述します。
|
0.6.0 |
spark.mesos.extra.cores |
0 |
executorが通知する余分な数のコアを設定します。これはより多くのコアが割り当てられる結果にはなりません。そうではなく、executorがもっとコアを持っている"振りをする"ことを意味し、ドライバーはもっと多くのタスクを送信するでしょう。並行度を増やすためにこれを使います。この設定は Mesos coarse-grained モードのためのみに使われます。 | 0.6.0 |
spark.mesos.mesosExecutor.cores |
1.0 |
(Fine-grained モードのみ) 各Mesos executorに渡されるコアの数これはSparkタスクを実行するために使われるコアを含みません。言い換えると、Sparkのタスクが実行されていない場合、各Mesos executorはここで設定されたコアの数を占有するでしょう。値は浮動小数でありえます。 | 1.4.0 |
spark.mesos.executor.docker.image |
(none) |
Spark executorが中で実行されるdockerイメージの名前を設定する。選択されたイメージはSparkがインストールされていなければならず、Mesosライブラリのバージョンと互換性がなれければなりません。イメージ内のSparkのインストールされたパスはspark.mesos.executor.home で指定することができます; Mesosライブラリがインストールされたパスはspark.executorEnv.MESOS_NATIVE_JAVA_LIBRARY で指定することができます。
|
1.4.0 |
spark.mesos.executor.docker.forcePullImage |
false |
Mesos エージェントがspark.mesos.executor.docker.image で指定されたイメージを強制的に取り出すようにします。デフォルトでは、Mesosエージェントはすでにキャッシュしているイメージを取り出さないでしょう。
|
2.1.0 |
spark.mesos.executor.docker.parameters |
(none) |
dockerコンテナ化を使ってMesos上でSparkのexecutorを起動する場合、docker run コマンドに渡されるだろう独自のパラメータのリストを設定します。このプロパティの形式はキー/値のペアのカンマ区切りのリストです。例:
key1=val1,key2=val2,key3=val3 |
2.2.0 |
spark.mesos.executor.docker.volumes |
(none) |
Dockerイメージがマウントされるだろうボリュームのリストを設定します。これは spark.mesos.executor.docker.image を使って設定されました。このプロパティのフォーマットは docker run -v に渡される以下のマッピング形式のカンマ区切りです。つまり、それらは以下の形式を取ります:
[host_path:]container_path[:ro|:rw] |
1.4.0 |
spark.mesos.task.labels |
(none) | 各タスクに追加するMesosのラベルを設定します。ラベルはキー-値のペアの自由形式です。キー-値のペアはコロンで区切られ、1つ以上をリスト化するためにカンマが使われるべきです。もしラベルがコロンあるいはカンマを含む場合、バックスラッシュを使ってエスケープすることができます。例key:value,key2:a\:b. | 2.2.0 |
spark.mesos.executor.home |
ドライバー側 SPARK_HOME |
Mesos内のexecutor状にインストールされているSparkのディレクトリを設定します。デフォルトでは、executorは単純にドライバーのSparkホームディレクトリを使うでしょう。これはexecutorには見えないかも知れません。Spark バイナリパッケージが spark.executor.uri を使って指定されない場合にのみ関係することに注意してください。
|
1.1.1 |
spark.mesos.executor.memoryOverhead |
最小384 の executor memoriy * 0.10。 |
追加のメモリのMiBで指定される量で、executorごとに割り当てられます。デフォルトでは、全体が384あるいはspark.executor.memory の10%のどちらかでしょう。設定されている場合、最終のオーバーヘッドがこの値になるでしょう。
|
1.1.1 |
spark.mesos.driver.memoryOverhead |
最小384で、driver memory * 0.10 |
追加のメモリのMBで指定される量で、ドライバごとに割り当てられます。デフォルトでは、全体が384あるいはspark.driver.memory の10%のどちらかでしょう。設定されている場合、最終のオーバーヘッドがこの値になるでしょう。クラスタモードだけに適用されます。
|
|
spark.mesos.uris |
(none) | Mesosによってドライバーあるはexecutorが起動された場合に、sandboxにダウンロードされるカンマ区切りのURIのリスト。これはcoarse-grainedおよびfine-grainedモードの両方に適用されます。 | 1.5.0 |
spark.mesos.principal |
(none) | SparkがMesosを使って認証する場合に使われる原則を設定します。これを環境変数 `SPARK_MESOS_PRINCIPAL` を使って指定することもできます。 | 1.5.0 |
spark.mesos.principal.file |
(none) | SparkフレームワークがMesosを使って認証する場合に使われるプリンシパルを含むファイルを設定します。もっと安全に考慮した配備で間接的にプリンシパルを指定することができます。ファイルはジョブを開始するユーザに読み込み可能で、UTF-8エンコードされた平文でなければなりません。これを環境変数 `SPARK_MESOS_PRINCIPAL_FILE` を使って指定することもできます。 | 2.4.0 |
spark.mesos.secret |
(none) | SparkフレームワークがMesosを使って認証する場合に使われる秘密鍵を設定します。例えばレジストリを使った認証の時に使われます。これを環境変数 `SPARK_MESOS_SECRET` を使って指定することもできます。 | 1.5.0 |
spark.mesos.secret.file |
(none) | SparkフレームワークがMesosを使って認証する場合に使われる秘密鍵を含むファイルを設定します。例えばレジストリを使った認証の時に使われます。もっと安全に考慮した配備で間接的に秘密鍵を指定することができます。ファイルはジョブを開始するユーザに読み込み可能で、UTF-8エンコードされた平文でなければなりません。これを環境変数 `SPARK_MESOS_SECRET_FILE` を使って指定することもできます。 | 2.4.0 |
spark.mesos.role |
* |
このSparkフレームワークがMesosで果たす役割を設定します。役割は、Mesosの中で予約およびリソースの重み付け共有のために使われます。 | 1.5.0 |
spark.mesos.constraints |
(none) |
mesosのリソース上の制限に基づく属性を提供します。デフォルトでは、提供される全てのリソースが使われるでしょう。この設定はexecutorのみに提供されます。属性についての詳細は情報は Mesos 属性 & リソース を参照してください。
|
1.5.0 |
spark.mesos.driver.constraints |
(none) |
ディスパッチャーを使って起動された場合ドライバに適用される以外はspark.mesos.constraints と同じです。デフォルトでは、十分なリソースを持つ全ての申し出が受け付けられるでしょう。
|
2.2.1 |
spark.mesos.containerizer |
docker |
これはdockerコンテナにのみ影響します。"docker" あるいは "mesos" のうちの一つでなければなりません。Mesos はdockerのための二つの種類のコンテナライザーをサポートします: "docker" コンテナライザー、そして優先的な "mesos" コンテナライザー。詳しくはここを読んでください: http://mesos.apache.org/documentation/latest/container-image/ | 2.1.0 |
spark.mesos.driver.webui.url |
(none) |
フレームワークとやり取りするための Spark Mesos ドライバーの webui_url を設定します。設定しない場合は、Sparkの内部web UIを示すでしょう。 | 2.0.0 |
spark.mesos.driver.labels |
(none) |
ドライバに追加するMesosラベル。形式の情報については spark.mesos.task.labels を見てください。
|
2.3.0 |
spark.mesos.driver.secret.values ,
spark.mesos.driver.secret.names ,
spark.mesos.executor.secret.values ,
spark.mesos.executor.secret.names ,
|
(none) |
秘密鍵は、その内容と宛先によって指定されます。これらのプロパティは秘密鍵の内容を指定します。秘密鍵の宛先を指定するには、下のセルを見てください。 秘密鍵の内容を (1) 値、あるいは (2) 参照 で指定することができます。
(1) To specify a secret by value, set the spark.mesos.driver.secret.values=guessme
(2) リファレンスによって秘密ストアに置かれた秘密鍵を指定するには、 spark.mesos.driver.secret.names=password 注意: 秘密ストアを使うには、独自のSecretResolverモジュールを使ってMesosに統合されたものを使ってください。 複数の秘密鍵を指定するには、カンマ区切りのリストを提供します: spark.mesos.driver.secret.values=guessme,passwd123あるいは spark.mesos.driver.secret.names=password1,password2 |
2.3.0 |
spark.mesos.driver.secret.envkeys ,
spark.mesos.driver.secret.filenames ,
spark.mesos.executor.secret.envkeys ,
spark.mesos.executor.secret.filenames ,
|
(none) |
秘密鍵は、その内容と宛先によって指定されます。これらのプロパティは秘密鍵の宛先を指定します。秘密鍵の内容を指定するには、上のセルを見てください。 ドライバあるいはexecutor内の秘密鍵の宛先を (1) 環境変数 あるいは (2) ファイルのどちらかとして指定することができます。
(1) 環境に基づいた秘密鍵を作成するには、 spark.mesos.driver.secret.envkeys=PASSWORD
(2) ファイルベースの秘密鍵を作成するには、 spark.mesos.driver.secret.filenames=pwdfile パスはコンテナの作業ディレクトリへの相対です。絶対パスは既に存在していなければなりません。注意: ファイルベースの秘密鍵は独自のSecretResolver moduleを必要とします。 複数の秘密鍵に対応する環境変数あるいはファイル名を指定するには、カンマ区切りのリストを提供します: spark.mesos.driver.secret.envkeys=PASSWORD1,PASSWORD2あるいは spark.mesos.driver.secret.filenames=pwdfile1,pwdfile2 |
2.3.0 |
spark.mesos.driverEnv.[EnvironmentVariableName] |
(none) |
これはクラスタモードでサブミットされたドライバにのみ影響します。EnvironmentVariableName で指定された環境変数をドライバプロセスに追加します。ユーザは複数の環境変数を設定するために複数のそれらを指定することができます。 | 2.1.0 |
spark.mesos.dispatcher.webui.url |
(none) |
フレームワークとやり取りするための Spark Mesos dispatcherの webui_url を設定します。設定しない場合は、Sparkの内部web UIを示すでしょう。 | 2.0.0 |
spark.mesos.dispatcher.driverDefault.[PropertyName] |
(none) |
dispatcherを通じてサブミットされたドライバのためのデフォルトのプロパティを設定します。例えば、spark.mesos.dispatcher.driverProperty.spark.executor.memory=32g はクラスタモードにサブミットされた全てのドライバのexecutorが32g コンテナで実行するようにします。 | 2.1.0 |
spark.mesos.dispatcher.historyServer.url |
(none) |
履歴サーバのURLを設定します。dispatcher は履歴サーバ内のエントリを各ドライバにリンクします。 | 2.1.0 |
spark.mesos.dispatcher.queue |
(none) |
アプリケーションがサブミットされるディスパッチャーキューの名前を設定します。指定されたキューはspark.mesos.dispatcher.queue.[QueueName] を使ってディスパッチャーに追加されなければなりません。キューが指定されない場合、アプリケーションは0.0の優先度で"default"キューにサブミットされます。
|
3.1.0 |
spark.mesos.dispatcher.queue.[QueueName] |
0.0 |
サブミットされたドライバについての新しいキューを指定された優先度で追加します。数値が大きいほど、優先度が高くなります。ユーザは複数のキューを指定して、ディスパッチャー内のキューに入れられたドライバのワークロード管理ポリシーを指定できます。その後、ドライバはspark.mesos.dispatcher.queue を使って指定されたキューにサブミットできます。デフォルトではディスパッチャーには優先度0.0の単一のキューがあります(上書きできません)。優先キューを重み付けされたMesosロールにマッピングし、アプリケーションをサブミットする時にspark.mesos.dispatcher.queue と一緒にspark.mesos.role を指定することで、ドライバのライフサイクル全体で一貫性のある全体的なワークロードポリシーを実装できます。例えば、URGENT Mesosロールの場合:
spark.mesos.dispatcher.queue.URGENT=1.0 spark.mesos.dispatcher.queue=URGENT spark.mesos.role=URGENT |
3.1.0 |
spark.mesos.gpus.max |
0 |
このジョブのために取得するGPUリソースの最大数を設定します。この設定は単なる上限であり保証では無いため、GPUリソースが無い場合でもexecutorは起動しつづけるでしょう。 | 2.1.0 |
spark.mesos.network.name |
(none) |
指定された名前のネットワークにコンテナをアタッチします。このジョブがクラスタモード内で起動された場合は、指定された名前のネットワーク内でドライバも起動します。詳細は Mesos CNI ドキュメント を見てください。 | 2.1.0 |
spark.mesos.network.labels |
(none) |
ネットワーク ラベルをCNIプラグインに渡します。これは、各キー-値ペアが キー:値 の形式を持つ、キー-値ペアのカンマ区切りのリストです。例:
key1:val1,key2:val2詳細は Mesos CNI ドキュメント を見てください。 |
2.3.0 |
spark.mesos.fetcherCache.enable |
false |
`true` に設定した場合、全てのURL (例えば: `spark.executor.uri`, `spark.mesos.uris`) は Mesos Fetcher Cacheによって捕らえられるでしょう。 | 2.1.0 |
spark.mesos.driver.failoverTimeout |
0.0 |
一時的に切断された後で、全てのexecutorをkillすることでマスターがドライバのフレームワークを破壊する前に、マスターがドライバが再接続するのを待つ総時間(秒)。デフォルト値は0で、タイムアウトが無いことを意味します: もしドライバが切断すると、マスターはすぐにフレームワークを破壊します。 | 2.3.0 |
spark.mesos.rejectOfferDuration |
120s |
使用されていないリソースが拒否されたと見なす時間、 `spark.mesos.rejectOfferDurationForUnmetConstraints`, `spark.mesos.rejectOfferDurationForReachedMaxCores` のフォールバックの役目をします。 | 2.2.0 |
spark.mesos.rejectOfferDurationForUnmetConstraints |
spark.mesos.rejectOfferDuration |
まだ対処されてない制限によって使用されていないリソースが拒否されたと見なす時間。 | 1.6.0 |
spark.mesos.rejectOfferDurationForReachedMaxCores |
spark.mesos.rejectOfferDuration |
コラの最大数 spark.cores.max に到達した時に、使用されていないリソースが拒否されたと見なす時間。
|
2.0.0 |
spark.mesos.appJar.local.resolution.mode |
host |
クラスタモードでのapp jarリソースを参照するための `local:///` スキーマのためのサポートを提供します。ユーザがローカル リソース (`local:///path/to/jar`) を使い、設定オプションが使われない場合、デフォルトは`host` です。例えば、mesosのfetcherはホストのファイルシステムからリソースを取得しようとします。もし値が不明であれば、dispatcherログに警告メッセージを出力し、デフォルトを`host` にします。値が `container` の場合、コンテナ内のspark submit はコンテナのパス内のjarを使います: `/path/to/jar`。 | 2.4.0 |
トラブルシューティングとデバッグ
デバッグの際に見るべき幾つかの場所があります:
- ポート
:5050
上のMesosマスター- agentタブにagentがなければなりません
- Sparkのアプリケーションがフレームワークタブに現れなければなりません。
- タスクがフレームワークの詳細に現れなければなりません。
- 失敗したタスクのサンドボックスの標準出力および標準エラーをチェックします。
- Mesosのログ
- マスターおよびagentのログは両方ともデフォルトでは
/var/log/mesos
の中にあります。
- マスターおよびagentのログは両方ともデフォルトでは
そして共通の落とし穴:
- Sparkのアセンブリが到達可能/アクセス可能ではありません。
- 指定した
http://
,hdfs://
あるいはs3n://
URL から agent がSparkパッケージをダウンロードできなければなりません。
- 指定した
- ファイアウォールが通信をブロックしている
- 失敗した通信についてのメッセージを調べてください。
- 一時的にデバッグのためにファイアウォールを無効にし、適切な穴を開けます。