Je souhaite configurer les paramètres d'Apache Spark dans Amazon EMR.
Brève description
Il existe deux méthodes pour configurer les applications Spark :
- Utilisez des arguments de ligne de commande tels que la commande spark-submit pour éviter de coder des valeurs en dur.
- Configurez les valeurs du fichier spark-defaults.conf pour rendre les modifications permanentes.
Solution
Configurer les paramètres Spark à l'aide de spark-submit
Le shell Spark et la commande spark-submit permettent de charger des configurations de manière dynamique de deux manières :
- Utilisez les options de ligne de commande, telles que --num-executors.
- Utilisez l'indicateur --conf.
Remarque : Exécutez spark-submit--help pour afficher la liste complète des options.
La commande spark-submit lit également les options de configuration depuis spark-defaults.conf. Dans le fichier spark-defaults.conf, chaque ligne se compose d'une clé et d'une valeur séparées par un espace.
Pour plus d'informations, consultez la section Soumission de candidatures utilisateur avec spark-submit.
Pour plus d'informations sur les paramètres pris en charge par Spark, consultez la section Configuration de Spark.
Voici quelques-unes des options de configuration les plus courantes :
--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> \
Lorsque vous utilisez spark-submit, le fichier JAR de l'application et tous les fichiers JAR inclus avec l'option --jars sont automatiquement transférés vers le cluster. Les URL fournies après --jars doivent être séparées par des virgules. La liste est incluse dans les chemins des classes du pilote et de l'exécuteur et les fichiers JAR et les fichiers sont copiés dans le répertoire de travail pour chaque SparkContext sur les nœuds de l'exécuteur. Gardez à l'esprit que l'extension de répertoires ne fonctionne pas avec --jars.
Exemple
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
Vous pouvez transmettre les paramètres de mémoire à l'aide de l'indicateur --conf, comme indiqué dans l'exemple suivant :
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
Lancez spark-shell et pyspark shell à l'aide de paramètres Spark personnalisés
Pour lancer spark-shell ou pyspark shell, exécutez les commandes suivantes :
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'
Configurer les paramètres Spark à l'aide de spark-defaults.conf
Pour rendre les modifications de configuration permanentes, ajoutez la configuration au fichier /etc/spark/conf/spark-defaults.conf. Redémarrez ensuite le serveur Spark History. L'exemple suivant configure la mémoire de l'exécuteur et la mémoire du pilote dans spark-defaults.conf. Dans cet exemple, chaque ligne est composée d'une clé et d'une valeur séparées par des espaces blancs.
Exemple
spark.executor.memory 9486M
spark.driver.memory 9486M
L'exemple de configuration suivant configure la mémoire du pilote Spark et de l'exécuteur lors du lancement du cluster :
{
"Classification": "spark-defaults",
"Properties": {
"spark.executor.memory": "9486M",
"spark.driver.memory": "9486M"
}
}
]
Informations connexes
Bonnes pratiques de gestion de la mémoire pour les applications Apache Spark sur Amazon EMR
Ajouter une étape Spark
Modifiez votre cluster à la volée grâce à la reconfiguration d'Amazon EMR