Mesos上でSparkを実行

注意: Apache Mesos サポートは Apache Spark 3.2.0 の時点で非推奨です。将来のバージョンで削除されるでしょう。

SparkはApache Mesosで管理されるハードウェアクラスタ上で実行することができます。

SparkをMesosと一緒にデプロイする利点には以下が含まれます:

セキュリティ

認証のようなセキュリティ機能はデフォルトでは有効にされていません。インターネットや信頼できないネットワークに開かれたクラスタを配備する場合、認証されていないアプリケーションをクラスタ上で実行することを防ぐためにクラスタへのアクセスを安全にすることが重要です。Sparkを実行する前にSpark セキュリティとこのドキュメントの特定のセキュリティの章を見てください。

どうやって動くか

スタンドアローンクラスター配備の場合、以下の図のクラスタマネージャーはSparkマスターインスタンスです。Mesosを使う場合は、MesosマスターはクラスターマネージャーとしてSparkマスターを置き換えます。

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をソースからインストールするには、これらのステップに従います:

  1. Mesosのリリースを mirrorからダウンロードします。
  2. Mesosをコンパイルおよびインストールするには Mesosの開始 ページに従います。

注意: Mesosをシステムのデフォルトのパスにインストールすること無しにMesosを実行したい場合(例えば、インストールするための管理権限が無い)、どこにインストールするかを教えるために--prefix オプションを configure に渡します。例えば、--prefix=/home/me/mesosを渡します。出悪fるとでは、prefixは/usr/localです。

サードパーティパッケージ

Apache Mesosプロジェクトはバイナリパッケージではなく、ソースリリースのみで公開しています。しかし他のサードパーティプロジェクトはMesos設定に役立つかも知れないバイナリリリースを公開しています。

それらの一つが Mesosphere です。Mesosphereによって提供されるバイナリリリースを使ってMesosをインストールするには:

  1. downloads pageからMesosインストレーションパッケージをダウンロードします。
  2. インストレーションと設定はそれらの指示に従ってください。

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.principalspark.mesos.secret の値を直接Spark設定の中で指定することです。別のやり方として、代わりにspark.mesos.principal.filespark.mesos.secret.fileを指定することで間接的にそれらの値を指定することができます。これらの設定はプリンシパルと秘密鍵を含むファイルを示します。これらのファイルはUTF-8エンコーディングの平文ファイルでなければなりません。適切なファイルの所有とモード/ACLの組み合わせにより、これはこれらの証明書を指定するより安全な方法を提供します。

更に、もし環境変数を使うことを好む場合は、上の全てを環境変数を使って指定することができます。環境変数の名前は単純に._で置き換えた大文字の設定です。例えば、SPARK_MESOS_PRINCIPAL

認定の仕様の優先順

証明書を取得する複数の方法を指定する場合、以下の優先順位が適用されることに注意してください。Sparkは最初に見つけた有効な値を使い、それ以降の値は無視されるでしょう:

同じ順番が証明書についても適用されます。特に間接的にファイルよって指定するより指定することを好みます。構成設定が環境変数より使われることを好みます。

Secure ソケット上で実行中の Mesos へのデプロイ

セキュアモードで実行されている Mesos クラスタに Spark アプリケーションを配備する場合は、幾つかの環境変数を設定する必要があります。

全てのオプションは 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パッケージを使うには:

  1. Sparkの ダウンロードページからSparkバイナリパッケージをダウンロードします。
  2. 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スクリプトを使ってパッケージを作成する必要は無いでしょう。

  1. ここの説明を使ってSparkをダウンロードおよびビルドする。
  2. ./dev/make-distribution.sh --tgzを使ってバイナリパッケージを作成する。
  3. 圧縮ファイルを 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の中に幾つかの設定を必要とします:

  1. 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>.
  2. また spark.executor.uri<URL of spark-3.2.1.tar.gz> に設定します。

これでクラスタに対してSparkアプリケーションを開始する場合に、SparkContextを作成する時にmesos:// URLをマスターとして渡します。例えば:

val conf = new SparkConf()
  .setMaster("mesos://HOST:5050")
  .setAppName("My app")
  .set("spark.executor.uri", "<path to spark-3.2.1.tar.gz uploaded above>")
val sc = new SparkContext(conf)

(spark-submit を使い、conf/spark-defaults.conf ファイル内のspark.executor.uri を設定することもできます。)

シェルを実行する場合には、spark.executor.uri パラメータがSPARK_EXECUTOR_URIから継承されるため、システムプロパティとして重複して渡す必要はありません。

./bin/spark-shell --master mesos://host:5050

クラスターモード

Mesos上のSparkもクラスタモードをサポートします。ドライバはクラスタ内で起動され、クライアントはドライバの結果をMesos Web UIから見つけることができます。

クラスタモードを使うには、クラスタ内でMesosClusterDispatchersbin/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上で見ることができます。

例えば:

./bin/spark-submit \
  --class org.apache.spark.examples.SparkPi \
  --master mesos://207.184.161.138:7077 \
  --deploy-mode cluster \
  --supervise \
  --executor-memory 20G \
  --total-executor-cores 100 \
  http://path/to/examples.jar \
  1000

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 は以下の設定変数に応じて調整されます:

詳細とデフォルト値については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に設定します。

conf.set("spark.mesos.coarse", "false")

mesosのリソースが提供する制限に基づいた属性を設定するためにspark.mesos.constraintsも利用したいかも知れません。デフォルトでは、提供される全てのリソースが使われるでしょう。

conf.set("spark.mesos.constraints", "os:centos7;us-east-1:false")

例えば、spark.mesos.constraintsos: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.forcePullImagetrue にすることができます。画像の強制取り出しは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.enabledtrueに設定して、$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|executor].secret.values property, to make the secret available in the driver or executors.R例えば、ドライバのプロセスに秘密鍵のパスワード "guessme" を利用可能にするには、以下を設定します:

spark.mesos.driver.secret.values=guessme

(2) リファレンスによって秘密ストアに置かれた秘密鍵を指定するには、spark.mesos.[driver|executor].secret.names プロパティを設定することで秘密ストア内にその名前を指定します。例えば、ドライバのプロセスに秘密ストア内の "guessme" という名前の秘密鍵を利用可能にするには、以下を設定します:

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|executor].secret.envkeys プロパティを設定します。秘密鍵はドライバあるいはexecutor内で指定された名前を持つ環境変数として現れるでしょう。例えば、$PASSWORDとしてドライバ プロセスで利用可能な秘密鍵を作成するには、以下を設定します:

spark.mesos.driver.secret.envkeys=PASSWORD

(2) ファイルベースの秘密鍵を作成するには、spark.mesos.[driver|executor].secret.filenames プロパティを設定します。秘密鍵はドライバあるいはexecutor内で指定された名前を持つファイルの内容に現れるでしょう。例えばドライバプロセス内で "pwdfile" という名前のファイル内で利用可能な秘密鍵を作成するには、以下を設定します:

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

トラブルシューティングとデバッグ

デバッグの際に見るべき幾つかの場所があります:

そして共通の落とし穴:

TOP
inserted by FC2 system