Este tópico descreve como enviar um job do Spark com a ferramenta de linha de comando spark-submit do EMR Serverless Spark. O exemplo utiliza uma instância ECS para se conectar ao EMR Serverless Spark.
Pré-requisitos
Java Development Kit (JDK) 1.8 ou posterior instalado.
Se você utilizar um usuário RAM para enviar um job do Spark, adicione-o ao workspace do EMR Serverless Spark e conceda a ele uma função de desenvolvedor ou superior. Para mais informações, consulte Gerenciar usuários e funções.
Procedimento
Etapa 1: Baixe e instale a ferramenta spark-submit do EMR Serverless
Clique em emr-serverless-spark-tool-1.16.0-bin.zip para baixar o pacote de instalação.
Faça upload do pacote de instalação para sua instância ECS. Para mais informações, consulte Fazer upload ou download de arquivos.
-
Execute o comando a seguir para descompactar a ferramenta spark-submit do EMR Serverless.
unzip emr-serverless-spark-tool-1.16.0-bin.zip
Etapa 2: Configure os parâmetros
Em ambientes com 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.
-
Execute o comando a seguir para modificar a configuração no arquivo
connection.properties.vim emr-serverless-spark-tool-1.16.0/conf/connection.properties -
Configure o arquivo conforme o exemplo abaixo, utilizando parâmetros no 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-xxxxxxxxxxxxImportanteO usuário RAM ou a função associada a este AccessKey deve ter autorização no RAM e estar adicionado ao workspace do EMR Serverless Spark.
Para autorização no RAM, consulte Conceder permissões a um usuário RAM.
Para gerenciamento de usuários e funções em um workspace do EMR Serverless Spark, consulte Gerenciar usuários e funções.
A tabela a seguir descreve os parâmetros.
Parâmetro
Obrigatório
Descrição
accessKeyId
Sim
AccessKey ID e AccessKey Secret da conta Alibaba Cloud ou do usuário RAM que executa o job do Spark.
ImportanteAo configurar os parâmetros
accessKeyIdeaccessKeySecret, certifique-se de que o usuário associado ao AccessKey tenha permissões de leitura e gravação no OSS Bucket vinculado ao workspace. Visualize o OSS Bucket vinculado na página Spark clicando em Details na coluna Actions do workspace.accessKeySecret
Sim
regionId
Sim
ID da região. Este exemplo utiliza a região China (Hangzhou).
endpoint
Sim
Endpoint do EMR Serverless Spark. Para mais informações, consulte Endpoints.
Este exemplo usa o endpoint público da região China (Hangzhou). O valor do parâmetro é
emr-serverless-spark.cn-hangzhou.aliyuncs.com.NotaSe sua instância ECS não tiver acesso à internet, use um endpoint de VPC.
workspaceId
Sim
ID do workspace do EMR Serverless Spark.
Etapa 3: Envie um job do Spark
-
Execute o comando a seguir para acessar o diretório da ferramenta spark-submit do EMR Serverless.
cd emr-serverless-spark-tool-1.16.0 -
Selecione um método de envio com base no tipo do seu job.
Ao enviar um job, especifique os recursos de arquivo dos quais ele depende, como um pacote JAR ou script Python. Armazene esses recursos no OSS ou localmente. Todos os exemplos deste tópico utilizam recursos no OSS.
spark-submit
A ferramenta
spark-submité um utilitário de envio de tarefas de uso geral fornecido pelo Spark para tarefas Java/Scala e PySpark.Jobs Java/Scala
Este exemplo utiliza spark-examples_2.12-3.5.2.jar. Clique em spark-examples_2.12-3.5.2.jar para baixar o pacote JAR de teste e faça upload dele para o OSS. Trata-se de um exemplo simples integrado ao Spark que calcula o valor de pi (π).
NotaUse o arquivo
spark-examples_2.12-3.5.2.jarcom a versão de engine esr-4.x para enviar jobs. Se estiver utilizando a 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 \ 10000Jobs PySpark
Este exemplo utiliza DataFrame.py e employee.csv. Clique em DataFrame.py e employee.csv para baixar os arquivos de teste e faça upload deles para o OSS.
NotaDataFrame.py é um trecho de código que usa o framework Apache Spark para processar dados no OSS.
employee.csv é um arquivo de dados contendo nomes de funcionários, departamentos e salá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.csvOs parâmetros estão descritos abaixo.
-
Parâmetros open source suportados
Parâmetro
Exemplo
Descrição
--name
SparkPi
Nome da aplicação para o job do Spark.
--class
org.apache.spark.examples.SparkPi
Classe de entrada para o job do Spark. Obrigatório para aplicações Java ou Scala, mas não necessário para Python.
--num-executors
5
Quantidade de executores para o job do Spark.
--driver-cores
1
Número de núcleos do driver para o job do Spark.
--driver-memory
1g
Quantidade de memória do driver para o job do Spark.
--executor-cores
2
Número de núcleos do executor para o job do Spark.
--executor-memory
2g
Quantidade de memória do executor para o job do Spark.
--files
oss://<yourBucket>/file1,oss://<yourBucket>/file2
Arquivos de recurso necessários para o job do Spark. Podem ser armazenados no OSS ou localmente. Separe múltiplos arquivos com vírgulas (,).
--py-files
oss://<yourBucket>/file1.py,oss://<yourBucket>/file2.py
Scripts Python necessários para o job do Spark. Podem ser armazenados no OSS ou localmente. Separe múltiplos arquivos com vírgulas (,). Exclusivo para aplicações PySpark.
--jars
oss://<yourBucket>/file1.jar,oss://<yourBucket>/file2.jar
Pacotes JAR necessários para o job do Spark. Podem ser armazenados no OSS ou localmente. Separe múltiplos arquivos com vírgulas (,).
--archives
oss://<yourBucket>/archive.tar.gz#env,oss://<yourBucket>/archive2.zip
Arquivos compactados necessários para o job do Spark. Podem ser armazenados no OSS ou localmente. Separe múltiplos arquivos com vírgulas (,).
--queue
root_queue
Nome da fila onde o job do Spark será executado. Deve corresponder exatamente ao nome definido na seção de gerenciamento de filas do seu workspace EMR Serverless Spark.
--proxy-user
test
O valor definido substitui a variável de ambiente
HADOOP_USER_NAME, mantendo comportamento consistente com a versão open source.--conf
spark.tags.key=value
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
Não requer valor
Faz com que o
spark-submitencerre imediatamente após o envio do job, sem aguardar o status da execução.--detail
jr-8598aa9f459d****
Exibe os detalhes do job do Spark.
--release-version
esr-4.1.1 (Spark 3.5.2, Scala 2.12)
Especifica a versão do Spark. Insira o número da versão da engine exibido no console.
--enable-template
Não requer valor
Ativa o recurso de modelo. O job utilizará o modelo de configuração padrão do workspace.
Se você criou uma configuração em Configurations dentro de Configuration management, especifique seu ID adicionando
spark.emr.serverless.templateIdao parâmetro--conf. O job aplicará diretamente o modelo especificado. Para mais informações sobre criação de modelos, consulte Gerenciamento de configurações.-
Ao especificar apenas
--enable-template, a tarefa aplica automaticamente o modelo de configuração padrão do workspace. -
Usar apenas
--confpara especificar o ID do modelo: A tarefa aplica diretamente o ID do modelo indicado. -
Especificar tanto
--enable-templatequanto--conf: Se ambos forem definidos (--enable-templatee--conf spark.emr.serverless.templateId), o ID do modelo em--confsubstitui o modelo padrão. -
Nenhum parâmetro especificado: Sem o uso de
--enable-templateou--conf spark.emr.serverless.templateId, o job não aplicará nenhuma configuração de modelo.
--timeout
60
Tempo limite do job, em segundos.
--workspace-id
w-4b4d7925a797****
Define o ID do workspace no nível do job. Isso substitui o parâmetro
workspaceIdno arquivoconnection.properties. -
-
Parâmetros open source não suportados
--deploy-mode
--master
--repositories
--keytab
--principal
--total-executor-cores
--driver-library-path
--driver-class-path
--supervise
--verbose
spark-sql
A ferramenta
spark-sqlé específica 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.sqlEste exemplo utiliza example.sql. Clique em example.sql para baixar o arquivo de teste e faça upload dele para o OSS.
A tabela a seguir descreve os parâmetros.
Parâmetro
Exemplo
Descrição
-e "<sql>"-e "SELECT * FROM table"Executa uma instrução SQL inline a partir da linha de comando.
-f <path>-f oss://path/script.sqlExecuta um arquivo de script SQL a partir de um caminho especificado.
Etapa 4: Consulte um job do Spark
CLI
Consultar status do job
cd emr-serverless-spark-tool-1.16.0
./bin/spark-submit --status <jr-8598aa9f459d****>
Consultar detalhes do job
cd emr-serverless-spark-tool-1.16.0
./bin/spark-submit --detail <jr-8598aa9f459d****>
UI
Na página EMR Serverless Spark, clique em Job History no painel de navegação à esquerda.
-
Na página Job History, acesse a aba Development Job Runs para visualizar 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: Encerre um job do Spark
cd emr-serverless-spark-tool-1.16.0
./bin/spark-submit --kill <jr-8598aa9f459d****>
É possível encerrar apenas jobs no estado running.
Perguntas frequentes
Como especifico uma conexão de rede ao enviar um job em lote com a ferramenta spark-submit?
Crie uma conexão de rede. Para mais informações, consulte Adicionar uma conexão de rede.
-
No comando spark-submit, utilize
--confpara especificar a conexão de rede.--conf spark.emr.serverless.network.service.name=<networkname>Substitua <networkname> pelo nome da sua conexão de rede.