web-dev-qa-db-fra.com

Quelle est la difference entre spark.sql.shuffle.partitions et spark.default.parallelism?

Quelle est la différence entre spark.sql.shuffle.partitions et spark.default.parallelism?

J'ai essayé de mettre les deux en SparkSQL, mais le numéro de tâche de la deuxième étape est toujours 200.

49
Edison

À partir de la réponse ici , spark.sql.shuffle.partitions configure le nombre de partitions utilisées lors de la réorganisation des données pour des jointures ou des agrégations.

spark.default.parallelism est le nombre par défaut de partitions dans RDDs renvoyées par des transformations telles que join, reduceByKey et parallelize si elles ne sont pas définies explicitement par l'utilisateur. Notez que spark.default.parallelism semble ne fonctionner que pour raw RDD et est ignoré lorsque vous travaillez avec des images.

Si la tâche que vous effectuez n'est pas une jointure ou une agrégation et que vous travaillez avec des images de données, leur définition n'aura aucun effet. Vous pouvez toutefois définir vous-même le nombre de partitions en appelant df.repartition(numOfPartitions) (n'oubliez pas de l'affecter à un nouveau val) dans votre code.


Pour modifier les paramètres de votre code, vous pouvez simplement faire:

sqlContext.setConf("spark.sql.shuffle.partitions", "300")
sqlContext.setConf("spark.default.parallelism", "300")

Vous pouvez également effectuer la modification lorsque vous soumettez le travail à un cluster avec spark-submit:

./bin/spark-submit --conf spark.sql.shuffle.partitions=300 --conf spark.default.parallelism=300
59
Shaido

spark.default.parallelism est le nombre par défaut de partitions défini par spark, qui est par défaut 200. Si vous souhaitez augmenter le nombre de partitions, vous pouvez appliquer la propriété - spark.sql.shuffle.partitions pour définir le nombre de partitions dans la configuration spark ou lors de l'exécution de spark SQL.

Normalement ceci spark.sql.shuffle.partitions il est utilisé quand nous avons un encombrement de mémoire et que nous voyons ci-dessous erreur: spark erreur: Java.lang.IllegalArgumentException: Size dépasse Integer .VALEUR MAX

donc, vous pouvez allouer une partition de 256 Mo par partition et vous pouvez l’utiliser pour vos processus.

si le nombre de partitions est proche de 2000, augmentez-le à plus de 2000. Comme spark applique une logique différente pour les partitions <2000 et> 2000, ce qui augmentera les performances de votre code en diminuant l'encombrement de la mémoire, car les données par défaut sont hautement compressé si> 2000.

0
Amit khandelwal