Desmitificació de particions a Spark



Aquest bloc us explica tot el que heu de saber sobre el particionament a Spark, els tipus de particions i com millora la velocitat d’execució de les transformacions basades en claus.

Aportat per Prithviraj Bose

Spark’s Conjunts de dades distribuïts resistents (l'abstracció de la programació) s'avaluen mandrosament i les transformacions s'emmagatzemen com a gràfics acíclics dirigits (DAG). Per tant, cada acció al RDD farà que Spark recompute el DAG. Així s’aconsegueix la resistència a Spark perquè si falla algun node de treballador, només cal recomputar el DAG.





És també obligatori a la memòria cau (persistiu amb un nivell d'emmagatzematge adequat) el RDD de manera que les accions freqüents al RDD no obliguen Spark a tornar a computar el DAG.Els temes tractats en aquest bloc són bàsicament necessaris per a la certificació Apache Spark i Scala. Els temes tractats en aquest bloc són bàsicament necessaris per a .

Per què utilitzar un particionador?

En informàtica de clústers, el repte central és minimitzar el trànsit de xarxa. Quan les dades s’orienten al valor clau, el particionament esdevé imprescindible, ja que per a les transformacions posteriors al RDD hi ha una bona quantitat de barreja de dades a tota la xarxa. Si s’emmagatzemen claus o rangs de claus similars a la mateixa partició, la barreja es redueix al mínim i el processament es fa substancialment ràpid.



Les transformacions que requereixen barrejar dades entre nodes de treballadors es beneficien enormement de la partició. Aquestes transformacions són cogroup, groupWith, join, leftOuterJoin, rightOuterJoin, groupByKey, reduceByKey, combineByKey i Cercar .

Les particions es poden configurar sempre que el RDD estigui basat en el valor-clau.

Propietats de la partició

  1. Es garanteix que les tuples de la mateixa partició es troben a la mateixa màquina.
  2. Cada node d'un clúster pot contenir més d'una partició.
  3. El nombre total de particions es pot configurar, per defecte s'estableix en el nombre total de nuclis de tots els nodes executors.

Tipus de particionament a Spark

Spark admet dos tipus de particions,

def __init __ (auto) pitó
  • Particionament Hash : Utilitza Java’s Object.hashCode mètode per determinar la partició com partició = key.hashCode ()% numPartitions.

hash-partitioning-demystifying-partitioning-in-spark



  • Particionament de rang : Utilitza un interval per distribuir a les particions respectives les claus que es troben dins d'un interval. Aquest mètode és adequat quan hi ha un ordre natural a les tecles i les tecles no són negatives. El fragment de codi següent mostra l'ús del particionador d'abast.

Exemple de codi

Vegem un exemple sobre com particionar les dades entre nodes de treball. El codi Scala complet està disponible aquí .

Aquí teniu algunes dades de prova de 12 coordenades (com a tuples),

on s'han de declarar les variables d'instància a java

Crea un org.apache.spark.HashPartitioner de mida 2, on les claus es particionaran a través d'aquestes dues particions basant-se en el codi hash de les claus.

Després podem inspeccionar els parells i fer diverses transformacions basades en claus com foldByKey i reduceByKey.

En resum, el particionament millora considerablement la velocitat d’execució de les transformacions basades en claus.

Tens alguna pregunta? Esmenta’l a la secció de comentaris i et respondrem.

Articles Relacionats:

Per què hauríeu d'aprendre Spark després de dominar Hadoop

algoritmes java i estructures de dades

Apache Spark Vs Hadoop MapReduce