Desmitificando el particionamiento en Spark



Este blog le dice todo lo que necesita saber sobre la partición en Spark, los tipos de partición y cómo mejora la velocidad de ejecución de las transformaciones basadas en claves.

Contribuido por Prithviraj Bose

Chispas Conjuntos de datos distribuidos resistentes (la abstracción de programación) se evalúan de forma perezosa y las transformaciones se almacenan como gráficos acíclicos dirigidos (DAG). Entonces, cada acción en el RDD hará que Spark vuelva a calcular el DAG. Así es como se logra la resiliencia en Spark porque si falla algún nodo trabajador, entonces el DAG solo necesita ser recalculado.





Tambien es obligatorio almacenar en caché (persistir con el nivel de almacenamiento apropiado) el RDD de modo que las acciones frecuentes en el RDD no obliguen a Spark a volver a calcular el DAG.Los temas cubiertos en este blog son esencialmente necesarios para la certificación Apache Spark y Scala. Los temas cubiertos en este blog son esencialmente necesarios para .

¿Por qué utilizar un particionador?

En la computación en clúster, el desafío central es minimizar el tráfico de red. Cuando los datos están orientados a valores clave, la partición se vuelve imperativa porque para las transformaciones posteriores en el RDD, hay una buena cantidad de datos aleatorios en la red. Si se almacenan claves o un rango de claves similares en la misma partición, la mezcla se minimiza y el procesamiento se vuelve sustancialmente rápido.



Las transformaciones que requieren la reorganización de datos entre los nodos trabajadores se benefician enormemente de la partición. Tales transformaciones son cogroup, groupWith, join, leftOuterJoin, rightOuterJoin, groupByKey, reduceByKey, combineByKey y buscar .

Las particiones se pueden configurar siempre que el RDD se base en valores clave.

Propiedades de la partición

  1. Se garantiza que las tuplas de la misma partición estarán en la misma máquina.
  2. Cada nodo de un clúster puede contener más de una partición.
  3. El número total de particiones es configurable, por defecto se establece en el número total de núcleos en todos los nodos ejecutores.

Tipos de particiones en Spark

Spark admite dos tipos de particiones,

  • Partición hash : Utiliza Java Object.hashCode método para determinar la partición como partición = clave.hashCode ()% numPartitions.

hash-partitioning-demystifying-partitioning-in-spark



cómo crear un conjunto
  • Partición de rango : Utiliza un rango para distribuir a las particiones respectivas las claves que se encuentran dentro de un rango. Este método es adecuado cuando hay un orden natural en las claves y las claves no son negativas. El siguiente fragmento de código muestra el uso del particionador de rango.

Ejemplo de código

Veamos un ejemplo sobre cómo particionar datos entre nodos trabajadores. El código completo de Scala está disponible Aquí .

Aquí hay algunos datos de prueba de 12 coordenadas (como tuplas),

Crear un org.apache.spark.HashPartitioner de tamaño 2, donde las claves se dividirán en estas dos particiones según el código hash de las claves.

Luego podemos inspeccionar los pares y hacer varias transformaciones basadas en claves como foldByKey y reduceByKey.

En resumen, el particionamiento mejora en gran medida la velocidad de ejecución de las transformaciones basadas en claves.

Tienes una pregunta para nosotros? Menciónalo en la sección de comentarios y nos comunicaremos contigo.

Artículos Relacionados:

Por qué debería aprender Spark después de dominar Hadoop

Apache Spark Vs Hadoop MapReduce