最終更新日 2019年10月21日
HashiCorp の blog で Spark のクラスタマネージャ・スケジューラとして Nomad がネイティブに対応したという 記事 がでていました。こちらも参考程度にどうぞ。
HashiCorp Nomad 上で Apache Spark を動かす
Apache Spark は人気のデータ処理エンジン/フレームワークであり、第三者によるスケジューラを使えるような設計がされています。スケジューラは利用可能ではありましたが、複雑さのレベルが高かったため、Spark ユーザの多くにとって不快だったでしょう。この溝を埋めるため、私たちは HashiCorp Nomad エコシステムを発表します。ここに含まれる Apache Spark バージョン(a version of Apache Spark) は、Spark クラスタのマネージャとスケジューラとして Nomad をネイティブに統合します。
なぜ Nomad で Spark を?
Nomad の設計(Google の Borg と Omega から影響を受けた)は、解析アプリケーションの実行をより適切に行えるようにするための機能セットを有効化することです。特に関係があるのは バッチ・ワークロード のネイティブなサポート、並列化、 高スループットのスケジューリング (Nomad のスケジューラ内部の詳細は、 こちら をご覧ください)です。また、 Nomad はセットアップや利用が簡単であり、Spark 利用者の学習曲線と作業負担を軽減できうるでしょう。使いやすい主な機能は、次の通りです。
- バイナリ1つをデプロイするだけであり、外部の依存性が無い
- シンプルかつ双方向のデータ・モデル
- 宣言型のジョブ定義(declarative job specification)
- 高可用性のサポートと マルチ・データセンタ統合 を簡単にする
また、Nomad は HashiCorp Consul や HashiCorp Vault の サービス・ディスカバリ 、 ランタイム設定 、 シークレット管理 とシームレスに統合します。
どのように動作するのか
Nomad 上で実行すると、Spark エクゼキュータはアプリケーション用のタスクを実行します。そして(オプションで)、アプリケーション・ドライバ自身が Nomad ジョブ内で Nomad タスクを実行します。
利用者は Spark アプリケーションをこれまで通り実行(submit)できます。次の例は spark-submit
コマンドで SparkPi サンプル・アプリケーションを Nomad のクラスタ・モードで実行します。
$ spark-submit --class org.apache.spark.examples.SparkPi \
--master nomad \
--deploy-mode cluster \
--conf spark.nomad.sparkDistribution=http://example.com/spark.tgz \
http://example.com/spark-examples.jar 100
利用者は Nomad ジョブをカスタマイズできます。ジョブによって(上の例にあるような)設定プロパティの記述を明示して Spark を作成したり、開始時点でカスタム・テンプレートも用いられます。
job "template" {
meta {
"foo" = "bar"
}
group "executor-group-name" {
task "executor-task-name" {
meta {
"spark.nomad.role" = "executor"
}
env {
"BAZ" = "something"
}
}
}
}
ジョブ・テンプレート(job templates)にてはメタデータや条件(constraints)の追加、環境変数の追加が可能です。ほかにも付随タスクや Consul と Vault を統合した利用もできます。
また、Nomad/Spark 統合は粒度の高い リソース割り当て 、 HDFS 、 アプリケーション出力の 継続的監視 をサポートしています。
はじめましょう
使いはじめるには、私たちの公式 Apache Spark 統合ガイド が役立つでしょう。あるいは Nomad の Terraform 設定例 や拡張 Spark クイックスタート によって AWS 上で統合のテストが行えます。Nomad 拡張ビルドは、現時点で Spark 2.1.0 と 2.1.1 に対応しています。
原文
- Running Apache Spark on Nomad | HashiCorp