Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Visualizar jobs do Spark com o Spark History Server

Última atualização: Jun 27, 2026

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

Pré-requisitos

Etapa 1: Implantar 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 do ack-spark-history-server, clique em Deploy.

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

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

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

    Nota

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

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

      Escolha OSS, PVC ou HDFS como backend de armazenamento.

      OSS

      Defina os seguintes parâmetros.

      Importante

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

      Parâmetro

      Descrição

      Exemplo

      spark.history.fs.logDirectory

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

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

      storage.oss.enable

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

      true

      storage.oss.endpoint

      Endpoint do OSS.

      oss-cn-beijing-internal.aliyuncs.com

      storage.oss.existingSecret

      (Recomendado) Nome de um Secret existente com credenciais de acesso ao OSS. Consulte Exemplo de arquivo YAML de AccessKey Secret.

      spark-oss-secret

      storage.oss.createSecret

      Se nenhum Secret existente for especificado, o sistema cria automaticamente um novo Secret para armazenar as credenciais de acesso ao OSS.

      Não aplicável

      storage.oss.createSecret.accessKeyId

      AccessKey ID da sua conta Alibaba Cloud.

      yourAccessKeyID

      storage.oss.createSecret.accessKeySecret

      AccessKey Secret da sua conta Alibaba Cloud.

      yourAccessKeySecret

      Exemplo de arquivo YAML de 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 seguintes parâmetros.

      Parâmetro

      Descrição

      Exemplo

      spark.history.fs.logDirectory

      URL do diretório de logs.

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

      storage.pvc.enable

      Ativa um PVC como backend de armazenamento para logs.

      true

      storage.pvc.name

      Nome de um PVC existente. Certifique-se de que o PV e o PVC estejam criados e vinculados no namespace ack-spark-history-server. Consulte Storage-CSI.

      "<PVC name>"

      storage.pvc.mountPath

      Caminho de montagem do PVC no contêiner.

      "/mnt"

      HDFS

      Defina o seguinte parâmetro.

      Parâmetro

      Descrição

      Exemplo

      spark.history.fs.logDirectory

      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.

      Parâmetro

      Descrição

      Padrão

      service.type

      Tipo do Service. Valores válidos:

      • ClusterIP

      • NodePort

      • LoadBalancer

      ClusterIP

      service.port

      Porta para acessar a interface web.

      18080

    • (Opcional) Variáveis de ambiente

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

      Variável de ambiente

      Descrição

      Padrão

      SPARK_DAEMON_MEMORY

      Memória alocada para o Spark History Server.

      1g

      SPARK_DAEMON_JAVA_OPTS

      Opções da JVM para o Spark History Server.

      ""

      SPARK_DAEMON_CLASSPATH

      Classpath para o Spark History Server.

      ""

      SPARK_PUBLIC_DNS

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

      ""

      SPARK_HISTORY_OPTS

      Conjunto de propriedades de configuração spark.history.*.

      ""

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

      Propriedade

      Descrição

      Padrão

      spark.history.fs.update.interval

      Intervalo para verificar atualizações de logs.

      10s

      spark.history.fs.retainedApplications

      Número máximo de interfaces de aplicação mantidas em cache.

      50

      spark.history.ui.port

      Porta do Spark History Server.

      18080

      spark.history.fs.cleaner.enabled

      Define se os logs de eventos devem ser limpos periodicamente.

      false

      spark.history.fs.cleaner.interval

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

      1d

      spark.history.fs.cleaner.maxAge

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

      7d

      spark.history.fs.cleaner.maxNum

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

      Int.MaxValue

      spark.history.fs.driverlog.cleaner.enabled

      Define se os logs de eventos do driver devem ser limpos periodicamente.

      spark.history.fs.cleaner.enabled

      spark.history.fs.driverlog.cleaner.interval

      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

      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

      Número de threads para processamento de arquivos de log.

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

      spark.history.store.maxDiskUsage

      Espaço máximo em disco para o cache de histórico de aplicações.

      10g

Etapa 2: Acessar a interface web

Por padrão, o tipo do Service é ClusterIP. Encaminhe uma porta local para acessar a interface web. Para usar uma instância SLB existente, consulte Expor uma aplicação usando um Service associado a uma instância SLB existente.

Importante

O comando kubectl port-forward destina-se apenas a testes e verificações, não sendo 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: Ativar registro de eventos

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

Parâmetro

Descrição

Exemplo

spark.eventLog.enabled

Ativa o registro de eventos. Valores válidos:

  • true

  • false

true

spark.eventLog.dir

Caminho de armazenamento para 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 backend de armazenamento para registro de eventos.

  1. Crie uma imagem de contêiner Spark

    As imagens Spark da comunidade não incluem os pacotes JAR do OSS. Crie uma imagem personalizada com os JARs do Hadoop OSS SDK mostrados abaixo e envie-a para seu repositório. Consulte Criar uma imagem usando uma instância Enterprise Edition. 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 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 Spark

    Modifique os seguintes parâmetros no manifesto SparkApplication conforme seu ambiente:

    Parâmetro

    Descrição

    Exemplo

    image

    Endereço da imagem personalizada do contêiner Spark.

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

    fs.oss.endpoint

    Endpoint do OSS.

    oss-cn-beijing-internal.aliyuncs.com

    spark.eventLog.dir

    Caminho de armazenamento dos logs. O caminho deve existir; caso contrário, o job falhará 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 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