Particionado en Apache Spark

Los RDD operan con datos no como una sola masa de datos, sino que administran y operan los datos en particiones repartidas por todo el clúster. Por lo tanto, el concepto de partición de datos es fundamental para el correcto funcionamiento de los Jobs de  Apache Spark y puede tener un gran efecto en el rendimiento y en la forma en que se utilizan los recursos.

Los RDDs constan de particiones de datos y todas las operaciones se realizan en las particiones de datos en el RDD. Varias operaciones, como las transformaciones, son funciones ejecutadas por un ejecutor en la partición específica de datos en la que se opera. 

Sin embargo, no todas las operaciones pueden realizarse simplemente realizando operaciones aisladas en las particiones de datos por parte de los respectivos ejecutores. Las operaciones como las agregaciones requieren que los datos se muevan a través del clúster en una fase conocida como mezcla. 

Número de particiones

El RDD se puede visualizar como se muestra en el siguiente diagrama.

El número de particiones es importante porque este número influye directamente en el número de tareas que ejecutarán transformaciones en el RDD. 

 

  • Si la cantidad de particiones es demasiado pequeña, usaremos solo unas pocas CPU/núcleos en una gran cantidad de datos, por lo que tendremos un rendimiento más lento y dejaremos el clúster subutilizado. 

 

  • Por otro lado, si la cantidad de particiones es demasiado grande, utilizará más recursos de los que realmente necesita y, en un entorno de múltiples procesos, podría estar provocando la falta de recursos para otros procesos que usted u otros miembros de su equipo ejecutan.

Particionadores

El particionamiento de los RDD se realiza mediante particionadores. Los particionadores asignan un índice de partición a los elementos del RDD. Todos los elementos de la misma partición tendrán el mismo índice de partición.

Spark viene con dos particionadores:

  •  HashPartitioner
  •  RangePartitioner 

Además de estos, también puede implementar un particionador personalizado.

Big Data y Spark: ingeniería de datos con Python y pyspark

Trabajo desde niveles básicos hasta avanzados con RDD y DataFrame.

HashPartitioner

HashPartitioner es el particionador predeterminado en Spark y funciona calculando un valor hash para cada clave de los elementos RDD. Todos los elementos con el mismo código hash terminan en la misma partición.

partitionIndex = hash(key) % numPartitions

El siguiente diagrama es una ilustración de cómo funciona HashPartitioner. Supongamos que tenemos un RDD con 3 elementos x, y y w, además supongamos que el número de particiones está establecido a 6, entonces tendríamos lo siguiente:

El número predeterminado de particiones proviene del parámetro de configuración de Spark spark.default.parallelism o del número de núcleos en el clúster.

RangePartitioner

RangePartitioner funciona dividiendo el RDD en rangos aproximadamente iguales. Dado que el rango debe conocer las claves de inicio y final de cualquier partición, el RDD debe ordenarse primero antes de que se pueda usar un RangePartitioner.

 

RangePartitioner primero necesita límites razonables para las particiones basadas en el RDD y luego crea una función desde la clave K hasta el partitionIndex al que pertenece el elemento. Finalmente, necesitamos reparticionar el RDD, basado en el RangePartitioner para distribuir los elementos del RDD correctamente según los rangos que determinamos.



Entradas creadas 25

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Publicaciones relacionadas

Comienza escribiendo tu búsqueda y pulsa enter para buscar. Presiona ESC para cancelar.

Volver arriba