As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Usando as configurações do Spark ao executar trabalhos sem servidor EMR
Você pode executar trabalhos do Spark em uma aplicação com o parâmetro type
definido como SPARK
. Os trabalhos devem ser compatíveis com a versão do Spark compatível com a versão de EMR lançamento da Amazon. Por exemplo, quando você executa trabalhos com a EMR versão 6.6.0 da Amazon, seu trabalho deve ser compatível com o Apache Spark 3.2.0. Para obter informações sobre as versões da aplicação para cada versão, consulte Versões de EMR lançamento do Amazon Serverless.
Parâmetros do trabalho do Spark
Ao usar o StartJobRun
APIpara executar uma tarefa do Spark, você pode especificar os seguintes parâmetros.
Parâmetros necessários
Perfil de runtime de trabalhos do Spark
Use executionRoleArn
para especificar a ARN IAM função que seu aplicativo usa para executar trabalhos do Spark. Esse perfil deve conter as seguintes permissões:
-
Leitura dos buckets do S3 ou de outras fontes de dados em que os dados residem
-
Leia dos buckets ou prefixos do S3 em que seu PySpark script ou arquivo reside JAR
-
Gravação nos buckets do S3 onde você pretende gravar a saída final
-
Gravação de logs em um bucket ou prefixo do S3 que
S3MonitoringConfiguration
especifica -
Acesso às KMS chaves se você usar KMS chaves para criptografar dados em seu bucket do S3
-
Acesso ao AWS Glue Data Catalog se você usa o Spark SQL
Se seu trabalho do Spark ler ou gravar dados em ou de outras fontes de dados, especifique as permissões apropriadas nessa IAM função. Se você não fornecer essas permissões para a IAM função, o trabalho poderá falhar. Para ter mais informações, consulte Funções de tempo de execução de trabalho para Amazon EMR Serverless e Armazenamento de logs.
Parâmetro do driver de trabalhos do Spark
Use jobDriver
para fornecer entradas ao trabalho. O parâmetro do driver do trabalho aceita somente um valor para o tipo de trabalho que você deseja executar. Para um trabalho do Spark, o valor do parâmetro é sparkSubmit
. Você pode usar esse tipo de tarefa para executar Scala, Java PySpark, SparkR e qualquer outra tarefa compatível por meio do envio do Spark. Os trabalhos do Spark têm os seguintes parâmetros:
-
sparkSubmitParameters
: esses são os parâmetros adicionais do Spark que você deseja enviar para o trabalho. Use este parâmetro para substituir as propriedades padrão do Spark, como a memória do driver ou o número de executores, como aqueles definidos nos argumentos--conf
ou--class
. -
entryPointArguments
— Essa é uma matriz de argumentos que você deseja passar para seu arquivo principal JAR ou Python. Você deve realizar a leitura desses parâmetros usando seu código de Entrypoint. Separe cada argumento da matriz por uma vírgula. -
entryPoint
— Essa é a referência no Amazon S3 para o arquivo principal ou JAR Python que você deseja executar. Se você estiver executando um Scala ou JavaJAR, especifique a classe de entrada principal noSparkSubmitParameters
usando o--class
argumento.
Para obter informações adicionais, consulte Launching Applications with spark-submit
Parâmetro de substituição de configuração do Spark
Use configurationOverrides
para substituir as propriedades de configuração no nível de monitoramento e no nível de aplicação. Esse parâmetro aceita um JSON objeto com os dois campos a seguir:
-
monitoringConfiguration
‐ Use esse campo para especificar o Amazon S3 URL (s3MonitoringConfiguration
) em que você deseja que o trabalho EMR sem servidor armazene os registros do seu trabalho do Spark. Certifique-se de ter criado esse bucket com o mesmo Conta da AWS que hospeda seu aplicativo e no mesmo Região da AWS local em que seu trabalho está sendo executado. -
applicationConfiguration
: para substituir as configurações padrão de uma aplicação, você pode fornecer um objeto de configuração nesse campo. Você pode usar uma sintaxe abreviada para fornecer a configuração ou pode referenciar o objeto de configuração em um arquivo. JSON Os objetos de configuração consistem em uma classificação, propriedades e configurações opcionais aninhadas As propriedades consistem nas configurações que você deseja substituir neste arquivo. Você pode especificar várias classificações para vários aplicativos em um único JSON objeto.nota
As classificações de configuração disponíveis variam de acordo com a versão específica do EMR Serverless. Por exemplo, classificações para Log4j personalizado
spark-driver-log4j2
espark-executor-log4j2
estão disponíveis somente nas versões 6.8.0 e superiores.
Se você usar a mesma configuração em uma substituição de aplicação e nos parâmetros de envio do Spark, os parâmetros de envio do Spark terão prioridade. As configurações são classificadas em prioridade da seguinte forma, da mais alta para a mais baixa:
-
Configuração que o EMR Serverless fornece quando é criado.
SparkSession
-
Configuração que você fornece como parte dos
sparkSubmitParameters
com o argumento--conf
. -
A configuração que você fornece como parte da aplicação é substituída ao iniciar um trabalho.
-
Configuração fornecida como parte da
runtimeConfiguration
ao criar uma aplicação. -
Configurações otimizadas que a Amazon EMR usa para o lançamento.
-
Configurações padrão de código aberto para a aplicação.
Para obter mais informações sobre como declarar configurações no nível da aplicação e substituir configurações durante a execução do trabalho, consulte Configuração padrão do aplicativo para EMR Serverless.
Otimização dinâmica da alocação de recursos do Spark
Use dynamicAllocationOptimization
para otimizar o uso de recursos no EMR Serverless. Definir essa propriedade como true
em sua classificação de configuração do Spark indica que o EMR Serverless otimizará a alocação de recursos do executor para melhor alinhar a taxa na qual o Spark solicita e cancela os executores com a taxa na qual o Serverless cria e libera trabalhadores. EMR Ao fazer isso, o EMR Serverless reutiliza de forma mais otimizada os trabalhadores em todos os estágios, resultando em menor custo ao executar trabalhos com vários estágios, mantendo o mesmo desempenho.
Essa propriedade está disponível em todas as versões de EMR lançamento da Amazon.
O exemplo a seguir é de uma classificação de configuração com dynamicAllocationOptimization
.
[ { "Classification": "spark", "Properties": { "dynamicAllocationOptimization": "true" } } ]
Considere o seguinte se estiver usando a otimização de alocação dinâmica:
-
Essa otimização está disponível nos trabalhos do Spark para os quais você habilitou a alocação dinâmica de recursos.
-
Para obter a melhor eficiência de custos, recomendamos configurar um limite superior de ajuste de escala para os trabalhadores usando a configuração de nível de trabalho
spark.dynamicAllocation.maxExecutors
ou a configuração de capacidade máxima em nível de aplicação com base na workload. -
Talvez você não veja uma melhora de custo em trabalhos mais simples. Por exemplo, se o trabalho for executado em um pequeno conjunto de dados ou terminar de ser executado em um estágio, talvez o Spark não precise de um número maior de executores ou de vários eventos de ajuste de escala.
-
Trabalhos com uma sequência de um estágio grande, estágios menores e, em seguida, um estágio grande novamente podem sofrer regressão no runtime do trabalho. Como o EMR Serverless usa os recursos com mais eficiência, isso pode levar a menos trabalhadores disponíveis para estágios maiores, levando a um tempo de execução mais longo.
Propriedades do trabalho do spark
A tabela a seguir lista as propriedades opcionais do Spark e seus valores padrão que você pode substituir ao enviar um trabalho do Spark.
Chave | Descrição | Valor padrão |
---|---|---|
spark.archives |
Uma lista separada por vírgulas de arquivos que o Spark extrai no diretório de trabalho de cada executor. Os tipos de arquivo compatíveis incluem .jar ,
.tar.gz , .tgz e .zip . Para especificar o nome do diretório a ser extraído, adicione # após o nome do arquivo que deseja extrair. Por exemplo, file.zip#directory . |
NULL |
spark.authenticate |
Opção que ativa a autenticação das conexões internas do Spark. | TRUE |
spark.driver.cores |
O número de núcleos que o driver usa. | 4 |
spark.driver.extraJavaOptions |
Opções extras de Java para o driver do Spark. | NULL |
spark.driver.memory |
A quantidade de memória que o driver usa. | 14G |
spark.dynamicAllocation.enabled |
Opção que ativa a alocação dinâmica de recursos. Essa opção aumenta ou reduz a escala verticalmente do número de executores registrados na aplicação com base na workload. | TRUE |
spark.dynamicAllocation.executorIdleTimeout |
O tempo que um executor pode permanecer inativo antes que o Spark o remova. Isso só se aplica se você ativar a alocação dinâmica. | 60 segundos |
spark.dynamicAllocation.initialExecutors |
O número inicial de executores a serem executados se você ativar a alocação dinâmica. | 3 |
spark.dynamicAllocation.maxExecutors |
O limite superior do número de executores se você ativar a alocação dinâmica. | Nas versões 6.10.0 e posteriores, Na versão 6.9.0 e inferiores, |
spark.dynamicAllocation.minExecutors |
O limite inferior do número de executores se você ativar a alocação dinâmica. | 0 |
spark.emr-serverless.allocation.batch.size |
O número de contêineres a serem solicitados em cada ciclo de alocação do executor. Há uma lacuna de um segundo entre cada ciclo de alocação. | 20 |
spark.emr-serverless.driver.disk |
O disco do driver do Spark. | 20G |
spark.emr-serverless.driverEnv. |
Opção que adiciona variáveis de ambiente ao driver do Spark. | NULL |
spark.emr-serverless.executor.disk |
O disco do executor do Spark. | 20G |
spark.emr-serverless.memoryOverheadFactor |
Define a sobrecarga de memória a ser adicionada à memória do contêiner do driver e do executor. | 0.1 |
spark.emr-serverless.driver.disk.type |
O tipo de disco anexado ao driver do Spark. | Padrão |
spark.emr-serverless.executor.disk.type |
O tipo de disco anexado aos executores do Spark. | Padrão |
spark.executor.cores |
O número de núcleos que cada executor usa. | 4 |
spark.executor.extraJavaOptions |
Opções extras de Java para o executor do Spark. | NULL |
spark.executor.instances |
O número de contêineres do executor do Spark a serem alocados. | 3 |
spark.executor.memory |
A quantidade de memória que cada executor usa. | 14G |
spark.executorEnv. |
Opção que adiciona variáveis de ambiente aos executores do Spark. | NULL |
spark.files |
Uma lista separada por vírgulas de arquivos a serem colocados no diretório de trabalho de cada executor. Você pode acessar os caminhos desses arquivos no executor com SparkFiles.get( . |
NULL |
spark.hadoop.hive.metastore.client.factory.class |
A classe de implementação da metastore do Hive. | NULL |
spark.jars |
Mais JARs para adicionar ao classpath de runtime do driver e dos executores. | NULL |
spark.network.crypto.enabled |
Opção que ativa a RPC criptografia AES baseada. Isso inclui o protocolo de autenticação adicionado no Spark 2.2.0. | FALSE |
spark.sql.warehouse.dir |
O local padrão para bancos de dados e tabelas gerenciados. | O valor de $PWD/spark-warehouse |
spark.submit.pyFiles |
Uma lista separada por vírgula de arquivos .zip , .egg ou
.py para colocar no PYTHONPATH de aplicações do Python. |
NULL |
A tabela a seguir lista os parâmetros de envio padrão do Spark.
Chave | Descrição | Valor padrão |
---|---|---|
archives |
Uma lista separada por vírgulas de arquivos que o Spark extrai no diretório de trabalho de cada executor. | NULL |
class |
A classe principal da aplicação (para aplicações Java e Scala). | NULL |
conf |
Uma propriedade de configuração arbitrária do Spark. | NULL |
driver-cores |
O número de núcleos que o driver usa. | 4 |
driver-memory |
A quantidade de memória que o driver usa. | 14G |
executor-cores |
O número de núcleos que cada executor usa. | 4 |
executor-memory |
A quantidade de memória que o executor usa. | 14G |
files |
Uma lista separada por vírgulas de arquivos a serem colocados no diretório de trabalho de cada executor. Você pode acessar os caminhos desses arquivos no executor com SparkFiles.get( . |
NULL |
jars |
Uma lista separada por vírgula de JARS a serem incluídos nos classpaths do driver e do executor. | NULL |
num-executors |
O número de executores a serem iniciados. | 3 |
py-files |
Uma lista separada por vírgulas de arquivos .zip , .egg ou .py para colocar no PYTHONPATH de aplicações do Python. |
NULL |
verbose |
Opção que ativa a saída de depuração adicional. | NULL |
Exemplos do Spark
O exemplo a seguir mostra como usar o StartJobRun
API para executar um script Python. Para obter um end-to-end tutorial que usa esse exemplo, consulteComeçando a usar o Amazon EMR Serverless. Você pode encontrar outros exemplos de como executar PySpark trabalhos e adicionar dependências do Python no repositório EMRServerless
aws emr-serverless start-job-run \ --application-id
application-id
\ --execution-role-arnjob-role-arn
\ --job-driver '{ "sparkSubmit": { "entryPoint": "s3://us-east-1.elasticmapreduce/emr-containers/samples/wordcount/scripts/wordcount.py", "entryPointArguments": ["s3://amzn-s3-demo-destination-bucket
/wordcount_output"], "sparkSubmitParameters": "--conf spark.executor.cores=1 --conf spark.executor.memory=4g --conf spark.driver.cores=1 --conf spark.driver.memory=4g --conf spark.executor.instances=1" } }'
O exemplo a seguir mostra como usar o StartJobRun
API para executar um SparkJAR.
aws emr-serverless start-job-run \ --application-id
application-id
\ --execution-role-arnjob-role-arn
\ --job-driver '{ "sparkSubmit": { "entryPoint": "/usr/lib/spark/examples/jars/spark-examples.jar", "entryPointArguments": ["1"], "sparkSubmitParameters": "--class org.apache.spark.examples.SparkPi --conf spark.executor.cores=4 --conf spark.executor.memory=20g --conf spark.driver.cores=4 --conf spark.driver.memory=8g --conf spark.executor.instances=1" } }'