Quero configurar os parâmetros do Apache Spark no Amazon EMR.
Breve descrição
Para configurar aplicações Spark, use argumentos de linha de comandos, como spark-submit. Ou configure os valores no arquivo spark-defaults.conf para tornar as alterações permanentes.
Resolução
Usar spark-submit para configurar os parâmetros do Spark
Para carregar configurações dinamicamente por meio do shell do Spark e do comando spark-submit, use uma das seguintes opções:
- Opções de linha de comandos, como --num-executors.
- O sinalizador --conf.
Observação: para ver a lista completa de opções, execute spark-submit--help.
O comando spark-submit lê as opções de configuração de spark-defaults.conf.
No arquivo spark-defaults.conf, cada linha inclui uma chave e um valor separados por um espaço em branco.
Para mais informações, consulte Submitting user applications with spark-submit (Envio de aplicações de usuário com spark-submit). Para mais informações sobre os parâmetros suportados pelo Spark, consulte Spark configuration (Configuração do Spark) no site do Apache Spark.
Exemplo de opções de configuração:
--class \
--master \
--deploy-mode \
--conf = \
--num-executors \
--executor-memory G \
--driver-memory G \
--executor-cores \
--driver-cores \
--jars \
--packages \
--py-files < Comma-separated list of .zip, .egg, or .py files to place on the PYTHONPATH for Python apps> \
O comando spark-submit transfere automaticamente o JAR da aplicação e todos os JARs incluídos na opção --jars para o cluster. Você deve separar os URLs fornecidos após --jars por vírgulas. O spark-submit inclui a lista nos caminhos das classes do driver e do executor e copia os JARs e os arquivos para o diretório de trabalho de cada SparkContext nos nós do executor.
Observação: a expansão do diretório não funciona com --jars.
Exemplo de comando spark-submit:
spark-submit \
--deploy-mode cluster \
--class org.apache.spark.examples.SparkPi \
--conf spark.dynamicAllocation.enabled=false \
--master yarn \
--num-executors 4 \
--driver-memory 4G \
--executor-memory 4G \
--executor-cores 1 \
/usr/lib/spark/examples/jars/spark-examples.jar \
10
Para passar os parâmetros de memória, use o sinalizador --conf:
spark-submit \
--deploy-mode cluster \
--class org.apache.spark.examples.SparkPi \
--conf spark.dynamicAllocation.enabled=false \
--master yarn \
--conf spark.driver.memory=1G \
--conf spark.executor.memory=1G \
/usr/lib/spark/examples/jars/spark-examples.jar \
10
Usar parâmetros personalizados do Spark para iniciar spark-shell e pyspark shell
Para iniciar o spark-shell ou o pyspark shell, execute os seguintes comandos:
spark-shell
spark-shell \
--conf spark.driver.maxResultSize=1G \
--conf spark.driver.memory=1G \
--deploy-mode client \
--conf spark.executor.memory=1G \
--conf spark.executor.heartbeatInterval=10000000s \
--conf spark.network.timeout=10000001s \
--executor-cores 1 \
--num-executors 5 \
--packages org.apache.spark:spark-avro_2.12:3.1.2 \
--conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer'
pyspark shell
pyspark \
--conf spark.driver.maxResultSize=1G \
--conf spark.driver.memory=1G \
--deploy-mode client \
--conf spark.executor.memory=1G \
--conf spark.executor.heartbeatInterval=10000000s \
--conf spark.network.timeout=10000001s \
--executor-cores 1 \
--num-executors 5 \
--packages org.apache.spark:spark-avro_2.12:3.1.2 \
--conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer'
Usar spark-defaults.conf para configurar os parâmetros do Spark
Para tornar as alterações de configuração permanentes, anexe a configuração ao arquivo /etc/spark/conf/spark-defaults.conf. Em seguida, reinicie o Servidor de histórico do Spark. O exemplo a seguir configura a memória do executor e a memória do driver em spark-defaults.conf. Neste exemplo, cada linha consiste em uma chave e um valor separados por um espaço em branco.
Exemplo
spark.executor.memory 9486M
spark.driver.memory 9486M
O exemplo de configuração a seguir configura o driver do Spark e a memória do executor durante a inicialização do cluster:
[
{
"Classification": "spark-defaults",
"Properties": {
"spark.executor.memory": "9486M",
"spark.driver.memory": "9486M"
}
}
]
Observação: no Amazon EMR, a configuração spark.yarn.executor.memoryOverhead tem um valor padrão de 18,75%, mas o padrão do Spark é 0,1875%. Depois de configurar sua tarefa do Spark, monitore seu desempenho e analise a utilização de recursos para obter informações e ajustar ainda mais os parâmetros de tarefa.
Informações relacionadas
AWS open data analytics
Adicionar um trabalho do Spark
Modify your cluster on the fly with Amazon EMR reconfiguration (Modificar o cluster em tempo real com a reconfiguração do Amazon EMR)