Propriétés Spark

Ce document décrit les propriétés Spark et explique comment les définir. Serverless pour Apache Spark utilise les propriétés Spark pour déterminer les ressources de calcul, de mémoire et de disque à allouer à votre charge de travail par lot. Ces paramètres de propriété peuvent avoir une incidence sur la consommation et le coût du quota de charge de travail. Pour en savoir plus, consultez les quotas de Serverless pour Apache Spark et les tarifs de Serverless pour Apache Spark.

Définir les propriétés de la charge de travail par lot Spark

Vous pouvez spécifier des propriétés Spark lorsque vous envoyez une charge de travail par lot Spark Serverless pour Apache Spark à l'aide de la console Google Cloud , de gcloud CLI ou de l'API Dataproc.

Console

  1. Dans la console Google Cloud , accédez à la page Créer un lot Dataproc.

    Accéder à la page "Créer un lot" de Dataproc

  2. Dans la section Propriétés, cliquez sur Ajouter une propriété.

  3. Saisissez le Key (nom) et le Value d'une propriété Spark compatible.

gcloud

Exemple d'envoi par lot de gcloud CLI :

gcloud dataproc batches submit spark
    --properties=spark.checkpoint.compress=true \
    --region=region \
    other args ...

API

Définissez RuntimeConfig.properties avec les propriétés Spark compatibles dans le cadre d'une requête batches.create.

Propriétés Spark compatibles

Serverless pour Apache Spark est compatible avec la plupart des propriétés Spark, mais pas avec celles liées à YARN et au shuffle, telles que spark.master=yarn et spark.shuffle.service.enabled. Si le code de l'application Spark définit une propriété YARN ou de shuffle, l'application échoue.

Propriétés de l'environnement d'exécution

Serverless pour Apache Spark est compatible avec les propriétés Spark personnalisées suivantes pour configurer l'environnement d'exécution :

Propriété Description
spark.dataproc.driverEnv.EnvironmentVariableName Ajoutez EnvironmentVariableName au processus du pilote. Vous pouvez spécifier plusieurs variables d'environnement.

Propriétés d'allocation des ressources

Serverless pour Apache Spark est compatible avec les propriétés Spark suivantes pour configurer l'allocation de ressources :

Propriété Description Par défaut Exemples
spark.driver.cores Nombre de cœurs (processeurs virtuels) à allouer au pilote Spark. Valeurs valides : 4, 8, 16. 4
spark.driver.memory

Quantité de mémoire à allouer au processus du pilote Spark, spécifiée au format de chaîne de mémoire JVM avec un suffixe d'unité de taille ("m", "g" ou "t").

Mémoire totale du pilote par cœur de pilote, y compris la surcharge de mémoire du pilote, qui doit être comprise entre 1024m et 7424m pour le niveau de calcul Standard (24576m pour le niveau de calcul Premium). Par exemple, si spark.driver.cores = 4, alors 4096m <= spark.driver.memory + spark.driver.memoryOverhead <= 29696m.

512m, 2g
spark.driver.memoryOverhead

Quantité de mémoire JVM supplémentaire à allouer au processus du pilote Spark, spécifiée au format de chaîne de mémoire JVM avec un suffixe d'unité de taille ("m", "g" ou "t").

Il s'agit de la mémoire hors tas associée aux frais généraux de la JVM, aux chaînes internes et à d'autres frais généraux natifs. Elle inclut la mémoire utilisée par d'autres processus de pilote, tels que les processus de pilote PySpark, et la mémoire utilisée par d'autres processus non pilotes s'exécutant dans le conteneur. La taille maximale de la mémoire du conteneur dans lequel le pilote s'exécute est déterminée par la somme de spark.driver.memoryOverhead et de spark.driver.memory.

La mémoire totale du pilote par cœur de pilote, y compris la surcharge de mémoire du pilote, doit être comprise entre 1024m et 7424m pour le niveau de calcul Standard (24576m pour le niveau de calcul Premium). Par exemple, si spark.driver.cores = 4, alors 4096m <= spark.driver.memory + spark.driver.memoryOverhead <= 29696m.

