Todos os produtos
Search
Central de documentação

E-MapReduce:Submit a Spark job using spark-submit

Última atualização: Oct 20, 2026

Envie um job do Spark usando a CLI spark-submit do EMR Serverless Spark a partir de uma instância ECS.

Pré-requisitos

  • O Java Development Kit (JDK) 1.8 ou superior deve estar instalado.

  • Se você usar um usuário RAM para enviar um job do Spark, adicione o usuário RAM ao workspace do EMR Serverless Spark e conceda a ele a função de desenvolvedor ou superior. Para mais informações, consulte Gerenciar usuários e funções.

Procedimento

Etapa 1: Baixar e instalar a ferramenta spark-submit do EMR Serverless

  1. Clique em emr-serverless-spark-tool-1.22.1-bin.zip para baixar o pacote de instalação.

  2. Faça o upload do pacote de instalação para a sua instância ECS. Para mais informações, consulte Fazer upload ou download de arquivos.

  3. Execute o comando a seguir para descompactar a ferramenta spark-submit do EMR Serverless.

    unzip emr-serverless-spark-tool-1.22.1-bin.zip

Etapa 2: Configurar parâmetros

Importante

Em um ambiente com o Spark instalado, se a variável de ambiente SPARK_CONF_DIR estiver definida, coloque o arquivo de configuração no diretório especificado por SPARK_CONF_DIR. Por exemplo, em um cluster EMR, esse diretório geralmente é /etc/taihao-apps/spark-conf. Caso contrário, o sistema retornará um erro.

  1. Execute o comando a seguir para modificar a configuração no arquivo connection.properties.

    vim emr-serverless-spark-tool-1.22.1/conf/connection.properties
  2. Configure o arquivo conforme o exemplo a seguir. Os parâmetros usam o formato key=value.

    accessKeyId=<ALIBABA_CLOUD_ACCESS_KEY_ID>
    accessKeySecret=<ALIBABA_CLOUD_ACCESS_KEY_SECRET>
    regionId=cn-hangzhou
    endpoint=emr-serverless-spark.cn-hangzhou.aliyuncs.com
    workspaceId=w-xxxxxxxxxxxx
    Importante

    O usuário RAM ou a função associada a este AccessKey deve estar autorizado no RAM e adicionado ao workspace do EMR Serverless Spark.

    A tabela a seguir descreve os parâmetros.

    Parâmetro

    Obrigatório

    Descrição

    accessKeyId

    Sim

    O AccessKey ID e o AccessKey Secret da conta Alibaba Cloud ou do usuário RAM que executa o job do Spark.

    Importante

    Ao configurar os parâmetros accessKeyId e accessKeySecret, certifique-se de que o usuário associado ao AccessKey tenha permissões de leitura e gravação para o OSS Bucket vinculado ao workspace. Você pode visualizar o OSS Bucket vinculado ao workspace na página Spark ao clicar em Details na coluna Actions do workspace.

    accessKeySecret

    Sim

    regionId

    Sim

    O ID da região. Este exemplo usa a região China (Hangzhou).

    endpoint

    Sim

    O endpoint do EMR Serverless Spark. Para mais informações, consulte Endpoints.

    Este exemplo usa o endpoint público para a região China (Hangzhou). O valor do parâmetro é emr-serverless-spark.cn-hangzhou.aliyuncs.com.

    Nota

    Se a sua instância ECS não tiver acesso à internet, use um endpoint VPC.

    workspaceId

    Sim

    O ID do workspace do EMR Serverless Spark.

