Spark History Server では、Spark ジョブログを永続化し、完了したジョブの詳細 (ステージ、タスク、リソース使用量など) を表示できます。
前提条件
-
ack-spark-operator アドオンがデプロイされていること。
kubectlクライアントがACKクラスターに接続されています。 詳細については、「クラスターのkubeconfigファイルを取得し、kubectlを使用してクラスターに接続する」をご参照ください。
手順1:ack-spark-history-server アドオンのデプロイ
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、 を選択します。
-
Marketplace ページで、アプリカタログ タブをクリックし、ack-spark-history-server を検索して選択します。
-
[ack-spark-history-server] ページで、デプロイ をクリックします。
-
作成する パネルで、クラスターと名前空間を選択し、次へ をクリックします。
-
パラメーター ページで、パラメーターを設定し、OK をクリックします。
以下のパラメーターは、ログストレージ、環境変数、およびサービスを設定します。すべてのオプションについては、[ack-spark-history-server] ページの ConfigMap タブをご参照ください。
説明ack-spark-history-server をデプロイする際、Object Storage Service (OSS)、永続ボリューム要求 (PVC)、または HDFS などのログ用バックエンドストレージを指定してください。
-
(必須) ログのバックエンドストレージの設定
バックエンドストレージとして OSS、PVC、または HDFS を選択します。
OSS
次のパラメーターを設定してください。
重要Spark ジョブログは、ジョブの完了後にのみアップロードされます。 実行中のジョブのログをリアルタイムで表示することはできません。
パラメーター
説明
例
spark.history.fs.logDirectoryログディレクトリの URL。 アドオンをデプロイする前に、
spark/spark-eventsなどのディレクトリを作成してください。 詳細については、「ディレクトリの管理」をご参照ください。oss://<Bucket name>/spark/spark-eventsstorage.oss.enableログのバックエンドストレージとして OSS または OSS-HDFS を有効にします。
truestorage.oss.endpointOSS エンドポイント。
oss-cn-beijing-internal.aliyuncs.comstorage.oss.existingSecret(推奨) OSS アクセス認証情報を含む既存の Secret の名前。 詳細については、「AccessKey Secret の YAML ファイルの例」をご参照ください。
spark-oss-secretstorage.oss.createSecret既存の Secret が指定されていない場合、OSS アクセス認証情報を格納するための新しい Secret が自動的に作成されます。
該当なし
storage.oss.createSecret.accessKeyIdご使用の Alibaba Cloud アカウントの AccessKey ID。
yourAccessKeyID
storage.oss.createSecret.accessKeySecretご使用の Alibaba Cloud アカウントの AccessKey Secret。
yourAccessKeySecret
PVC
次のパラメーターを設定してください。
パラメーター
説明
例
spark.history.fs.logDirectoryログディレクトリの URL。
file:///mnt/spark/spark-eventsstorage.pvc.enableログのバックエンドストレージとして PVC を有効にします。
truestorage.pvc.name既存の PVC の名前。 PV と PVC が
ack-spark-history-server名前空間で作成され、バインドされていることを確認してください。 詳細については、「Storage-CSI」をご参照ください。"<PVC name>"storage.pvc.mountPathコンテナ内の PVC のマウントパス。
"/mnt"HDFS
次のパラメーターを設定してください。
パラメーター
説明
例
spark.history.fs.logDirectoryログディレクトリの URL。
hdfs://namenode:port/spark/spark-events -
(オプション) Service タイプとポート
デフォルトでは、Service が History Server の Web UI を公開します。
service.typeとservice.portでタイプとポートを設定します。パラメーター
説明
デフォルト
service.typeService のタイプ。 有効な値:
-
ClusterIP -
NodePort -
LoadBalancer
ClusterIPservice.portWeb UI にアクセスするためのポート。
18080 -
-
(オプション) 環境変数
envに環境変数を追加して、History Server を設定できます。環境変数
説明
デフォルト
SPARK_DAEMON_MEMORYSpark History Server に割り当てられるメモリ。
1 gSPARK_DAEMON_JAVA_OPTSSpark History Server の JVM オプション。
""SPARK_DAEMON_CLASSPATHSpark History Server のクラスパス。
""SPARK_PUBLIC_DNSSpark History Server のパブリックアドレス。 未設定の場合、アプリケーション履歴は内部アドレスを使用するため、リンク切れが発生する可能性があります。
""SPARK_HISTORY_OPTS一連の
spark.history.*設定プロパティ。""sparkConfに設定を追加して、History Server をカスタマイズできます。 一般的な設定は次のとおりです。プロパティ
説明
デフォルト
spark.history.fs.update.intervalログの更新をチェックする間隔。
10 sspark.history.fs.retainedApplicationsキャッシュするアプリケーション UI の最大数。
50spark.history.ui.portSpark History Server ポート。
18080spark.history.fs.cleaner.enabledイベントログを定期的にクリーンアップするかどうかを指定します。
falsespark.history.fs.cleaner.intervalspark.history.fs.cleaner.enabled=trueのときのイベントログクリーンアップ間隔。1 dspark.history.fs.cleaner.maxAgespark.history.fs.cleaner.enabled=trueのときの、削除前のイベントログの最大保存期間。7 dspark.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のときの、削除前のドライバーイベントログの最大保存期間。spark.history.fs.cleaner.maxAgespark.history.fs.numReplayThreadsログファイルを処理するためのスレッド数。
利用可能な CPU コアの 25%。
spark.history.store.maxDiskUsageアプリケーション履歴キャッシュの最大ディスク使用量。
10 g
-
ステップ 2:Web UI へのアクセス
デフォルトでは、Service タイプは ClusterIP です。Web UI にアクセスするには、ローカルポートを転送してください。代わりに既存の 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 ジョブでイベントログ記録を有効にします。
|
パラメーター |
説明 |
例 |
|
|
イベントログ記録を有効にします。有効な値:
|
|
|
|
イベントログのストレージパス。例:
|
|
例:イベントログ記録用の OSS 設定
次の例では、イベントログ記録のバックエンドストレージとして OSS を設定します。
-
Spark コンテナイメージのビルド
コミュニティの Spark イメージには OSS JAR パッケージがありません。以下に示す Hadoop OSS SDK JAR を使用してカスタムイメージをビルドし、リポジトリにプッシュします。「Enterprise Edition インスタンスを使用したイメージのビルド」をご参照ください。ご使用の Spark バージョンに対応する Hadoop バージョンの依存 JAR を使用してください。
ARG SPARK_IMAGE=registry-cn-hangzhou.ack.aliyuncs.com/dev/spark:3.5.2 FROM ${SPARK_IMAGE} # Hadoop Aliyun OSS サポートの依存関係を追加 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}/jars -
Secret の作成
Spark ジョブの名前空間に Secret を作成して、OSS のアクセス認証情報を格納します。
-
次のマニフェストファイル
spark-oss-secret.yamlを作成します。apiVersion: v1 kind: Secret metadata: name: spark-oss-secret namespace: default stringData: # Alibaba Cloud アカウントの AccessKey ID。 OSS_ACCESS_KEY_ID: "" # Alibaba Cloud アカウントの 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.endpointOSS エンドポイント。
oss-cn-beijing-internal.aliyuncs.comspark.eventLog.dirログストレージパス。パスが存在しない場合、ジョブはランタイムで失敗します。
oss://<Bucket name>/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://<Bucket name>/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 ジョブを投入します。ジョブが完了したら、http://127.0.0.1:18080 でその履歴を表示できます。
kubectl apply -f spark-pi.yaml期待される出力:
sparkapplication.sparkoperator.k8s.io/spark-pi-oss created
-