Sparkについて

Sparkのアーキテクチャーと機能に関する情報。

Sparkは、パッケージ型インストールで分析ノードを起動する場合のデフォルトのモードです。 Sparkは各ノードでローカルに実行され、可能な場合はメモリー内で実行されます。Sparkは複数の処理ではなく複数のスレッドを使用することで、1つのノードでの並列処理を実現し、複数のJVMでメモリー・オーバーヘッドが生じるのを防ぎます。

Apache SparkとDataStax Enterpriseの統合には以下が含まれます。Sparkは、各ノードでローカルに実行され、可能な場合はメモリー内で実行されます。Sparkは、中間のRDDをRAM、ディスクのどちらかまたは両方のキャッシュに保存できます。Sparkは、連鎖式反復処理のためのファイルをメモリーに格納します。Sparkは複数の処理ではなく複数のスレッドを使用することで、1つのノードでの並列処理を実現し、複数のJVMでメモリー・オーバーヘッドが生じるのを防ぎます。

Sparkアーキテクチャー

DataStax Enterprise Analyticsノードごとに、以下のソフトウェア・コンポーネントがあります。
  • Sparkワーカー:全ノードでアクティブ
  • Cassandraファイル・システム(CFS)
  • DataStax Enterpriseファイル・システム(DSEFS)
  • Cassandra

Sparkマスターはワークフローを制御し、Sparkワーカーはエグゼキューターを起動します。これらのエグゼキューターは、Sparkマスターに送信されるジョブの一部の実行を担当します。SparkのアーキテクチャーについてはApacheのドキュメントで説明されています。

Sparkは複数のアプリケーションをサポートしています。1つのアプリケーションによって複数のジョブが生成される場合、これらのジョブは並列実行されます。アプリケーションは各ノードで一部のリソースを予約し、これらのリソースはアプリケーションが終了するまで解放されません。たとえば、Sparkシェルの各セッションは、リソースを予約するアプリケーションです。デフォルトで、スケジューラーは、最大数のノードにアプリケーションを割り当てようとします。たとえば、4つのコアが必要であることをアプリケーションが宣言している場合に、2コアずつ搭載したサーバーが10台あるとします。この場合、アプリケーションは、それぞれ異なるノードに置かれて1つのコアを消費する、4つのエグゼキューターを取得する可能性が大です。ただし、このアプリケーションは、それぞれ2つの異なるノードに置かれて2コアを消費する、2つのエグゼキューターを取得する可能性もあります。アプリケーション・スケジューラーは構成が可能です。SparkワーカーとSparkマスターは別々のプロセスとして生成され、非常に軽量です。ワーカーは、メモリーを大量に使用する、クエリー処理専用のその他のプロセスを生成します。それらの追加プロセスのメモリー設定は、管理者によって完全に管理されます。

デプロイ環境では、1つの分析ノードがSparkマスターを実行し、各分析ノードでSparkワーカーが実行されます。Sparkマスターには、自動高可用性機能が組み込まれています。Sparkエグゼキューターは、ネイティブ統合を使用して、オープン・ソースのSpark-Cassandra Connector経由でローカルCassandraノード内のデータにアクセスします。

図: SparkとDataStax Enterpriseの統合


Sparkを実行すると、Hadoop分散ファイル・システム(HDFS)またはCassandraファイル・システム(CFS)のどちらか一方のURLを使用して、そのファイル・システム内のデータにアクセスできます。

Spark Jobserver

有効なspark-submitオプションがサポートされており、これらをSpark Jobserverに適用できます。Jobserverを使用するには、次のコマンドを実行します。
dse spark-jobserver start [any_spark_submit_options] //Start the job server
$ dse spark-jobserver stop  //Stop the job server
Spark Jobserverのデフォルトの場所は、インストールのタイプによって異なります。
Installer-Servicesおよびパッケージ・インストール /usr/share/dse/resources/spark/spark-jobserver
Installer-No Servicesおよびtarボール・インストール install_location/resources/spark/spark-jobserver
注: Installer-ServicesとPackageのインストールでは、Jobserverを実行するOSユーザーが Sparkログ・ディレクトリー(/var/log/spark)への書き込みパーミッションを保持していることを確認してください。これを実現するには、sudoを使用してJobserverを起動するか、 /var/log/sparkに対するアクセス制御を変更します。Jobserverのログ・ファイルは/var/log/spark/job-server/spark-job-server.logに含まれています。

Spark Jobserverを使用すると便利な状況には、キャッシュ・データの共有、キャッシュ・データのクエリーの繰り返し、ジョブの起動の高速化などがあります。

Sparkマスターの高可用性

Sparkマスターの高可用性メカニズムは、dse_systemキースペースの特殊なテーブルを使用して、Sparkワーカーとアプリケーションのリカバリーに必要な情報を格納します。Sparkのドキュメントに記載されている高可用性メカニズムと異なり、DataStax EnterpriseではZooKeeperは使用されません。

元のSparkマスターで障害が発生した場合は、予備のSparkマスターが自動的に処理を継承します。現在のSparkマスターを検索するには、以下を実行します。

dse client-tool spark master-address

Cassandraでパスワード認証を有効にしている場合は、DataStax Enterpriseによって特別なユーザーが作成されます。Sparkマスター・プロセスは、Analyticsノードごとに1人いる、この特別なユーザーを介してCassandraにアクセスします。ユーザー名はノード名で始まり、エンコードされたノードIDがそれに続きます。パスワードは乱数で生成されます。これらのユーザーを削除したり、パスワードを変更したりしないでください。

DataStax EnterpriseはSparkマスター管理機能を備えています。

サポートされていない機能

以下のSparkの機能およびAPIはサポートされていません。
  • GraphX
  • SparkからBLOBカラムへの書き込み

    あらゆる型のカラムの読み取りがサポートされていますが、シリアライズする前に、BLOBのコレクションをバイト配列に変換しておく必要があります。