実行中の Spark アプリケーションは、ステージの詳細、タスクの詳細、メモリ使用量などのジョブ情報を可視化するための Web UI を提供します。ジョブの完了後にジョブの実行詳細を表示するには、Spark ジョブのログをバックエンドストレージシステムに永続化する必要があります。その後、ack-spark-history-server コンポーネントを使用してログを解析し、Web UI に表示できます。このトピックでは、Spark History Server を使用して Container Service for Kubernetes (ACK) クラスター内の Spark ジョブのステータスを表示する方法について説明します。
前提条件
ack-spark-operator コンポーネントがデプロイされていること。詳細については、「ack-spark-operator コンポーネントのデプロイ」をご参照ください。
kubectl クライアントが ACK クラスターに接続されていること。詳細については、「kubectl を使用したクラスターへの接続」をご参照ください。
ステップ 1:ack-spark-history-server コンポーネントのデプロイ
[アプリケーションマーケット] ページで、[アプリカタログ] タブをクリックします。ack-spark-history-server を検索して選択します。
[ack-spark-history-server] ページで、[デプロイ] をクリックします。
[作成] パネルで、クラスターと名前空間を選択し、[次へ] をクリックします。
[パラメーター設定] ページで、パラメーターを設定し、[OK] をクリックします。
以下のセクションでは、ログストレージ、環境変数、および Service 設定のパラメーターについて説明します。必要に応じてパラメーター設定をカスタマイズできます。すべての設定項目の説明は、[ack-spark-history-server] ページの [パラメーター] タブで確認できます。
説明ack-spark-history-server コンポーネントをデプロイする際には、Object Storage Service (OSS)、永続ボリューム要求 (PVC)、または HDFS などのバックエンドログストレージシステムを指定する必要があります。
(必須) バックエンドログストレージシステムの設定
バックエンドログストレージシステムを設定する際、OSS、PVC、または HDFS を選択できます。以下のセクションでは、各ストレージバックエンドの設定について説明します。
ストレージバックエンドとしての OSS の使用
ログストレージバックエンドとして OSS を使用する場合は、次のパラメーターを設定します。
重要Spark ジョブはログを書き込み、ジョブが完了した後にのみアップロードします。そのため、実行中のジョブのログをリアルタイムで表示することはできません。完了したジョブのログのみ表示できます。
パラメーター
説明
例
spark.history.fs.logDirectoryログディレクトリの URL。
spark/spark-eventsなどのログディレクトリがコンポーネントをデプロイする前に作成されていることを確認してください。ディレクトリの作成方法の詳細については、「ディレクトリの管理」をご参照ください。oss://<バケット名>/spark/spark-eventsstorage.oss.enableOSS および OSS-HDFS をログストレージバックエンドとして有効にします。
truestorage.oss.endpointOSS エンドポイント。
oss-cn-beijing-internal.aliyuncs.comstorage.oss.existingSecret(推奨) OSS からの読み取りに必要な認証情報を含む既存の Secret の名前。OSS アクセス認証情報用の Secret YAML ファイルの作成方法の詳細については、「OSS アクセス認証情報用の Secret YAML のサンプル」をご参照ください。
spark-oss-secretstorage.oss.createSecret既存の Secret を指定しない場合、OSS アクセス認証情報を格納するための Secret が自動的に作成されます。
該当なし。
storage.oss.createSecret.accessKeyIdご利用の AccessKey ID。
yourAccessKeyID
storage.oss.createSecret.accessKeySecretご利用の AccessKey Secret。
yourAccessKeySecret
ストレージバックエンドとしての PVC の使用
ログストレージバックエンドとして PVC を使用する場合は、次のパラメーターを設定します。
パラメーター
説明
例
spark.history.fs.logDirectoryログディレクトリの URL。
file:///mnt/spark/spark-eventsstorage.pvc.enableログストレージバックエンドとして PVC を有効にします。
truestorage.pvc.name既存の PVC の名前。
ack-spark-history-serverが要求する名前空間に永続ボリューム (PV) と PVC が作成され、正常にバインドされていることを確認してください。PVC の作成とバインドの詳細については、「ストレージ - CSI」をご参照ください。"<PVC 名>"storage.pvc.mountPathコンテナー内の PVC のマウントパス。
"/mnt"ストレージバックエンドとしての HDFS の使用
ログストレージバックエンドとして HDFS を使用する場合は、次のパラメーターを設定します。
パラメーター
説明
例
spark.history.fs.logDirectoryログディレクトリの URL。
hdfs://namenode:port/spark/spark-events(任意) Service タイプとポートの設定
デフォルトでは、History Server Web UI を公開するために Service リソースが作成されます。
service.typeおよびservice.portパラメーターを使用して、Service タイプとポート番号を設定できます。パラメーター
説明
デフォルト値
service.typeService タイプ。有効な値:
ClusterIPNodePortLoadBalancer
ClusterIPservice.portWeb UI にアクセスするためのポート。
18080(任意) 環境変数の設定
envパラメーターに環境変数を追加して、History Server を設定できます。環境変数
説明
デフォルト値
SPARK_DAEMON_MEMORYHistory Server に割り当てられるメモリ量。
1gSPARK_DAEMON_JAVA_OPTSHistory Server の JVM 設定項目。
""SPARK_DAEMON_CLASSPATHHistory Server のクラスパス。
""SPARK_PUBLIC_DNSHistory Server のパブリックアドレス。History Server のパブリックアドレスが設定されていない場合、アプリケーション履歴はデフォルトで内部アドレスを使用するため、リンクが失敗する可能性があります。
""SPARK_HISTORY_OPTSspark.history.*設定項目のセット。""sparkConfパラメーターに設定を追加して、History Server をセットアップできます。次の表に、一般的な設定項目を示します。プロパティ名
説明
デフォルト値
spark.history.fs.update.intervalログの更新をチェックする間隔。
10sspark.history.fs.retainedApplicationsUI データがキャッシュされるアプリケーションの最大数。
50spark.history.ui.portHistory Server のポート番号。
18080spark.history.fs.cleaner.enabledイベントログを定期的にクリーンアップするかどうかを指定します。
falsespark.history.fs.cleaner.intervalspark.history.fs.cleaner.enabled=trueの場合、このパラメーターはイベントログをクリーンアップする間隔を指定します。1dspark.history.fs.cleaner.maxAgespark.history.fs.cleaner.enabled=trueの場合、このしきい値より長い存続時間 (TTL) を持つログはクリーンアップ中に削除されます。7dspark.history.fs.cleaner.maxNumspark.history.fs.cleaner.enabled=trueの場合、このパラメーターは保持するログファイルの最大数を設定します。このしきい値を超えるログファイルは、クリーンアップがトリガーされたときに削除されます。Int.MaxValuespark.history.fs.driverlog.cleaner.enabledドライバーのイベントログを定期的にクリーンアップするかどうかを指定します。
spark.history.fs.cleaner.enabledspark.history.fs.driverlog.cleaner.intervalspark.history.fs.driverlog.cleaner.enabled=trueの場合、このパラメーターはドライバーのイベントログをクリーンアップする間隔を指定します。spark.history.fs.cleaner.intervalspark.history.fs.driverlog.cleaner.maxAgespark.history.fs.driverlog.cleaner.enabled=trueの場合、このしきい値より長い TTL を持つドライバーのイベントログはクリーンアップ中に削除されます。spark.history.fs.cleaner.maxAgespark.history.fs.numReplayThreadsログファイルを処理するために作成されるスレッドの数。
利用可能な CPU コアの 25%。
spark.history.store.maxDiskUsageアプリケーション履歴のキャッシュに使用できる最大ディスクサイズ。
10g
ステップ 2:Spark History Server Web UI へのアクセス
デフォルトでは、Service タイプは ClusterIP です。Spark History Server Web UI にアクセスするには、その Service をローカルポート 18080 に転送できます。次の手順でポートフォワーディングを設定できます。既存の SLB インスタンスを使用してアクセスするには、「既存の SLB インスタンスに関連付けられた Service を使用してアプリケーションを公開する」をご参照ください。
kubectl port-forward コマンドを使用して確立されたポートフォワーディングは、ステージング環境での迅速な検証にのみ適しており、セキュリティリスクのため本番環境では推奨されません。
次のコマンドを実行して、ローカルポートフォワーディングを設定します。
RELEASE_NAME=spark-history-server RELEASE_NAMESPACE=spark-operator SERVICE_NAME=${RELEASE_NAME}-service SERVICE_PORT=$(kubectl get service ${SERVICE_NAME} --namespace ${RELEASE_NAMESPACE} -o jsonpath="{.spec.ports[0].port}") echo "Now you can go to http://127.0.0.1:18080 to visit spark history server." kubectl port-forward --namespace ${RELEASE_NAMESPACE} services/${SERVICE_NAME} 18080:${SERVICE_PORT}想定される出力:
Now you can go to http://127.0.0.1:18080 to visit spark history server. Forwarding from 127.0.0.1:18080 -> 18080 Forwarding from [::1]:18080 -> 18080ブラウザで http://127.0.0.1:18080 を開き、Spark History Server Web UI を表示します。

