Sparkノードの構成

Cassandraリアルタイム、DSE Searchなどのその他のタイプのワークロードを実行しているノードとは別に、データセンター内のSparkノードを構成します。

Sparkノードは独自のデータセンターで構成する必要があります。Cassandraノード・タイプを実行しているノードと同じデータセンターではSparkノード・タイプを実行しないでください。DSE SearchAnalyticsクラスターは、DSE Analyticsジョブ内でDSE Searchクエリーを使用できます。ワークロード分離のガイドラインに必ず従ってください。

Sparkとともに使用する場合、hive-site.xmlファイルのデフォルトの場所は次のとおりです。
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メモリー構成オプションを使用してください。

dse.yamlファイルの場所は、インストールのタイプによって異なります。
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
spark-env.shファイルのデフォルトの場所は、インストールのタイプによって異なります。
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ディレクトリーへのアクセス権を付与する

tarボール・インストールのノードを起動するには、次のデフォルトのSparkディレクトリ場所にアクセスするためのパーミッションが必要です: /var/lib/sparkおよび/var/log/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のドキュメントを参照してください。
DataStax Enterpriseは、特定のSparkワーカーによって提供されるメモリー容量とコア数を半自動的に制御できます。dse.yamlファイルのinitial_spark_worker_resourcesパラメーターは、システム・リソースのどの部分を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ワーカーのメモリー容量とコア数に割り当てることのできる最小値は、それぞれ64Mbと1コアです。計算結果がこれよりも低い場合、例外はスローされず、自動的に値が制限されます。initial_spark_worker_resources値の範囲は0.01〜1です。範囲が指定されていない場合は、デフォルト値の0.7が使用されます。

このメカニズムは、Sparkワーカーのメモリー容量とコア数を設定する場合にデフォルトで使用されます。デフォルトをオーバーライドするには、spark-env.shファイルのSPARK_WORKER_MEMORYオプションとSPARK_WORKER_CORESオプションの一方または両方のコメントを解除して編集します。