10 % de la mémoire du pilote, sauf pour les charges de travail par lot PySpark, qui sont définies par défaut sur 40 % de la mémoire du pilote 512m, 2g
spark.dataproc.driver.compute.tier Niveau de calcul à utiliser sur le pilote. Le niveau de calcul Premium offre des performances par cœur plus élevées, mais il est facturé à un tarif plus élevé. standard standard, premium
spark.dataproc.driver.disk.size Quantité d'espace disque allouée au pilote, spécifiée avec un suffixe d'unité de taille ("k", "m", "g" ou "t"). Au moins 250GiB. Si le niveau de disque Premium est sélectionné sur le pilote, les tailles valides sont 375g, 750g, 1500g, 3000g, 6000g ou 9000g. Si le niveau de disque Premium et 16 cœurs de pilote sont sélectionnés, la taille minimale du disque est de 750 Go. 100GiB par cœur 1024g, 2t
spark.dataproc.driver.disk.tier Niveau de disque à utiliser pour le stockage local et le stockage shuffle sur le pilote. Le niveau de disque Premium offre de meilleures performances en termes d'IOPS et de débit, mais il est facturé à un tarif plus élevé. Si le niveau de disque Premium est sélectionné sur le pilote, le niveau de calcul Premium doit également être sélectionné à l'aide de spark.dataproc.driver.compute.tier=premium, et la quantité d'espace disque doit être spécifiée à l'aide de spark.dataproc.executor.disk.size.

Si le niveau de disque Premium est sélectionné, le pilote alloue 50 Gio d'espace disque supplémentaires pour le stockage système, qui n'est pas utilisable par les applications utilisateur.

standard standard, premium
spark.executor.cores Nombre de cœurs (processeurs virtuels) à allouer à chaque exécuteur Spark. Valeurs valides : 4, 8, 16. 4
spark.executor.memory

Quantité de mémoire à allouer à chaque processus d'exécuteur Spark, spécifiée au format de chaîne de mémoire JVM avec un suffixe d'unité de taille ("m", "g" ou "t").

La mémoire totale de l'exécuteur par cœur d'exécuteur, y compris la surcharge de mémoire de l'exécuteur, doit être comprise entre 1024m et 7424m pour le niveau de calcul Standard (24576m pour le niveau de calcul Premium). Par exemple, si spark.executor.cores = 4, alors 4096m <= spark.executor.memory + spark.executor.memoryOverhead <= 29696m.

512m, 2g
spark.executor.memoryOverhead

Quantité de mémoire JVM supplémentaire à allouer au processus d'exécution Spark, spécifiée au format de chaîne de mémoire JVM avec un suffixe d'unité de taille ("m", "g" ou "t").

Il s'agit de la mémoire hors tas utilisée pour les frais généraux de la JVM, les chaînes internes et d'autres frais généraux natifs. Elle inclut la mémoire de l'exécuteur PySpark et la mémoire utilisée par d'autres processus non exécutés s'exécutant dans le conteneur. La taille maximale de la mémoire du conteneur dans lequel l'exécuteur s'exécute est déterminée par la somme de spark.executor.memoryOverhead et de spark.executor.memory.

La mémoire totale de l'exécuteur par cœur d'exécuteur, y compris la surcharge de mémoire de l'exécuteur, doit être comprise entre 1024m et 7424m pour le niveau de calcul Standard (24576m pour le niveau de calcul Premium). Par exemple, si spark.executor.cores = 4, alors 4096m <= spark.executor.memory + spark.executor.memoryOverhead <= 29696m.

10 % de la mémoire de l'exécuteur, sauf pour les charges de travail par lot PySpark, qui sont définies par défaut sur 40 % de la mémoire de l'exécuteur 512m, 2g
spark.dataproc.executor.compute.tier Niveau de calcul à utiliser sur les exécuteurs. Le niveau de calcul Premium offre des performances par cœur plus élevées, mais il est facturé à un tarif plus élevé. standard standard, premium
spark.dataproc.executor.disk.size Quantité d'espace disque allouée à chaque exécuteur, spécifiée avec un suffixe d'unité de taille ("k", "m", "g" ou "t"). L'espace disque de l'exécuteur peut être utilisé pour les données de shuffle et pour préparer les dépendances. Au moins 250GiB. Si le niveau de disque Premium est sélectionné sur l'exécuteur, les tailles valides sont 375g, 750g, 1500g, 3000g, 6000g ou 9000g. Si le niveau de disque Premium et 16 cœurs d'exécution sont sélectionnés, la taille minimale du disque est de 750 Go. 100GiB par cœur 1024g, 2t
spark.dataproc.executor.disk.tier Niveau de disque à utiliser pour le stockage local et le stockage shuffle sur les exécuteurs. Le niveau de disque Premium offre de meilleures performances en termes d'IOPS et de débit, mais il est facturé à un tarif plus élevé. Si le niveau de disque Premium est sélectionné sur l'exécuteur, le niveau de calcul Premium doit également être sélectionné à l'aide de spark.dataproc.executor.compute.tier=premium, et la quantité d'espace disque doit être spécifiée à l'aide de spark.dataproc.executor.disk.size.

