Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Utilisation des configurations Spark lorsque vous exécutez des EMR tâches sans serveur
Vous pouvez exécuter des tâches Spark sur une application dont le type
paramètre est défini surSPARK
. Les tâches doivent être compatibles avec la version de Spark compatible avec la version de EMR lancement d'Amazon. Par exemple, lorsque vous exécutez des tâches avec Amazon EMR version 6.6.0, celles-ci doivent être compatibles avec Apache Spark 3.2.0. Pour plus d'informations sur les versions de l'application pour chaque version, consultezVersions de lancement d'Amazon EMR Serverless.
Paramètres de la tâche Spark
Lorsque vous utilisez le StartJobRun
APIpour exécuter une tâche Spark, vous pouvez spécifier les paramètres suivants.
Paramètres requis
Rôle d'exécution de la tâche Spark
Utilisez executionRoleArn
pour spécifier le ARN IAM rôle que votre application utilise pour exécuter les tâches Spark. Ce rôle doit contenir les autorisations suivantes :
-
Lisez à partir de compartiments S3 ou d'autres sources de données où résident vos données
-
Lisez à partir de compartiments ou de préfixes S3 où réside votre PySpark script ou fichier JAR
-
Écrivez dans les compartiments S3 où vous avez l'intention d'écrire votre sortie finale
-
Écrire des journaux dans un compartiment ou un préfixe S3 qui spécifie
S3MonitoringConfiguration
-
Accès aux KMS clés si vous utilisez des KMS clés pour chiffrer les données de votre compartiment S3
-
Accès au catalogue de données AWS Glue si vous utilisez Spark SQL
Si votre tâche Spark lit ou écrit des données depuis ou vers d'autres sources de données, spécifiez les autorisations appropriées pour ce IAM rôle. Si vous n'accordez pas ces autorisations au IAM rôle, la tâche risque d'échouer. Pour plus d’informations, consultez Rôles d'exécution des tâches pour Amazon EMR Serverless et Stockage des journaux.
Paramètre du pilote de tâche Spark
jobDriver
À utiliser pour fournir des informations sur la tâche. Le paramètre du pilote de tâche n'accepte qu'une seule valeur pour le type de tâche que vous souhaitez exécuter. Pour une tâche Spark, la valeur du paramètre estsparkSubmit
. Vous pouvez utiliser ce type de tâche pour exécuter Scala, Java PySpark, SparkR et toute autre tâche prise en charge via Spark submit. Les tâches Spark ont les paramètres suivants :
-
sparkSubmitParameters
— Il s'agit des paramètres Spark supplémentaires que vous souhaitez envoyer à la tâche. Utilisez ce paramètre pour remplacer les propriétés Spark par défaut, telles que la mémoire du pilote ou le nombre d'exécuteurs, telles que celles définies dans les arguments--conf
or--class
. -
entryPointArguments
— Il s'agit d'un tableau d'arguments que vous souhaitez transmettre à votre fichier principal JAR ou à votre fichier Python. Vous devez gérer la lecture de ces paramètres à l'aide de votre code entrypoint. Séparez chaque argument du tableau par une virgule. -
entryPoint
— Il s'agit de la référence dans Amazon S3 au fichier principal JAR ou au fichier Python que vous souhaitez exécuter. Si vous utilisez un Scala ou un JavaJAR, spécifiez la classe d'entrée principale dans l'--class
argumentSparkSubmitParameters
using the.
Pour plus d'informations, consultez la rubrique Lancement d'applications à l'aide de spark-submit
Paramètre de remplacement de la configuration Spark
configurationOverrides
À utiliser pour remplacer les propriétés de configuration au niveau de la surveillance et au niveau de l'application. Ce paramètre accepte un JSON objet contenant les deux champs suivants :
-
monitoringConfiguration
‐ Utilisez ce champ pour spécifier l'Amazon S3 URL (s3MonitoringConfiguration
) où vous souhaitez que la tâche EMR sans serveur stocke les journaux de votre tâche Spark. Assurez-vous d'avoir créé ce compartiment dans le même compartiment Compte AWS que celui qui héberge votre application et dans celui Région AWS où votre tâche est exécutée. -
applicationConfiguration
— Pour remplacer les configurations par défaut des applications, vous pouvez fournir un objet de configuration dans ce champ. Vous pouvez utiliser une syntaxe abrégée pour fournir la configuration ou vous pouvez faire référence à l'objet de configuration dans un JSON fichier. Les objets de configuration sont composés d'une classification, de propriétés et de configurations imbriquées en option. Les propriétés sont les paramètres que vous souhaitez remplacer dans ce fichier. Vous pouvez définir plusieurs classifications pour plusieurs applications dans un seul JSON objet.Note
Les classifications de configuration disponibles varient en fonction de la version EMR Serverless spécifique. Par exemple, les classifications pour Log4j personnalisées ne
spark-executor-log4j2
sont disponibles qu'avec les versions 6.8.0spark-driver-log4j2
et supérieures.
Si vous utilisez la même configuration dans une dérogation d'application et dans les paramètres d'envoi de Spark, les paramètres d'envoi de Spark sont prioritaires. Les configurations sont classées par ordre de priorité comme suit, du plus haut au plus bas :
-
Configuration fournie par EMR Serverless lors de sa création.
SparkSession
-
Configuration que vous fournissez dans le cadre
sparkSubmitParameters
de l'--conf
argument. -
La configuration que vous fournissez dans le cadre de votre application remplace lorsque vous démarrez une tâche.
-
Configuration que vous fournissez
runtimeConfiguration
lors de la création d'une application. -
Configurations optimisées EMR utilisées par Amazon pour cette version.
-
Configurations open-source par défaut pour l'application.
Pour plus d'informations sur la déclaration de configurations au niveau de l'application et sur le remplacement de configurations lors de l'exécution d'une tâche, consultezConfiguration d'application par défaut pour EMR Serverless.
Optimisation dynamique de l'allocation des ressources
dynamicAllocationOptimization
À utiliser pour optimiser l'utilisation des ressources dans EMR Serverless. La définition de cette propriété sur true
dans votre classification de configuration Spark indique à EMR Serverless d'optimiser l'allocation des ressources des exécuteurs afin de mieux aligner le taux auquel Spark demande et annule des exécuteurs avec le taux auquel EMR Serverless crée et libère des travailleurs. EMRServerless réutilise ainsi de manière plus optimale les travailleurs d'une étape à l'autre, ce qui permet de réduire les coûts lors de l'exécution de tâches comportant plusieurs étapes tout en maintenant les mêmes performances.
Cette propriété est disponible dans toutes les EMR versions d'Amazon.
Voici un exemple de classification de configuration avecdynamicAllocationOptimization
.
[ { "Classification": "spark", "Properties": { "dynamicAllocationOptimization": "true" } } ]
Tenez compte des points suivants si vous utilisez l'optimisation de l'allocation dynamique :
-
Cette optimisation est disponible pour les tâches Spark pour lesquelles vous avez activé l'allocation dynamique des ressources.
-
Pour obtenir le meilleur rapport coût-efficacité, nous vous recommandons de configurer une limite d'échelle supérieure pour les travailleurs en utilisant soit le paramètre au niveau de la tâche,
spark.dynamicAllocation.maxExecutors
soit le paramètre de capacité maximale au niveau de l'application en fonction de votre charge de travail. -
Il se peut que vous ne constatiez pas d'amélioration des coûts dans les tâches plus simples. Par exemple, si votre tâche s'exécute sur un petit ensemble de données ou s'exécute en une seule étape, Spark n'a peut-être pas besoin d'un plus grand nombre d'exécuteurs ou de plusieurs événements de dimensionnement.
-
Les tâches comportant une séquence composée d'une grande étape, d'étapes plus petites, puis d'une nouvelle étape de grande envergure peuvent connaître une régression au cours de l'exécution des tâches. Comme le EMR mode Serverless utilise les ressources de manière plus efficace, cela peut entraîner une diminution du nombre de travailleurs disponibles pour les étapes plus importantes, ce qui se traduit par un allongement du temps d'exécution.
Propriétés de la tâche Spark
Le tableau suivant répertorie les propriétés Spark facultatives et leurs valeurs par défaut que vous pouvez remplacer lorsque vous soumettez une tâche Spark.
Clé | Description | Valeur par défaut |
---|---|---|
spark.archives |
Liste d'archives séparées par des virgules que Spark extrait dans le répertoire de travail de chaque exécuteur. Les types de fichiers pris en charge incluent .jar
.tar.gz , .tgz et.zip . Pour spécifier le nom du répertoire à extraire, ajoutez-le # après le nom du fichier que vous souhaitez extraire. Par exemple, file.zip#directory . |
NULL |
spark.authenticate |
Option qui active l'authentification des connexions internes de Spark. | TRUE |
spark.driver.cores |
Nombre de cœurs utilisés par le pilote. | 4 |
spark.driver.extraJavaOptions |
Options Java supplémentaires pour le pilote Spark. | NULL |
spark.driver.memory |
La quantité de mémoire utilisée par le pilote. | 14 G |
spark.dynamicAllocation.enabled |
Option qui active l'allocation dynamique des ressources. Cette option augmente ou diminue le nombre d'exécuteurs enregistrés auprès de l'application, en fonction de la charge de travail. | TRUE |
spark.dynamicAllocation.executorIdleTimeout |
Durée pendant laquelle un exécuteur peut rester inactif avant que Spark ne le supprime. Cela ne s'applique que si vous activez l'allocation dynamique. | Années 60 |
spark.dynamicAllocation.initialExecutors |
Le nombre initial d'exécuteurs à exécuter si vous activez l'allocation dynamique. | 3 |
spark.dynamicAllocation.maxExecutors |
Limite supérieure du nombre d'exécuteurs si vous activez l'allocation dynamique. | Pour les versions 6.10.0 et supérieures, Pour les versions 6.9.0 et antérieures, |
spark.dynamicAllocation.minExecutors |
Limite inférieure du nombre d'exécuteurs si vous activez l'allocation dynamique. | 0 |
spark.emr-serverless.allocation.batch.size |
Le nombre de conteneurs à demander dans chaque cycle d'allocation d'exécuteur. Il y a un intervalle d'une seconde entre chaque cycle d'allocation. | 20 |
spark.emr-serverless.driver.disk |
Le disque du pilote Spark. | 20G |
spark.emr-serverless.driverEnv. |
Option qui ajoute des variables d'environnement au pilote Spark. | NULL |
spark.emr-serverless.executor.disk |
Le disque exécuteur Spark. | 20G |
spark.emr-serverless.memoryOverheadFactor |
Définit la surcharge de mémoire à ajouter à la mémoire du conteneur du pilote et de l'exécuteur. | 0.1 |
spark.emr-serverless.driver.disk.type |
Type de disque connecté au pilote Spark. | Standard |
spark.emr-serverless.executor.disk.type |
Type de disque attaché aux exécuteurs Spark. | Standard |
spark.executor.cores |
Le nombre de cœurs utilisés par chaque exécuteur. | 4 |
spark.executor.extraJavaOptions |
Options Java supplémentaires pour l'exécuteur Spark. | NULL |
spark.executor.instances |
Nombre de conteneurs d'exécuteurs Spark à allouer. | 3 |
spark.executor.memory |
La quantité de mémoire utilisée par chaque exécuteur. | 14 G |
spark.executorEnv. |
Option qui ajoute des variables d'environnement aux exécuteurs Spark. | NULL |
spark.files |
Une liste de fichiers séparés par des virgules à placer dans le répertoire de travail de chaque exécuteur. Vous pouvez accéder aux chemins de ces fichiers dans l'exécuteur avecSparkFiles.get( . |
NULL |
spark.hadoop.hive.metastore.client.factory.class |
La classe d'implémentation du métastore Hive. | NULL |
spark.jars |
JAR supplémentaires à ajouter au chemin de classe d'exécution du pilote et des exécuteurs. | NULL |
spark.network.crypto.enabled |
Option qui active le RPC chiffrement AES basé sur le chiffrement. Cela inclut le protocole d'authentification ajouté dans Spark 2.2.0. | FALSE |
spark.sql.warehouse.dir |
Emplacement par défaut pour les bases de données et les tables gérées. | Pour $PWD/spark-warehouse |
spark.submit.pyFiles |
Liste séparée par des .zip virgules .egg de ou de
.py fichiers à placer dans les applications PYTHONPATH Python. |
NULL |
Le tableau suivant répertorie les paramètres d'envoi par défaut de Spark.
Clé | Description | Valeur par défaut |
---|---|---|
archives |
Liste d'archives séparées par des virgules que Spark extrait dans le répertoire de travail de chaque exécuteur. | NULL |
class |
Classe principale de l'application (pour les applications Java et Scala). | NULL |
conf |
Propriété de configuration arbitraire de Spark. | NULL |
driver-cores |
Nombre de cœurs utilisés par le pilote. | 4 |
driver-memory |
La quantité de mémoire utilisée par le pilote. | 14 G |
executor-cores |
Le nombre de cœurs utilisés par chaque exécuteur. | 4 |
executor-memory |
Quantité de mémoire utilisée par l'exécuteur. | 14 G |
files |
Liste de fichiers séparés par des virgules à placer dans le répertoire de travail de chaque exécuteur. Vous pouvez accéder aux chemins de ces fichiers dans l'exécuteur avecSparkFiles.get( . |
NULL |
jars |
Une liste de fichiers jar séparés par des virgules à inclure dans les chemins de classe du pilote et de l'exécuteur. | NULL |
num-executors |
Nombre d'exécuteurs à lancer. | 3 |
py-files |
Une liste séparée par des virgules de .zip .egg , ou de .py fichiers à placer sur les applications PYTHONPATH Python. |
NULL |
verbose |
Option qui active une sortie de débogage supplémentaire. | NULL |
Exemples Spark
L'exemple suivant montre comment utiliser le StartJobRun
API pour exécuter un script Python. Pour un end-to-end didacticiel utilisant cet exemple, voirCommencer à utiliser Amazon EMR Serverless. Vous trouverez d'autres exemples d'exécution de PySpark tâches et d'ajout de dépendances Python dans le GitHub référentiel EMRServerless Samples
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" } }'
L'exemple suivant montre comment utiliser le StartJobRun
API pour exécuter un 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" } }'