Sparkノードの構成
Sparkノードのセキュリティ、パフォーマンス、およびロギングの設定を変更します。
Sparkノードのセキュリティ、パフォーマンス、およびロギングの設定を変更します。
パッケージ・インストールInstaller-Servicesインストール |
/etc/dse/spark/hive-site.xml |
tarボール・インストールInstaller-No Servicesインストール |
installation_location/resources/spark/conf/hive-site.xml |
環境変数を設定する
DataStaxでは、OutOfMemoryError状態が発生しているか、ガーベージ・コレクションに時間がかかりすぎているためにメモリー設定を増やす必要がない限り、Spark環境変数のデフォルト値を使用することを推奨しています。dse.yamlファイルとspark-env.shファイルのSparkメモリー構成オプションを使用します。
DSEを起動する前にお使いの環境でALLOW_SPARK_HOME=true
も設定すると、ユーザー固有のSPARK_HOME
ディレクトリーを設定できます。
たとえば、DebianまたはUbuntuでパッケージ・インストールを使用する場合は、以下のようになります。
$ export SPARK_HOME=$HOME/spark $ export ALLOW_SPARK_HOME=true $ sudo service dse start
パッケージ・インストールInstaller-Servicesインストール |
/etc/dse/dse.yaml |
tarボール・インストールInstaller-No Servicesインストール |
installation_location/resources/dse/conf/dse.yaml |
パッケージ・インストールInstaller-Servicesインストール |
/etc/dse/spark/spark-env.sh |
tarボール・インストールInstaller-No Servicesインストール |
installation_location/resources/spark/conf/spark-env.sh |
Sparkディレクトリーを保護する
Sparkクラスターを起動すると、DataStax EnterpriseによってSparkワーカーごとにSpark作業ディレクトリーがワーカー・ノード上に作成されます。ワーカー・ノードには複数のワーカーを含めることができ、spark-env.shのSPARK_WORKER_INSTANCESオプションで構成されます。SPARK_WORKER_INSTANCESが定義されていない場合は、単一のワーカーを起動します。作業ディレクトリーには、エグゼキューターの標準出力と標準エラーをはじめ、Sparkワーカーとエグゼキューターによって格納されているアプリケーション固有のデータが含まれており、DSEユーザーしか書き込めないようになっています。
デフォルトでは、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では、仮想ノード(vnode)とSparkの併用がサポートされます。
Sparkノードのセキュリティを確保する
- クライアントとノード間のSSL
- クライアント認証が有効になっていない場合でも、「クライアントとノード間の暗号化」で説明されているようにcassandra.yamlにトラストストア・エントリーが存在することを確認します。
- セキュリティおよび認証の有効化
- セキュリティは、dse.yamlの
spark_security_enabled
オプションを使用して有効にします。この設定をenabled
にすると、Sparkマスター・ノードとWorkerノード間の認証がオンになり、暗号化を有効にすることができます。Web UI以外のすべてのコンポーネントのSpark接続を暗号化するには、spark_security_encryption_enabled
を有効にします。Sparkコンポーネントのセキュリティ確保に使用される共有シークレットの長さは、spark_shared_secret_bit_length
オプションを使用して設定され、デフォルト値は256ビットです。これらのオプションについては、「DSE Analyticsのオプション」で説明されています。実稼働環境クラスターの場合は、これらの認証と暗号化を有効にします。これにより、パフォーマンスが大きな影響を受けることはありません。 - 認証とSparkアプリケーション
- 認証を有効にすると、ユーザーは、アプリケーションを送信するために認証される必要があります。
- 権限管理とSparkアプリケーション
- DSEの権限管理を有効にすると、ユーザーにはアプリケーションを送信するためのパーミッションが必要になります。また、アプリケーションを送信するユーザーはアプリケーションを管理するためのパーミッションを自動的に受け取り、このパーミッションを任意で他のユーザーに拡張できます。
- Spark SQL Thriftサーバーのデータベース認証情報
- hive-site.xmlファイルで、Spark SQL Thriftサーバーの認証情報を構成します。以下のように、Sparkディレクトリーでhive-site.xmlファイルを使用します。
Installer-Servicesおよびパッケージのインストール /etc/dse/spark/hive-site.xml Installer-No Servicesおよびtarボールのインストール installation_location/resources/spark/conf/hive-site.xml - SparkでKerberosを使用する方法
- Sparkランチャーは、Kerberos認証を使用して、Kerberos認証情報でDSEに接続し、デリゲーション・トークンを生成するようにDSEに要求します。Sparkドライバーとエグゼキューターは、デリゲーション・トークンを使用してクラスターに接続します。有効な認証を行うために、デリゲーション・トークンを定期的に更新する必要があります。セキュリティ上の理由から、このトークンを使用して認証されるユーザーは、このトークンを更新することはできません。したがって、デリゲーション・トークンには、トークンの所有者とトークンの更新者の2名の関連ユーザーが存在することになります。
トークンの更新者がいない場合、トークンを更新できるのはDSE内部プロセスを通じた場合のみとなります。アプリケーションが送信されると、DSEは、Sparkアプリケーションに関連付けられているデリゲーション・トークンを自動的に更新します。アプリケーションが未登録の場合(終了している場合)、デリゲーション・トークンの更新は停止し、トークンはキャンセルされます。
Sparkでの権限管理の使用
Sparkに適用される権限管理パーミッションは2種類あります。ワーク・プール・パーミッションは、DSEへのSparkアプリケーションの送信機能を制御します。サブミット・パーミッションは、特定のアプリケーションの管理機能を制御します。以下の手順はすべて、データベース・スーパーユーザーとしてCQLコマンドを発行することを想定しています。
Sparkアプリケーションを任意のAnalyticsデータ・センターに送信するパーミッションを付与するには、GRANT CREATE ON ANY WORKPOOL TO role
を使用します。
Sparkアプリケーションを特定のAnalyticsデータ・センターに送信するパーミッションを付与するには、GRANT CREATE ON WORKPOOL datacenter_name TO role
を使用します。
以下の類似する取り消しコマンドを使用できます。
REVOKE CREATE ON ANY WORKPOOL FROM role
REVOKE CREATE ON WORKPOOL datacenter_name FROM role
アプリケーションが送信されると、そのアプリケーションを送信したユーザーにはアプリケーションを管理および取り消すパーミッションが自動的に付与されます。また、そのアプリケーションを管理する機能を別のユーザーまたはロールに付与できます。
任意のワーク・プールでのサブミットを管理するパーミッションを指定のロールに付与するには、GRANT MODIFY ON ANY SUBMISSION TO role
を使用します。
指定のデータ・センターでのサブミットを管理するパーミッションを付与するには、GRANT MODIFY ON ANY SUBMISSION IN WORKPOOL datacenter_name TO role
を使用します。
指定のデータ・センターで付与されたIDによって識別されたサブミットを管理するパーミッションを付与するには、GRANT MODIFY ON SUBMISSION id IN WORKPOOL datacenter_name TO role
を使用します。
以下の類似する取り消しコマンドを使用できます。
REVOKE MODIFY ON ANY SUBMISSION FROM role
REVOKE MODIFY ON ANY SUBMISSION IN WORKPOOL datacenter_name FROM role
REVOKE MODIFY ON SUBMISSION id IN WORKPOOL datacenter_name FROM role
正規データベース・ユーザーとしてこれらのコマンドを発行するには、対象のユーザーにDSE Resource Manager(DSEリソース・マネージャー)RPCを使用するパーミッションを付与する必要があります。
GRANT ALL ON REMOTE OBJECT DseResourceManager TO role
各DSE Analyticsユーザーには、クライアント・ツールRPCを使用するパーミッションを付与する必要があります。
GRANT ALL ON REMOTE OBJECT DseClientTool TO role
Sparkメモリーおよびコアを構成する
Sparkメモリー・オプションは、Sparkエコシステムのさまざまなコンポーネントに影響します。
- Spark HistoryサーバーとSpark Thriftサーバーのメモリー
- SPARK_DAEMON_MEMORYオプションは、Spark SQL Thriftサーバーと履歴サーバーによって使用されるメモリーを構成します。これらのサーバー・アプリケーションを実行するノードに対して、spark-env.shファイルでこの設定を追加または変更します。
- Sparkワーカー・メモリー
- SPARK_WORKER_MEMORYオプションは、1つのSparkワーカーによって特定のノードで実行される全エグゼキューターに割り当てることのできるメモリーの合計容量を構成します。
- アプリケーション・エグゼキューター・メモリー
- アプリケーション用に消費できるメモリー容量をエグゼキューターごとに構成できます。Sparkでは、デフォルト値の512MBが使用されます。spark.executor.memoryオプション(「Spark 1.6.2の使用可能なプロパティ」を参照)または
--executor-memory mem
引数をdse sparkコマンドに対して使用します。
アプリケーション・メモリー
アプリケーションのエグゼキューターを生成するときにワーカーによって適用される追加のJavaオプションを構成できます。spark.executor.extraJavaOptionsプロパティ(「Spark 1.6.2の使用可能なプロパティ」を参照)を使用します。例を次に示します。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 DSE)
Spark Worker cores = initial_spark_worker_resources * total system cores
このメカニズムは、Sparkワーカーのメモリー容量とコア数を設定する場合にデフォルトで使用されます。デフォルトをオーバーライドするには、spark-env.shファイルのSPARK_WORKER_MEMORYオプションとSPARK_WORKER_CORESオプションの一方または両方をコメント解除して編集します。
クラウド環境でのSparkクラスターの実行
Amazon EC2のようなクラウド・インフラストラクチャー・プロバイダーを使用している場合は、お使いのクラスターで公的にルーティング可能なIPアドレスに対してポートを明示的に開く必要があります。ポートを開かないと、SparkワーカーはSparkマスターを見つけることができません。
1つの回避方法は、cassandra-rackdc.propertiesスニッチ・セットアップ・ファイルのprefer_local
設定をtrueに設定することです。
# Uncomment the following line to make this snitch prefer the internal ip when possible, as the Ec2MultiRegionSnitch does.
prefer_local=true
これにより、公的にルーティング可能なIPアドレスではなく、データ・センター内のプライベートIPアドレスでのみ通信するようにクラスターに通知が行われます。
パッケージ・インストールInstaller-Servicesインストール |
/etc/dse/cassandra/cassandra-rackdc.properties |
tarボール・インストールInstaller-No Servicesインストール |
installation_location/resources/cassandra/conf/cassandra-rackdc.properties |
Spark構成を取得するリトライ数の構成
SparkがDSEから構成設定をフェッチすると、構成データを取得できない場合はすぐに失敗しますが、デフォルトでは5回リトライが行われるため、リトライ間の遅延が大きくなります。リトライ数をSpark構成で設定するには、dse sparkコマンドを呼び出す際またはspark-defaults.confでspark.dse.configuration.fetch.retries
構成プロパティを変更します。
パッケージ・インストールInstaller-Servicesインストール |
/etc/dse/spark/spark-defaults.conf |
tarボール・インストールInstaller-No Servicesインストール |
installation_location/resources/spark/conf/spark-defaults.conf |
継続的なページングの有効化
継続的なページングでは、DSEからDSE Sparkによって使用されるDataStax Java Driverへとレコードを一括でストリーミングします。デフォルトでは、クエリーでの継続的なページングは無効になっています。有効にするには、Spark SQLシェルを起動する際またはspark-defaults.confでspark.dse.continuous_paging_enabled
設定をtrueに設定します。例を次に示します。
$ dse spark-sql --conf spark.dse.continuous_paging_enabled=true
SparkノードへのJARの追加
サードパーティJARは、各ノードのSpark libディレクトリーに追加して、クラスターを再起動することで、Sparkノードに追加できます。
- パッケージ・インストールおよびInstaller-Services:/var/lib/spark
- tarボール・インストールおよびInstaller-No Services:/var/lib/spark
$ cp metrics-graphite-3.1.2.jar /usr/share/dse/spark/lib/ $ cp metrics-json-3.1.2.jar /usr/share/dse/spark/lib/
Sparkサーバーの構成
spark-daemon-defaults.confファイルは、DSE Sparkマスターとワーカーを構成します。
spark-daemon-defaults.confファイルは、DSE Sparkマスターとワーカーを構成します。
オプション | デフォルト値 | 説明 |
---|---|---|
dse.spark.application.timeout |
30 | ハートビートを受信していない場合は、アプリケーションが停止状態と見なされるまでの時間(秒)。 |
spark.dseShuffle.sasl.port |
7447 | SASLのセキュリティで保護されたアプリケーションのシャッフル・サービスを開始するポート番号。cassandra.yamlのlisten_address にバインドされています。 |
spark.dseShuffle.noSasl.port |
7437 | セキュリティで保護されていないアプリケーションのシャッフル・サービスを開始するポート番号。cassandra.yamlのlisten_address にバインドされています。 |
パッケージ・インストールInstaller-Servicesインストール |
/etc/dse/cassandra/cassandra.yaml |
tarボール・インストールInstaller-No Servicesインストール |
installation_location/resources/cassandra/conf/cassandra.yaml |
パッケージ・インストールInstaller-Servicesインストール |
/etc/dse/spark/spark-daemon-defaults.conf |
tarボール・インストールInstaller-No Servicesインストール |
installation_location/resources/spark/conf/spark-daemon-defaults.conf |