Quero configurar os parâmetros do Apache Spark no Amazon EMR.
Breve descrição
Existem dois métodos para configurar aplicações do Spark:
- Use argumentos de linha de comando, como o comando spark-submit, para evitar valores de código fixo.
- Configure os valores no arquivo spark-defaults.conf para tornar as alterações permanentes.
Resolução
Configure os parâmetros do Spark usando spark-submit
O shell do Spark e o comando spark-submit oferecem suporte a duas formas de carregamento de configurações dinamicamente:
- Use opções de linha de comando, como --num-executors.
- Use o sinalizador --conf.
Observação: Execute spark-submit--help para mostrar a lista completa de opções.
O comando spark-submit também lê as opções de configuração do spark-defaults.conf. No arquivo spark-defaults.conf, cada linha consiste em uma chave e um valor separados por espaços em branco.
Para obter mais informações, consulte Submitting user applications with spark-submit (Enviar aplicações de usuários com spark-submit).
Para obter mais informações sobre os parâmetros suportados pelo Spark, consulte a Spark configuration (Configuração do Spark).
Veja a seguir algumas das opções de configuração mais comuns:
--class <main-class> \
--master <master-url>
--deploy-mode <deploy-mode>
--conf <key>=<value>
--num-executors <value> \
--executor-memory <value>G \
--driver-memory <value>G \
--executor-cores <number of cores> \
--driver-cores <number of cores> \
--jars <Comma-separated list of jars> \
--packages <Comma-separated list of Maven coordinates> \
--py-files < Comma-separated list of .zip, .egg, or .py files to place on the PYTHONPATH for Python apps> \
Ao usar spark-submit, o JAR da aplicação e quaisquer JARs incluídos na opção --jars são automaticamente transferidos para o cluster. Os URLs fornecidos depois de --jars devem ser separados por vírgulas. A lista está incluída nos caminhos das classes do driver e do executor e os JARs e os arquivos são copiados para o diretório de trabalho de cada SparkContext nos nós do executor. Lembre-se de que a expansão do diretório não funciona com --jars.
Exemplo
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
Você pode passar os parâmetros de memória usando o sinalizador --conf, conforme mostrado no exemplo a seguir:
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
Inicie o spark-shell e o pyspark shell usando parâmetros personalizados do Spark
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'
Configure os parâmetros do Spark usando spark-defaults.conf
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 Spark History Server. O exemplo a seguir configura a memória do executor e a memória do driver em spark-defaults.conf. Nesse exemplo, cada linha consiste em uma chave e um valor separados por espaços em branco.
Exemplo
spark.executor.memory 9486M
spark.driver.memory 9486M
O exemplo de configuração a seguir configura o driver e a memória do executor do Spark durante a inicialização do cluster:
{
"Classification": "spark-defaults",
"Properties": {
"spark.executor.memory": "9486M",
"spark.driver.memory": "9486M"
}
}
]
Informações relacionadas
Best practices for successfully managing memory for Apache Spark applications on Amazon EMR (Práticas recomendadas para gerenciar com sucesso a memória para aplicações do Apache Spark no Amazon EMR)
Add a Spark step (Adicionar uma etapa do Spark)
Modify your cluster on the fly with Amazon EMR reconfiguration (Modificar seu cluster rapidamente com a reconfiguração do Amazon EMR)