すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:Spark History Server を使用した Spark ジョブ情報の表示

最終更新日:Dec 27, 2025

実行中の Spark アプリケーションは、ステージの詳細、タスクの詳細、メモリ使用量などのジョブ情報を可視化するための Web UI を提供します。ジョブの完了後にジョブの実行詳細を表示するには、Spark ジョブのログをバックエンドストレージシステムに永続化する必要があります。その後、ack-spark-history-server コンポーネントを使用してログを解析し、Web UI に表示できます。このトピックでは、Spark History Server を使用して Container Service for Kubernetes (ACK) クラスター内の Spark ジョブのステータスを表示する方法について説明します。

前提条件

ステップ 1:ack-spark-history-server コンポーネントのデプロイ

  1. [アプリケーションマーケット] ページで、[アプリカタログ] タブをクリックします。ack-spark-history-server を検索して選択します。

  2. [ack-spark-history-server] ページで、[デプロイ] をクリックします。

  3. [作成] パネルで、クラスターと名前空間を選択し、[次へ] をクリックします。

  4. [パラメーター設定] ページで、パラメーターを設定し、[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-events

      storage.oss.enable

      OSS および OSS-HDFS をログストレージバックエンドとして有効にします。

      true

      storage.oss.endpoint

      OSS エンドポイント。

      oss-cn-beijing-internal.aliyuncs.com

      storage.oss.existingSecret

      (推奨) OSS からの読み取りに必要な認証情報を含む既存の Secret の名前。OSS アクセス認証情報用の Secret YAML ファイルの作成方法の詳細については、「OSS アクセス認証情報用の Secret YAML のサンプル」をご参照ください。

      spark-oss-secret

      storage.oss.createSecret

      既存の Secret を指定しない場合、OSS アクセス認証情報を格納するための Secret が自動的に作成されます。

      該当なし。

      storage.oss.createSecret.accessKeyId

      ご利用の AccessKey ID。

      yourAccessKeyID

      storage.oss.createSecret.accessKeySecret

      ご利用の AccessKey Secret。

      yourAccessKeySecret

      OSS アクセス認証情報用の Secret YAML のサンプル

      Secret に OSS_ACCESS_KEY_IDOSS_ACCESS_KEY_SECRET フィールドが含まれていることを確認してください。

      1. 次の内容で spark-oss-secret.yaml という名前のファイルを作成します。

        apiVersion: v1
        kind: Secret
        metadata:
          name: spark-oss-secret
          namespace: spark-operator
        stringData:
          OSS_ACCESS_KEY_ID: ""       # ご利用の AccessKey ID。
          OSS_ACCESS_KEY_SECRET: ""   # ご利用の AccessKey Secret。
      2. 次のコマンドを実行して、OSS アクセス認証情報用の Secret を作成します。

        kubectl apply -f spark-oss-secret.yaml

      ストレージバックエンドとしての PVC の使用

      ログストレージバックエンドとして PVC を使用する場合は、次のパラメーターを設定します。

      パラメーター

      説明

      spark.history.fs.logDirectory

      ログディレクトリの URL。

      file:///mnt/spark/spark-events

      storage.pvc.enable

      ログストレージバックエンドとして PVC を有効にします。

      true

      storage.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.type

      Service タイプ。有効な値:

      • ClusterIP

      • NodePort

      • LoadBalancer

      ClusterIP

      service.port

      Web UI にアクセスするためのポート。

      18080

    • (任意) 環境変数の設定

      env パラメーターに環境変数を追加して、History Server を設定できます。

      環境変数

      説明

      デフォルト値

      SPARK_DAEMON_MEMORY

      History Server に割り当てられるメモリ量。

      1g

      SPARK_DAEMON_JAVA_OPTS

      History Server の JVM 設定項目。

      ""

      SPARK_DAEMON_CLASSPATH

      History Server のクラスパス。

      ""

      SPARK_PUBLIC_DNS

      History Server のパブリックアドレス。History Server のパブリックアドレスが設定されていない場合、アプリケーション履歴はデフォルトで内部アドレスを使用するため、リンクが失敗する可能性があります。

      ""

      SPARK_HISTORY_OPTS

      spark.history.* 設定項目のセット。

      ""

      sparkConf パラメーターに設定を追加して、History Server をセットアップできます。次の表に、一般的な設定項目を示します。

      プロパティ名

      説明

      デフォルト値

      spark.history.fs.update.interval

      ログの更新をチェックする間隔。

      10s

      spark.history.fs.retainedApplications

      UI データがキャッシュされるアプリケーションの最大数。

      50

      spark.history.ui.port

      History Server のポート番号。

      18080

      spark.history.fs.cleaner.enabled

      イベントログを定期的にクリーンアップするかどうかを指定します。

      false

      spark.history.fs.cleaner.interval

      spark.history.fs.cleaner.enabled=true の場合、このパラメーターはイベントログをクリーンアップする間隔を指定します。

      1d

      spark.history.fs.cleaner.maxAge

      spark.history.fs.cleaner.enabled=true の場合、このしきい値より長い存続時間 (TTL) を持つログはクリーンアップ中に削除されます。

      7d

      spark.history.fs.cleaner.maxNum

      spark.history.fs.cleaner.enabled=true の場合、このパラメーターは保持するログファイルの最大数を設定します。このしきい値を超えるログファイルは、クリーンアップがトリガーされたときに削除されます。

      Int.MaxValue

      spark.history.fs.driverlog.cleaner.enabled

      ドライバーのイベントログを定期的にクリーンアップするかどうかを指定します。

      spark.history.fs.cleaner.enabled

      spark.history.fs.driverlog.cleaner.interval

      spark.history.fs.driverlog.cleaner.enabled=true の場合、このパラメーターはドライバーのイベントログをクリーンアップする間隔を指定します。

      spark.history.fs.cleaner.interval

      spark.history.fs.driverlog.cleaner.maxAge

      spark.history.fs.driverlog.cleaner.enabled=true の場合、このしきい値より長い TTL を持つドライバーのイベントログはクリーンアップ中に削除されます。

      spark.history.fs.cleaner.maxAge

      spark.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 コマンドを使用して確立されたポートフォワーディングは、ステージング環境での迅速な検証にのみ適しており、セキュリティリスクのため本番環境では推奨されません。

  1. 次のコマンドを実行して、ローカルポートフォワーディングを設定します。

    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
  2. ブラウザで http://127.0.0.1:18080 を開き、Spark History Server Web UI を表示します。

    image

ステップ 3:Spark ジョブでのロギングの有効化

ack-spark-history-server コンポーネントをデプロイした後、Spark ジョブでイベントロギングを有効にする必要があります。次の 2 つのパラメーターを設定して、Spark ジョブのイベントログを有効にし、保存できます。

パラメーター

説明

サンプル値

spark.eventLog.enabled

イベントロギングを有効にします。有効な値:

  • true

  • false

true

spark.eventLog.dir

イベントログが保存されるパス。有効な値:

  • oss://<バケット名>/spark/spark-events (OSS パス)

  • hdfs://namenode:port/spark/spark-events (HDFS パス)

  • file:///tmp/spark/spark-events (ローカルパス)

oss://<バケット名>/spark/spark-events

シナリオ例:Spark ジョブでの OSS ロギングの設定

次の手順では、ストレージバックエンドとして OSS を使用してロギングを設定する方法について説明します。

  1. 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}/jars
  2. Secret の作成

    Spark ジョブの名前空間で、OSS アクセス認証情報を格納するための Secret を作成します。

    1. 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: ""
    2. 次のコマンドを実行して、Secret リソースを作成します。

      kubectl apply -f spark-oss-secret.yaml

      想定される出力:

      secret/spark-oss-secret created
  3. Spark ジョブの送信

    次のコードは、イベントロギングが有効になっている SparkApplication のサンプルです。必要に応じて次のパラメーターを変更します。

    パラメーター

    説明

    image

    ビルドされた Spark コンテナーイメージのレジストリアドレス。

    registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/spark:3.5.2-oss

    fs.oss.endpoint

    Alibaba Cloud OSS エンドポイント。

    oss-cn-beijing-internal.aliyuncs.com

    spark.eventLog.dir

    ログが保存されるパス。指定されたログパスが事前に作成されていることを確認してください。そうでない場合、ジョブの実行時にエラーが発生します。

    oss://<バケット名>/spark/spark-events

    1. 次の 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
    2. 次のコマンドを実行して、Spark ジョブを送信します。イメージがビルドされ、Secret が作成された後、ブラウザで http://127.0.0.1:18080 を開いて Spark ジョブのステータスを表示できます。

      kubectl apply -f spark-pi.yaml

      想定される出力:

      sparkapplication.sparkoperator.k8s.io/spark-pi created