ステップ 3:Spark ジョブでのロギングの有効化
ack-spark-history-server コンポーネントをデプロイした後、Spark ジョブでイベントロギングを有効にする必要があります。次の 2 つのパラメーターを設定して、Spark ジョブのイベントログを有効にし、保存できます。
パラメーター | 説明 | サンプル値 |
| イベントロギングを有効にします。有効な値:
|
|
| イベントログが保存されるパス。有効な値:
|
|
シナリオ例:Spark ジョブでの OSS ロギングの設定
次の手順では、ストレージバックエンドとして OSS を使用してロギングを設定する方法について説明します。
Spark コンテナーイメージのビルド
コミュニティの Spark コンテナーイメージには、OSS へのアクセスに必要な JAR パッケージが含まれていません。独自の Spark コンテナーイメージをビルドし、Hadoop OSS SDK の JAR パッケージをイメージに追加する必要があります。次のコードは Dockerfile のサンプルです。Container Registry を使用してイメージをビルドする方法の詳細については、「Enterprise Edition インスタンスを使用したイメージのビルド」をご参照ください。Dockerfile に基づいてイメージをビルドし、イメージリポジトリにプッシュします。Spark の Hadoop バージョンに合わせて依存関係の JAR パッケージを調整してください。
ARG SPARK_IMAGE=registry-cn-hangzhou.ack.aliyuncs.com/dev/spark:3.5.2 FROM ${SPARK_IMAGE} # Add dependency for Hadoop Aliyun OSS support ADD --chmod=644 https://repo1.maven.org/maven2/org/apache/hadoop/hadoop-aliyun/3.3.4/hadoop-aliyun-3.3.4.jar ${SPARK_HOME}/jars ADD --chmod=644 https://repo1.maven.org/maven2/com/aliyun/oss/aliyun-sdk-oss/3.17.4/aliyun-sdk-oss-3.17.4.jar ${SPARK_HOME}/jars ADD --chmod=644 https://repo1.maven.org/maven2/org/jdom/jdom2/2.0.6.1/jdom2-2.0.6.1.jar ${SPARK_HOME}/jarsSecret の作成
Spark ジョブの名前空間で、OSS アクセス認証情報を格納するための Secret を作成します。
OSS アクセス認証情報を格納するために、
spark-oss-secret.yamlという名前の Secret マニフェストファイルを作成します。apiVersion: v1 kind: Secret metadata: name: spark-oss-secret namespace: default stringData: # ご利用の AccessKey ID OSS_ACCESS_KEY_ID: "" # ご利用の AccessKey Secret OSS_ACCESS_KEY_SECRET: ""次のコマンドを実行して、Secret リソースを作成します。
kubectl apply -f spark-oss-secret.yaml想定される出力:
secret/spark-oss-secret created
Spark ジョブの送信
次のコードは、イベントロギングが有効になっている SparkApplication のサンプルです。必要に応じて次のパラメーターを変更します。
パラメーター
説明
例
imageビルドされた Spark コンテナーイメージのレジストリアドレス。
registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/spark:3.5.2-ossfs.oss.endpointAlibaba Cloud OSS エンドポイント。
oss-cn-beijing-internal.aliyuncs.comspark.eventLog.dirログが保存されるパス。指定されたログパスが事前に作成されていることを確認してください。そうでない場合、ジョブの実行時にエラーが発生します。
oss://<バケット名>/spark/spark-events次の SparkApplication マニフェストファイルを作成し、
spark-pi.yamlとして保存します。apiVersion: sparkoperator.k8s.io/v1beta2 kind: SparkApplication metadata: name: spark-pi-oss namespace: default spec: type: Scala mode: cluster image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/spark:3.5.2-oss mainApplicationFile: local:///opt/spark/examples/jars/spark-examples_2.12-3.5.2.jar mainClass: org.apache.spark.examples.SparkPi sparkVersion: 3.5.2 hadoopConf: fs.AbstractFileSystem.oss.impl: org.apache.hadoop.fs.aliyun.oss.OSS fs.oss.impl: org.apache.hadoop.fs.aliyun.oss.AliyunOSSFileSystem # OSS エンドポイント fs.oss.endpoint: oss-cn-beijing-internal.aliyuncs.com fs.oss.credentials.provider: com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider sparkConf: spark.eventLog.enabled: "true" # ログストレージパス spark.eventLog.dir: oss://<バケット名>/spark/spark-events driver: cores: 1 coreLimit: 1200m memory: 512m serviceAccount: spark-operator-spark envFrom: - secretRef: name: spark-oss-secret executor: instances: 1 cores: 1 coreLimit: 1200m memory: 512m envFrom: - secretRef: name: spark-oss-secret restartPolicy: type: Never次のコマンドを実行して、Spark ジョブを送信します。イメージがビルドされ、Secret が作成された後、ブラウザで http://127.0.0.1:18080 を開いて Spark ジョブのステータスを表示できます。
kubectl apply -f spark-pi.yaml想定される出力:
sparkapplication.sparkoperator.k8s.io/spark-pi created