Spark: los datos inusualmente lentos escriben a Cloud Storage

Como etapa final del trabajo de pyspark, necesito guardar 33Gb de datos a Cloud Storage.

Mi grupo está en Dataproc y consta de 15 trabajadores estándar-v4. Estoy trabajando con avro y el código que uso para guardar los datos:

df = spark.createDataFrame(df.rdd, avro_schema_str)
df \
   .write \
   .format("avro") \
   .partitionBy('', 'field_with_lots_of_unique_values>') \
   .save(f"gs://{output_path}")

Las estadísticas de la etapa de escritura de la UI: enter image description here

enter image description here

enter image description here

Mis estadísticas de trabajadores:

enter image description here

enter image description here

enter image description here

Extrañamente para el tamaño adecuado de la partición, el derrame del shuffle es enorme:

enter image description here

Las preguntas que quiero hacer son las siguientes:

  1. si el escenario lleva 1.3h y los trabajadores hacen su trabajo por 25 minutos - ¿ implica que el conductor hace el 50-min escribir a GCS?

  2. ¿Qué causa un derrame de este tamaño dado que no se utilizó ningún caché, persistencia?

  3. ¿Por qué tarda tanto el escenario?

UPDATE:

La pestaña SQL:

enter image description here

Pregunta hecha hace 3 años, 4 meses, 28 días - Por logicloom


2 Respuestas:

  • Para abordar tus preguntas:

    • En cuanto al tiempo de escritura de 50 minutos, es posible que el conductor esté realizando algunas operaciones de procesamiento y organización de los datos antes de enviarlos a Cloud Storage. Esto puede incluir el particionado de los datos, la preparación de los archivos Avro, entre otros pasos.
    • El derramamiento de shuffle a menudo ocurre cuando la memoria asignada para las operaciones de shuffle no es suficiente. Esto puede ser causado por un gran volumen de datos en las operaciones de shuffle, un mal ajuste en la configuración de memoria o un alto número de particiones. Podrías revisar la configuración de memoria asignada para las operaciones de shuffle en tu entorno Dataproc para optimizarla.
    • En cuanto al tiempo que tarda la operación, puede deberse a varias razones, como el tamaño de los datos a escribir, la complejidad de las transformaciones realizadas antes de la escritura, la configuración del clúster (tamaño de los nodos, cantidad de nodos, configuración de memoria y CPU), entre otros aspectos. Podrías revisar y ajustar la configuración del clúster para optimizar el rendimiento de la escritura.

    Te recomendaría revisar detenidamente la configuración de tu clúster, la distribución de tareas entre los nodos y la cantidad de datos procesados en cada etapa para identificar posibles cuellos de botella o áreas de mejora en el proceso de escritura.

    Respondida el Dec 18, 2020 a las 22:24 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • p>漱 p.

    Respondida el Dec 18, 2020 a las 22:34 - por Gemini

    Votos positivos: 0 | Votos negativos: 0