Sparkノードの構成
Cassandraリアルタイム、DSE Searchなどのその他のタイプのワークロードを実行しているノードとは別に、データセンター内のSparkノードを構成します。
Sparkノードは独自のデータセンターで構成する必要があります。Cassandraノード・タイプを実行しているノードと同じデータセンターではSparkノード・タイプを実行しないでください。DSE SearchAnalyticsクラスターは、DSE Analyticsジョブ内でDSE Searchクエリーを使用できます。ワークロード分離のガイドラインに必ず従ってください。
Installer-Servicesおよびパッケージ・インストール | /etc/dse/spark/hive-site.xml |
Installer-No Servicesおよびtarボール・インストール | install_location/resources/spark/conf/hive-site.xml |
パフォーマンス
環境変数を設定する
DataStaxでは、OutOfMemoryError状態が発生しているか、ガーベージ・コレクションに時間がかかりすぎるためにメモリー設定を増やす必要がない限り、Spark環境変数のデフォルト値を使用することを推奨しています。dse.yamlファイルとspark-env.shファイルに含まれているSparkメモリー構成オプションを使用してください。
Installer-Services | /etc/dse/dse.yaml |
パッケージ・インストール | /etc/dse/dse.yaml |
Installer-No Services | install_location/resources/dse/conf/dse.yaml |
tarボール・インストール | install_location/resources/dse/conf/dse.yaml |
Installer-Servicesおよびパッケージ・インストール | /etc/dse/spark/spark-env.sh |
Installer-No Servicesおよびtarボール・インストール | install_location/resources/spark/conf/spark-env.sh |
Sparkディレクトリーを保護する
Sparkクラスターを起動すると、DataStax EnterpriseによってSpark作業ディレクトリーがワーカー・ノード上の各Sparkワーカーに対して作成されます。ワーカーノードには、spark-env.sh内のSPARK_WORKER_INSTANCESオプションによって構成されている複数のワーカーを含めることができます。SPARK_WORKER_INSTANCESが定義されていない場合は、単一のワーカーが起動します。この作業ディレクトリーは、エグゼキューターの標準出力と標準エラーをはじめ、Sparkワーカーとエグゼキューターによって格納されているアプリケーション固有のデータを含んでおり、Cassandraユーザーしか書き込めないようになっています。
デフォルトでは、Sparkの親作業ディレクトリーは/var/lib/spark/workにあり、worker-numberという名前のサブディレクトリに各ワーカーが含まれています。ここでの番号は0から始まります。親の作業ディレクトリを変更するには、spark-env.shファイルのSPARK_WORKER_DIRを構成します。
Spark RDDディレクトリーは、エグゼキューターがディスクに書き出すことを決めたRDDが配置されるディレクトリーです。このディレクトリーには、データベースからのデータやSparkアプリケーションの実行結果などが格納されます。ディレクトリー内のデータの機密性が高い場合は、無許可ユーザーによるアクセスを防ぐ必要があります。RDDディレクトリーには大量のデータが置かれる可能性があるため、RDDディレクトリーは高速ディスク上に配置します。このディレクトリーに書き込むことができるのはCassandraユーザーだけです。Spark RDDディレクトリのデフォルトの場所は/var/lib/spark/rddです。このディレクトリーは高速ディスク上に配置する必要があります。RDDディレクトリーを変更するには、spark-env.shファイルのSPARK_LOCAL_DIRSを構成します。
デフォルトのSparkディレクトリーへのアクセス権を付与する
$ sudo mkdir -p /var/lib/spark/rdd; sudo chmod a+w /var/lib/spark/rdd; sudo chown -R $USER:$GROUP /var/lib/spark/rdd
$ sudo mkdir -p /var/log/spark; sudo chown -R $USER:$GROUP /var/log/spark
複数データセンター・クラスターでは、仮想データセンターを使用してSparkジョブを分離します。実行中のSparkジョブは、リソースを消費し、レイテンシーとスループットに影響する可能性があります。
DataStax Enterpriseでは、Cassandra仮想ノード(vnode)とSparkの併用がサポートされます。
Sparkノードのセキュリティを保護する
- クライアントとノード間のSSL
- クライアントの認証が有効になっていない場合であっても、「クライアントとノード間の暗号化」に説明されているように、cassandra.yamlにトラストストアのエントリーが存在することを確認します。
- CFSのJARファイル
- JARファイルがCassandraファイル・システム(CFS)にあり、認証が有効になっている場合は、クラスター・モードでSparkアプリケーションを有効にする必要があります。
- Spark SQL Thriftサーバー用のCassandra認証情報
- hive-site.xmlファイルで、Spark SQL Thriftサーバー用のCassandra認証情報を構成します。Sparkディレクトリー内のhive-site.xmlファイルを必ず使用してください。
Installer-Servicesおよびパッケージのインストール /etc/dse/spark/hive-site.xml Installer-No Servicesおよびtarボールのインストール install_location/resources/spark/conf/hive-site.xml - Kerberos
- Kerberosオプションを設定します。
Sparkメモリーおよびコアを構成する
Sparkメモリー・オプションは、Sparkエコシステムのさまざまなコンポーネントに影響します。
- Spark HistoryサーバーとSpark Thriftサーバーのメモリー
- SPARK_DAEMON_MEMORYオプションは、spark-sql-thriftserverとhistory-serverが使用するメモリーを構成します。この設定は、これらのサーバー・アプリケーションを実行するノード上のspark-env.shファイルで追加または変更します。
- Sparkワーカー・メモリー
- SPARK_WORKER_MEMORYオプションは、1つのSparkワーカーによって特定のノードで実行される全エグゼキューターに割り当てることのできるメモリーの合計容量を構成します。
- アプリケーション・エグゼキューター・メモリー
- アプリケーション用に消費できるメモリー容量をエグゼキューターごとに構成できます。Sparkでは、デフォルト値の512MBが使用されます。spark.executor.memoryオプション(「Spark 1.6.1の使用可能なプロパティ」を参照)または
--executor-memory mem
引数をdse sparkコマンドに対して使用します。
アプリケーション・メモリー
アプリケーションのエグゼキューターを生成するときにワーカーによって適用される追加のJavaオプションを構成できます。「Spark 1.6.1の使用可能なプロパティ」で説明されている、spark.executor.extraJavaOptionsプロパティを使用します。例: spark.executor.extraJavaOptions -XX:+PrintGCDetails -Dkey=value -Dnumbers="one two
three"
コアの管理
- Sparkワーカー・コア
SPARK_WORKER_CORESオプションは、Sparkワーカーによってエグゼキューター用に提供されるコアの数を構成します。単一のエグゼキューターがワーカーから複数のコアを借りることができます。エグゼキューターによって使用されるコアの数は、エグゼキューターによって実行される並列タスクの数と関連しています。クラスターによって提供されるコアの数は、クラスター内のすべてのワーカーによって提供されるコアの合計です。
- アプリケーション・コア
アプリケーションのSpark構成オブジェクトでは、spark.cores.max構成プロパティまたは
--total-executor-cores cores
引数をdse sparkコマンドに対して使用することによって、そのアプリケーションがクラスターから要求するアプリケーション・コアの数を構成できます。
Spark Worker memory = initial_spark_worker_resources * (total system memory - memory assigned to Cassandra)
Spark Worker cores = initial_spark_worker_resources * total system cores
このメカニズムは、Sparkワーカーのメモリー容量とコア数を設定する場合にデフォルトで使用されます。デフォルトをオーバーライドするには、spark-env.shファイルのSPARK_WORKER_MEMORYオプションとSPARK_WORKER_CORESオプションの一方または両方のコメントを解除して編集します。