Etapa 3: Enviar um job do Spark

  1. Execute o comando a seguir para acessar o diretório da ferramenta spark-submit do EMR Serverless.

    cd emr-serverless-spark-tool-1.22.1
  2. Selecione um método de envio com base no tipo do seu job.

    Ao enviar um job, especifique os recursos de arquivo dos quais o job depende, como um pacote JAR ou script Python. Esses recursos podem ser armazenados no OSS ou localmente. Todos os exemplos neste tópico usam recursos do OSS.

    spark-submit

    O spark-submit é a ferramenta de envio de uso geral do Spark para tarefas Java/Scala e PySpark.

    Jobs Java/Scala

    Este exemplo usa o spark-examples_2.12-3.5.2.jar, um exemplo integrado do Spark que calcula o valor de pi (π). Clique em spark-examples_2.12-3.5.2.jar para baixar o pacote JAR e faça o upload dele para o OSS.

    Nota

    O arquivo spark-examples_2.12-3.5.2.jar deve ser usado com uma versão de engine esr-4.x para enviar jobs. Se você estiver usando uma versão de engine esr-5.x, baixe spark-examples_2.13-4.0.1.jar para este exemplo.

    ./bin/spark-submit  --name SparkPi \
    --queue dev_queue  \
    --num-executors 5 \
    --driver-memory 1g \
    --executor-cores 2 \
    --executor-memory 2g \
    --class org.apache.spark.examples.SparkPi \
     oss://<yourBucket>/path/to/spark-examples_2.12-3.5.2.jar \
    10000

    Jobs PySpark

    Este exemplo usa DataFrame.py e employee.csv. Clique em DataFrame.py e employee.csv para baixar os arquivos de teste e faça o upload deles para o OSS.

    Nota
    • DataFrame.py é um trecho de código que usa o framework Apache Spark para processar dados no OSS.

    • employee.csv é um arquivo de dados que contém nomes, departamentos e salários de funcionários.

    ./bin/spark-submit --name PySpark \
    --queue dev_queue  \
    --num-executors 5 \
    --driver-memory 1g \
    --executor-cores 2 \
    --executor-memory 2g \
    --conf spark.tags.key=value \
    oss://<yourBucket>/path/to/DataFrame.py \
    oss://<yourBucket>/path/to/employee.csv

    A tabela a seguir descreve os parâmetros.

    • Parâmetros de código aberto suportados

      Parâmetro

      Exemplo

      Descrição

      --name

      SparkPi

      O nome da aplicação para o job do Spark.

      --class

      org.apache.spark.examples.SparkPi

      A classe de entrada para o job do Spark. Este parâmetro é obrigatório para aplicações Java ou Scala, mas não é necessário para aplicações Python.

      --num-executors

      5

      O número de executors para o job do Spark.

      --driver-cores

      1

      O número de núcleos do driver para o job do Spark.

      --driver-memory

      1g

      A quantidade de memória do driver para o job do Spark.

      --executor-cores

      2

      O número de núcleos do executor para o job do Spark.

      --executor-memory

      2g

      A quantidade de memória do executor para o job do Spark.

      --files

      oss://<yourBucket>/file1,oss://<yourBucket>/file2

      Os arquivos de recurso necessários para o job do Spark. Os arquivos podem ser armazenados no OSS ou localmente. Separe vários arquivos com vírgulas (,).

      --py-files

      oss://<yourBucket>/file1.py,oss://<yourBucket>/file2.py

      Os scripts Python necessários para o job do Spark. Os scripts podem ser armazenados no OSS ou localmente. Separe vários arquivos com vírgulas (,). Este parâmetro é apenas para aplicações PySpark.

      --jars

      oss://<yourBucket>/file1.jar,oss://<yourBucket>/file2.jar

      Os pacotes JAR necessários para o job do Spark. Os recursos podem ser armazenados no OSS ou localmente. Separe vários arquivos com vírgulas (,).

      --archives

      oss://<yourBucket>/archive.tar.gz#env,oss://<yourBucket>/archive2.zip

      Os arquivos compactados necessários para o job do Spark. Os recursos podem ser armazenados no OSS ou localmente. Separe vários arquivos com vírgulas (,).

      --queue

      root_queue

      O nome da fila onde o job do Spark é executado. Este nome deve corresponder ao nome da fila na seção de gerenciamento de filas do seu workspace do EMR Serverless Spark.

      --proxy-user

      test

      O valor especificado substitui a variável de ambiente HADOOP_USER_NAME. O comportamento é consistente com a versão de código aberto.

      --conf

      spark.tags.key=value

      Um parâmetro personalizado para o job do Spark.

      --status

      jr-8598aa9f459d****

      Verifica o status do job do Spark.

      --kill

      jr-8598aa9f459d****

      Encerra o job do Spark.

    • Parâmetros aprimorados

      Parâmetro

      Exemplo

      Descrição

      --detach

      Nenhum valor necessário

      Sai do spark-submit imediatamente após o envio, sem aguardar o status do job.

      --detail

      jr-8598aa9f459d****

      Exibe os detalhes do job do Spark.

      --release-version

      esr-4.1.1 (Spark 3.5.2, Scala 2.12)

      A versão da engine do Spark. Insira o número da versão exibido no console.

      --enable-template

      Nenhum valor necessário

      Ativa o recurso de modelo. O job então usa o modelo de configuração padrão do workspace.

      Se você criou uma Configurations em Configuration management, poderá especificar seu ID adicionando spark.emr.serverless.templateId ao parâmetro --conf. O job então aplica diretamente o modelo especificado. Para mais informações sobre como criar modelos, consulte Configuration management.

      • Se você especificar apenas --enable-template, a tarefa aplica automaticamente o modelo de configuração padrão do workspace.

      • Use apenas --conf para especificar o ID do modelo: A tarefa aplica diretamente o ID do modelo especificado.

      • Especificando tanto --enable-template quanto --conf: Se você especificar tanto --enable-template quanto --conf spark.emr.serverless.templateId, o ID do modelo em --conf substitui o modelo padrão.

      • Nenhum parâmetro especificado: Se você não usar --enable-template nem especificar --conf spark.emr.serverless.templateId, o job não aplicará nenhuma configuração de modelo.

      --timeout

      60

      O tempo limite para o job, em segundos.

      --workspace-id

      w-4b4d7925a797****

      O ID do workspace no nível do job. Substitui o parâmetro workspaceId no arquivo connection.properties.

    • Parâmetros de código aberto não suportados

      • --deploy-mode

      • --master

      • --repositories

      • --keytab

      • --principal

      • --total-executor-cores

      • --driver-library-path

      • --driver-class-path

      • --supervise

      • --verbose

    spark-sql

    O spark-sql é uma ferramenta para executar consultas ou scripts SQL diretamente.

    • Exemplo 1: Executar uma instrução SQL diretamente

      spark-sql -e "SHOW TABLES"

      Este comando lista todas as tabelas no banco de dados atual.

    • Exemplo 2: Executar um arquivo de script SQL

      spark-sql -f oss://<yourBucketname>/path/to/your/example.sql

      Este exemplo usa example.sql. Clique em example.sql para baixar o arquivo de teste e faça o upload dele para o OSS.

      Conteúdo de exemplo do arquivo example.sql

      CREATE TABLE IF NOT EXISTS employees (
          id INT,
          name STRING,
          age INT,
          department STRING
      );
      INSERT INTO employees VALUES
      (1, 'Alice', 30, 'Engineering'),
      (2, 'Bob', 25, 'Marketing'),
      (3, 'Charlie', 35, 'Sales');
      SELECT * FROM employees;
      

    A tabela a seguir descreve os parâmetros.

    Parâmetro

    Exemplo

    Descrição

    -e "&lt;sql&gt;"

    -e "SELECT * FROM table"

    Executa uma instrução SQL inline a partir da linha de comando.

    -f &lt;path&gt;

    -f oss://path/script.sql

    Executa um arquivo de script SQL a partir de um caminho especificado.

