performance - Número de particiones en RDD y rendimiento en Spark
apache-spark pyspark (3)
En Pyspark, puedo crear un RDD de una lista y decidir cuántas particiones tener:
sc = SparkContext()
sc.parallelize(xrange(0, 10), 4)
¿Cómo influye en el rendimiento el número de particiones que decido particionar mi RDD? ¿Y cómo depende esto de la cantidad de núcleos que tenga mi máquina?
El efecto primario sería especificando muy pocas particiones o demasiadas particiones.
Muy pocas particiones No utilizará todos los núcleos disponibles en el clúster.
Demasiadas particiones Habrá una sobrecarga excesiva en la gestión de muchas tareas pequeñas.
Entre los dos, el primero tiene mucho más impacto en el rendimiento. Programar demasiadas tareas pequeñas es un impacto relativamente pequeño en este momento para el recuento de particiones por debajo de 1000. Si tiene del orden de decenas de miles de particiones, la chispa se vuelve muy lenta.
El número de particiones tiene un alto impacto en el rendimiento del código chispa Idealmente, la partición de chispa implica la cantidad de datos que desea barajar. Normalmente, debe establecer este parámetro en su tamaño aleatorio (lectura aleatoria, escritura y escritura) y luego puede decidir y la cantidad de partición de 128 a 256 MB por partición para obtener el máximo rendimiento.
Puede establecer la partición en su código sql de spark configurando la propiedad como: spark.sql.shuffle.partitions o mientras usa cualquier marco de datos, puede configurar esto por belo: df.repartition (numOfPartitions)
Para agregar a la excelente respuesta de javadba, recuerdo que los documentos recomiendan que su número de particiones se establezca en 3 o 4 veces el número de núcleos de CPU en su clúster para que el trabajo se distribuya de manera más uniforme entre los núcleos de CPU disponibles. Es decir, si solo tiene 1 partición por núcleo de CPU en el clúster, tendrá que esperar a que se complete la tarea de ejecución más larga, pero si la hubiera desglosado aún más, la carga de trabajo estaría más equilibrada con las tareas de ejecución rápida y lenta. .