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
Clique em emr-serverless-spark-tool-1.22.1-bin.zip para baixar o pacote de instalação.
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.
-
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
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.
-
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 -
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-xxxxxxxxxxxxImportanteO usuário RAM ou a função associada a este AccessKey deve estar autorizado no RAM e adicionado ao workspace do EMR Serverless Spark.
Para autorização do 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
O AccessKey ID e o 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 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.NotaSe 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
-
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 -
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.
NotaO arquivo
spark-examples_2.12-3.5.2.jardeve 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 \ 10000Jobs 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.
NotaDataFrame.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.csvA 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-submitimediatamente 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.templateIdao 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
--confpara especificar o ID do modelo: A tarefa aplica diretamente o ID do modelo especificado. -
Especificando tanto
--enable-templatequanto--conf: Se você especificar tanto--enable-templatequanto--conf spark.emr.serverless.templateId, o ID do modelo em--confsubstitui o modelo padrão. -
Nenhum parâmetro especificado: Se você não usar
--enable-templatenem 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
workspaceIdno arquivoconnection.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.sqlEste exemplo usa example.sql. Clique em example.sql para baixar o arquivo de teste e faça o 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: 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
Na página EMR Serverless Spark, clique em Job History no painel de navegação à esquerda.
-
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****>
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 |
|
|
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: |
|
|
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: |
|
|
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: |
|
|
Especifica a versão do driver GPU para o driver. Valores válidos (padrão: Tesla 550, CUDA 12.4):
|
|
|
Especifica a versão do driver GPU para os executors. Os valores válidos são os mesmos de |
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?
Crie uma conexão de rede. Para mais informações, consulte Adicionar uma conexão de rede.
-
No comando spark-submit, use
--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.