Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:View Spark jobs with Spark History Server

Última atualização: Sep 29, 2026

Persista logs de jobs do Spark e visualize detalhes de jobs concluídos, como estágios, tarefas e uso de recursos, por meio do Spark History Server.

Pré-requisitos

Etapa 1: Implante o add-on ack-spark-history-server

  1. Faça login no ACK console. No painel de navegação à esquerda, clique em Marketplace > Marketplace.

  2. Na página Marketplace, clique na aba App Catalog, pesquise e selecione ack-spark-history-server.

  3. Na página ack-spark-history-server, clique em Deploy.

  4. No painel Create, selecione um cluster e um namespace e clique em Next.

  5. Na página Parameters, defina os parâmetros e clique em OK.

    Os parâmetros a seguir configuram o armazenamento de logs, as variáveis de ambiente e o service. Para ver todas as opções, consulte a aba ConfigMaps na página ack-spark-history-server.

    Nota

    Ao implantar o ack-spark-history-server, especifique um armazenamento de backend para os logs, como Object Storage Service (OSS), um persistent volume claim (PVC) ou HDFS.

    • (Obrigatório) Configure o armazenamento de backend para logs

      Escolha OSS, PVC ou HDFS como armazenamento de backend.

      OSS

      Defina os parâmetros a seguir.

      Importante

      Os logs de jobs do Spark são enviados apenas após a conclusão do job. Não é possível visualizar logs de jobs em execução em tempo real.

      Parameter

      Description

      Example

      spark.history.fs.logDirectory

      A URL do diretório de logs. Crie o diretório, como spark/spark-events, antes de implantar o add-on. Consulte Managing Directories.

      oss://<Bucket name>/spark/spark-events

      storage.oss.enable

      Ativa o OSS ou OSS-HDFS como armazenamento de backend para logs.

      true

      storage.oss.endpoint

      O endpoint do OSS.

      oss-cn-beijing-internal.aliyuncs.com

      storage.oss.existingSecret

      (Recomendado) O nome de um Secret existente com as credenciais de acesso ao OSS. Consulte Example of an AccessKey Secret YAML file.

      spark-oss-secret

      storage.oss.createSecret

      Se nenhum Secret existente for especificado, um novo Secret é criado automaticamente para armazenar as credenciais de acesso ao OSS.

      Não aplicável

      storage.oss.createSecret.accessKeyId

      O AccessKey ID da sua conta Alibaba Cloud.

      yourAccessKeyID

      storage.oss.createSecret.accessKeySecret

      O AccessKey Secret da sua conta Alibaba Cloud.

      yourAccessKeySecret

      Exemplo de arquivo YAML do AccessKey Secret

      O Secret deve conter os campos OSS_ACCESS_KEY_ID e OSS_ACCESS_KEY_SECRET.

      1. Crie um arquivo chamado spark-oss-secret.yaml:

        apiVersion: v1
        kind: Secret
        metadata:
          name: spark-oss-secret
          namespace: spark-operator
        stringData:
          OSS_ACCESS_KEY_ID: ""       # The AccessKey ID of your Alibaba Cloud account.
          OSS_ACCESS_KEY_SECRET: ""   # The AccessKey Secret of your Alibaba Cloud account.
      2. Crie o AccessKey Secret:

        kubectl apply -f spark-oss-secret.yaml

      PVC

      Defina os parâmetros a seguir.

      Parameter

      Description

      Example

      spark.history.fs.logDirectory

      A URL do diretório de logs.

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

      storage.pvc.enable

      Ativa um PVC como armazenamento de backend para logs.

      true

      storage.pvc.name

      O nome de um PVC existente. Verifique se o PV e o PVC foram criados e vinculados no namespace ack-spark-history-server. Consulte Storage-CSI.

      "<PVC name>"

      storage.pvc.mountPath

      O caminho de montagem do PVC no container.

      "/mnt"

      HDFS

      Defina o parâmetro a seguir.

      Parameter

      Description

      Example

      spark.history.fs.logDirectory

      A URL do diretório de logs.

      hdfs://namenode:port/spark/spark-events

    • (Opcional) Tipo e porta do service

      Por padrão, um service expõe a interface web do History Server. Configure o tipo e a porta com service.type e service.port.

      Parameter

      Description

      Default

      service.type

      O tipo do service. Valores válidos:

      • ClusterIP

      • NodePort

      • LoadBalancer

      ClusterIP

      service.port

      A porta para acessar a interface web.

      18080

    • (Opcional) Variáveis de ambiente

      Adicione variáveis de ambiente em env para configurar o History Server.

      Environment variable

      Description

      Default

      SPARK_DAEMON_MEMORY

      A memória alocada ao Spark History Server.

      1g

      SPARK_DAEMON_JAVA_OPTS

      As opções JVM para o Spark History Server.

      ""

      SPARK_DAEMON_CLASSPATH

      O classpath do Spark History Server.

      ""

      SPARK_PUBLIC_DNS

      O endereço público do Spark History Server. Se não definido, o histórico da aplicação usa o endereço interno, o que pode causar links quebrados.

      ""

      SPARK_HISTORY_OPTS

      Um conjunto de propriedades de configuração spark.history.*.

      ""

      Adicione configurações em sparkConf para personalizar o History Server. Configurações comuns:

      Property

      Description

      Default

      spark.history.fs.update.interval

      O intervalo de verificação de atualizações nos logs.

      10s

      spark.history.fs.retainedApplications

      O número máximo de UIs de aplicação em cache.

      50

      spark.history.ui.port

      A porta do Spark History Server.

      18080

      spark.history.fs.cleaner.enabled

      Indica se os logs de eventos são limpos periodicamente.

      false

      spark.history.fs.cleaner.interval

      O intervalo de limpeza dos logs de eventos quando spark.history.fs.cleaner.enabled=true.

      1d

      spark.history.fs.cleaner.maxAge

      A idade máxima dos logs de eventos antes da exclusão quando spark.history.fs.cleaner.enabled=true.

      7d

      spark.history.fs.cleaner.maxNum

      O número máximo de arquivos de log retidos quando spark.history.fs.cleaner.enabled=true. Os arquivos excedentes são excluídos durante a limpeza.

      Int.MaxValue

      spark.history.fs.driverlog.cleaner.enabled

      Indica se os logs de eventos do driver são limpos periodicamente.

      spark.history.fs.cleaner.enabled

      spark.history.fs.driverlog.cleaner.interval

      O intervalo de limpeza dos logs de eventos do driver quando spark.history.fs.driverlog.cleaner.enabled=true.

      spark.history.fs.cleaner.interval

      spark.history.fs.driverlog.cleaner.maxAge

      A idade máxima dos logs de eventos do driver antes da exclusão quando spark.history.fs.driverlog.cleaner.enabled=true.

      spark.history.fs.cleaner.maxAge

      spark.history.fs.numReplayThreads

      O número de threads para processar arquivos de log.

      25% dos núcleos de CPU disponíveis.

      spark.history.store.maxDiskUsage

      O espaço máximo em disco para o cache do histórico da aplicação.

      10g