Etapa 4: Consultar um job do Spark

CLI

Consultar o status do job

cd emr-serverless-spark-tool-1.22.1
./bin/spark-submit --status <jr-8598aa9f459d****>

Consultar os detalhes do job

cd emr-serverless-spark-tool-1.22.1
./bin/spark-submit --detail <jr-8598aa9f459d****>

UI

  1. Na página EMR Serverless Spark, clique em Job History no painel de navegação à esquerda.

  2. Na página Job History, na aba Development Job Runs, visualize os jobs enviados.

    A lista de jobs inclui as colunas Job name/Job run ID, Status, Tags, Submission time e Actions. Na coluna Actions, clique em Stop, Details ou Spark UI.

(Opcional) Etapa 5: Encerrar um job do Spark

cd emr-serverless-spark-tool-1.22.1
./bin/spark-submit --kill <jr-8598aa9f459d****>
Nota

Você pode encerrar apenas jobs que estão no estado running.

Usar recursos de GPU

Envie jobs que utilizam recursos de GPU ao especificar os seguintes parâmetros na opção --conf do comando spark-submit.

Parâmetro

Descrição

spark.emr.serverless.driver.gpu.spec

Especifica o tipo de instância GPU para o driver. Apenas um único tipo de instância pode ser especificado, e a fila GPU selecionada para o driver deve conter este tipo de instância. Valor de exemplo: ecs.gn7i-c8g1.2xlarge.

spark.emr.serverless.executor.gpu.spec

Especifica o tipo de instância GPU para os executors. Apenas um único tipo de instância pode ser especificado, e a fila GPU selecionada para os executors deve conter este tipo de instância. Valor de exemplo: ecs.gn7i-c8g1.2xlarge.

spark.emr.serverless.executor.queue

Especifica a fila ocupada pelos executors. Se este parâmetro não for especificado, os executors usam a mesma fila do driver. A fila especificada deve ser uma fila GPU. Valor de exemplo: gpu_dev_queue.

spark.emr.serverless.driver.gpu.driver.version

Especifica a versão do driver GPU para o driver. Valores válidos (padrão: Tesla 550, CUDA 12.4):

  • tesla=550: Tesla 550, CUDA 12.4.

  • tesla=470: Tesla 470, CUDA 11.4.

  • tesla=535: Tesla 535, CUDA 12.2.

spark.emr.serverless.executor.gpu.driver.version

Especifica a versão do driver GPU para os executors. Os valores válidos são os mesmos de spark.emr.serverless.driver.gpu.driver.version. Valor padrão: Tesla 550 (CUDA 12.4).

Ao usar recursos de GPU, observe os seguintes limites de configuração de recursos:

  • Recursos de computação do driver: a soma de todas as configurações de memória (mem) do driver não pode exceder o tamanho de memória da instância GPU selecionada.

  • Recursos de computação do executor: a soma de todas as configurações de memória (mem) dos executors não pode exceder o tamanho de memória da instância GPU selecionada.

FAQ

Como especificar uma conexão de rede ao enviar um job em lote com a ferramenta spark-submit?

  1. Crie uma conexão de rede. Para mais informações, consulte Adicionar uma conexão de rede.

  2. No comando spark-submit, use --conf para especificar a conexão de rede.

    --conf spark.emr.serverless.network.service.name=<networkname>

    Substitua <networkname> pelo nome da sua conexão de rede.