Si le niveau de disque Premium est sélectionné, chaque exécuteur se voit attribuer 50 Gio d'espace disque supplémentaires pour le stockage système, qui ne peuvent pas être utilisés par les applications utilisateur.

standard standard, premium
spark.executor.instances Nombre initial d'exécuteurs à allouer. Une fois une charge de travail par lot lancée, l'autoscaling peut modifier le nombre d'exécuteurs actifs. Doit être comprise entre 2 et 2000.

Propriétés de l'autoscaling

Consultez Propriétés d'allocation dynamique Spark pour obtenir la liste des propriétés Spark que vous pouvez utiliser pour configurer l'autoscaling de Serverless pour Apache Spark.

Propriétés de journalisation

Propriété Description Par défaut Exemples
spark.log.level Lorsqu'il est défini, il remplace tous les paramètres de journalisation définis par l'utilisateur, ce qui équivaut à un appel à SparkContext.setLogLevel() au démarrage de Spark. Les niveaux de journalisation valides sont les suivants : ALL, DEBUG, ERROR, FATAL, INFO, OFF, TRACE et WARN. INFO, DEBUG
spark.executor.syncLogLevel.enabled Lorsqu'il est défini sur true, le niveau de journalisation appliqué via la méthode SparkContext.setLogLevel() est propagé à tous les exécuteurs. false true, false
spark.log.level.PackageName Lorsqu'il est défini, il remplace tous les paramètres de journalisation définis par l'utilisateur, ce qui a le même effet qu'un appel à SparkContext.setLogLevel(PackageName, level) au démarrage de Spark. Les niveaux de journalisation valides sont les suivants : ALL, DEBUG, ERROR, FATAL, INFO, OFF, TRACE et WARN. spark.log.level.org.apache.spark=error

Propriétés de la planification

Propriété Description Par défaut Exemples
spark.scheduler.excludeShuffleSkewExecutors Excluez les exécuteurs de mappage de répartition asymétrique lors de la planification, ce qui peut réduire les longs temps d'attente de récupération de répartition causés par l'asymétrie d'écriture de répartition. false true
spark.scheduler.shuffleSkew.minFinishedTasks Nombre minimal de tâches de mappage de shuffle terminées sur un exécuteur à traiter comme un biais. 10 100
spark.scheduler.shuffleSkew.maxExecutorsNumber Nombre maximal d'exécuteurs à traiter comme un biais. Les exécuteurs asymétriques sont exclus de la planification actuelle. 5 10
spark.scheduler.shuffleSkew.maxExecutorsRatio Ratio maximal d'exécuteurs totaux à traiter comme biais. Les exécutants asymétriques sont exclus de la planification. 0,05 0.1
spark.scheduler.shuffleSkew.ratio Multiple de la moyenne des tâches de mappage de shuffle terminées sur un exécuteur à traiter comme biais. 1,5 2.0

Autres propriétés

Propriété Description
dataproc.diagnostics.enabled Activez cette propriété pour exécuter des diagnostics en cas d'échec ou d'annulation d'une charge de travail par lot. Si les diagnostics sont activés, votre charge de travail par lot continue d'utiliser des ressources de calcul après la fin de la charge de travail, jusqu'à la fin des diagnostics. Un URI pointant vers l'emplacement du fichier tarball de diagnostic est indiqué dans le champ d'API Batch.RuntimeInfo.diagnosticOutputUri.
dataproc.gcsConnector.version Utilisez cette propriété pour passer à une version du connecteur Cloud Storage différente de celle installée avec la version de l'environnement d'exécution de votre charge de travail par lot.
dataproc.sparkBqConnector.version Utilisez cette propriété pour passer à une version du connecteur Spark BigQuery différente de celle installée avec la version du runtime de votre charge de travail par lot (voir Utiliser le connecteur BigQuery avec Serverless pour Apache Spark).
dataproc.profiling.enabled Définissez cette propriété sur true pour activer le profilage de la charge de travail Serverless pour Apache Spark.
dataproc.profiling.name Utilisez cette propriété pour définir le nom utilisé pour créer un profil sur le service Profiler.
spark.jars Utilisez cette propriété pour définir la liste de fichiers JAR séparés par une virgule à inclure dans les paramètres classpath du pilote et de l'exécuteur.
spark.archives Utilisez cette propriété pour définir la liste des archives à extraire dans le répertoire de travail de chaque exécuteur. Les formats .jar, .tar.gz, .tgz et .zip sont acceptés. Pour les sessions interactives sans serveur, ajoutez cette propriété lorsque vous créez une session interactive ou un modèle.