Etapa 2: Acesse a interface web

Por padrão, o tipo de service é ClusterIP. Encaminhe uma porta local para acessar a interface web. Para usar uma instância SLB existente, consulte Expose an application by using a Service that is associated with an existing SLB instance.

Importante

O kubectl port-forward destina-se apenas a verificações de teste e não é adequado para produção devido a riscos de segurança.

  1. Configure o encaminhamento de porta local:

    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}

    Saída esperada:

    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. Acesse http://127.0.0.1:18080 para visualizar a interface web do Spark History Server.

    image

Etapa 3: Ative o registro de eventos

Ative o registro de eventos nos seus jobs do Spark configurando os parâmetros a seguir.

Parameter

Description

Example

spark.eventLog.enabled

Ativa o registro de eventos. Valores válidos:

  • true

  • false

true

spark.eventLog.dir

O caminho de armazenamento dos logs de eventos. Exemplos:

  • oss://<Bucket name>/spark/spark-events (caminho OSS)

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

  • file:///tmp/spark/spark-events (caminho local)

oss://<Bucket name>/spark/spark-events

Exemplo: Configure o OSS para registro de eventos

O exemplo a seguir configura o OSS como armazenamento de backend para o registro de eventos.

  1. Compile uma imagem de container do Spark

    As imagens oficiais do Spark não incluem os pacotes JAR do OSS. Compile uma imagem personalizada com os JARs do Hadoop OSS SDK indicados abaixo e envie-a para o seu repositório. Consulte Build an image by using an Enterprise Edition instance. Utilize JARs de dependência compatíveis com a versão do Hadoop correspondente à sua versão do Spark.

    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. Crie um Secret

    Crie um Secret no namespace do seu job do Spark para armazenar as credenciais de acesso ao OSS.

    1. Crie o seguinte arquivo de manifesto spark-oss-secret.yaml:

      apiVersion: v1
      kind: Secret
      metadata:
        name: spark-oss-secret
        namespace: default
      stringData:
        # The AccessKey ID of your Alibaba Cloud account.
        OSS_ACCESS_KEY_ID: ""
        # The AccessKey Secret of your Alibaba Cloud account.
        OSS_ACCESS_KEY_SECRET: ""
    2. Crie o Secret:

      kubectl apply -f spark-oss-secret.yaml

      Saída esperada:

      secret/spark-oss-secret created
  3. Envie o job do Spark

    Modifique os parâmetros a seguir no manifesto SparkApplication para o seu ambiente:

    Parameter

    Description

    Example

    image

    O endereço da imagem de container do Spark personalizada.

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

    fs.oss.endpoint

    O endpoint do OSS.

    oss-cn-beijing-internal.aliyuncs.com

    spark.eventLog.dir

    O caminho de armazenamento dos logs. O caminho deve existir; caso contrário, o job falha em tempo de execução.

    oss://<Bucket name>/spark/spark-events

    1. Crie o seguinte manifesto SparkApplication e salve-o como 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
          # The OSS endpoint.
          fs.oss.endpoint: oss-cn-beijing-internal.aliyuncs.com
          fs.oss.credentials.provider: com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider
        sparkConf:
          spark.eventLog.enabled: "true"
          # The path where logs are stored.
          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
    2. Envie o job do Spark. Após a conclusão, visualize o histórico em http://127.0.0.1:18080.

      kubectl apply -f spark-pi.yaml

      Saída esperada:

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