Démystifier le partitionnement dans Spark



Ce blog vous dit tout ce que vous devez savoir sur le partitionnement dans Spark, les types de partition et comment il améliore la vitesse d'exécution des transformations basées sur les clés.

Contribution de Prithviraj Bose

Spark's Ensembles de données distribués résilients (l'abstraction de programmation) sont évaluées paresseusement et les transformations sont stockées sous forme de graphes acycliques dirigés (DAG). Ainsi, chaque action sur le RDD obligera Spark à recalculer le DAG. C'est ainsi que la résilience est atteinte dans Spark, car si un nœud de travail échoue, le DAG doit simplement être recalculé.





C'est aussi obligatoire pour mettre en cache (persister avec un niveau de stockage approprié) le RDD de sorte que des actions fréquentes sur le RDD ne forcent pas Spark à recalculer le DAG.Les sujets abordés dans ce blog sont essentiellement requis pour Apache Spark et Scala Certification. Les sujets abordés dans ce blog sont essentiellement requis pour .

Pourquoi utiliser un partitionneur?

Dans l'informatique en cluster, le défi central est de minimiser le trafic réseau. Lorsque les données sont orientées clé-valeur, le partitionnement devient impératif car pour les transformations ultérieures sur le RDD, il y a une bonne quantité de brassage des données sur le réseau. Si des clés ou une plage de clés similaires sont stockées dans la même partition, le brassage est minimisé et le traitement devient sensiblement rapide.



Les transformations qui nécessitent le brassage des données entre les nœuds de travail bénéficient grandement du partitionnement. Ces transformations sont cogroup, groupWith, join, leftOuterJoin, rightOuterJoin, groupByKey, reductionByKey, combineByKey et chercher .

Les partitions sont configurables à condition que le RDD soit basé sur des valeurs-clés.

Propriétés de la partition

  1. Les tuples de la même partition sont garantis dans la même machine.
  2. Chaque nœud d'un cluster peut contenir plusieurs partitions.
  3. Le nombre total de partitions est configurable, par défaut il est défini sur le nombre total de cœurs sur tous les nœuds exécuteurs.

Types de partitionnement dans Spark

Spark prend en charge deux types de partitionnement,

  • Partitionnement de hachage : Utilise Java Object.hashCode méthode pour déterminer la partition comme partition = key.hashCode ()% numPartitions.

hash-partitioning-demystifying-partitioning-in-spark



  • Partitionnement de plage : Utilise une plage pour distribuer aux partitions respectives les clés comprises dans une plage. Cette méthode convient là où il y a un ordre naturel dans les clés et les clés ne sont pas négatives. L'extrait de code ci-dessous montre l'utilisation du partitionneur de plage.

Exemple de code

Voyons un exemple sur la façon de partitionner les données entre les nœuds de calcul. Le code Scala complet est disponible Ici .

Voici quelques données de test de 12 coordonnées (sous forme de tuples),

Créé un org.apache.spark.HashPartitioner de taille 2, où les clés seront partitionnées sur ces deux partitions en fonction du code de hachage des clés.

Ensuite, nous pouvons inspecter les paires et effectuer diverses transformations basées sur des clés telles que foldByKey et réduireByKey.

En résumé, le partitionnement améliore considérablement la vitesse d'exécution des transformations basées sur des clés.

Vous avez une question pour nous? Veuillez le mentionner dans la section commentaires et nous vous recontacterons.

Articles Similaires:

Pourquoi vous devriez apprendre Spark après avoir maîtrisé Hadoop

qu'est-ce que tostring en java

Apache Spark contre Hadoop MapReduce