Mejoras del rendimiento de Spark en Dataproc

En este documento se explica cómo habilitar las mejoras de rendimiento de Spark en Dataproc para que tus trabajos de Spark en Dataproc procesen más datos en menos tiempo y con costes reducidos.

Las mejoras de rendimiento de Dataproc Spark incluyen lo siguiente:

  • Mejoras del optimizador de Spark:
    • Reglas del optimizador escritas para mejorar los planes de Spark
    • Mejora del rendimiento del conector de Dataproc BigQuery cuando se usa en trabajos de Spark
  • Mejoras en la ejecución de Spark:
    • Mejoras en el motor de ejecución de Spark

Otras mejoras del rendimiento de Dataproc: consulta la caché de clústeres de Dataproc, que ayuda a reducir el tiempo dedicado a acceder a los datos de Cloud Storage.

Puedes habilitar las mejoras de rendimiento de Spark en un clúster o en un trabajo de Spark:

  • Las mejoras de rendimiento de Spark habilitadas en un clúster se aplican, de forma predeterminada, a todas las tareas de Spark que se ejecutan en el clúster, tanto si se envían al servicio Dataproc como si se envían directamente al clúster.

  • Las mejoras de rendimiento de Spark también se pueden habilitar o inhabilitar en una tarea que se envíe al servicio Dataproc. Los ajustes de mejora del rendimiento de Spark aplicados a un trabajo anulan cualquier ajuste conflictivo definido a nivel de clúster solo para el trabajo especificado.

Precios

Las mejoras de rendimiento de Spark no conllevan cargos adicionales. Se aplican los precios estándar de Dataproc en Compute Engine.

Cuestiones importantes

Las mejoras de rendimiento de Spark ajustan las propiedades de Spark, incluidas las siguientes:

  • spark.sql.shuffle.partitions: Las mejoras de rendimiento de Spark asignan el valor 1000 a esta propiedad en los clústeres de la versión 2.2 de la imagen. Este ajuste puede ralentizar los trabajos pequeños.
  • spark.dataproc.sql.catalog.file.index.stats.enabled: Este ajuste puede provocar que el controlador se quede sin memoria si el número de particiones de Hive es alto. Si inhabilita esta propiedad, puede solucionar el problema de falta de memoria.

Habilitar las mejoras al crear el clúster

Puedes usar la Google Cloud consola, la CLI de Google Cloud y la API de Dataproc para habilitar las mejoras de rendimiento de Dataproc Spark al crear un clúster de Dataproc con versiones de imagen 2.0.69, 2.1.17, 2.2.0 o posteriores.

Consola

  1. En la consola de Google Cloud , abre la página de Dataproc Crear un clúster.
  2. En el formulario Crear clúster de Dataproc, haz clic en Crear en la línea Clúster en Compute Engine.
  3. En la página Crear un clúster de Dataproc en Compute Engine, haz clic en el panel Personalizar clúster y, a continuación, desplázate hasta la sección Propiedades del clúster.
    1. Para habilitar las mejoras de optimización de Spark, sigue estos pasos:
      1. Haga clic en + AÑADIR PROPIEDADES.
      2. Seleccione spark en la lista Prefijo y, a continuación, añada "spark.dataproc.enhanced.optimizer.enabled" en el campo Clave y "true" en el campo Valor.
    2. Para habilitar las mejoras de ejecución de Spark, sigue estos pasos:
      1. Haga clic en + AÑADIR PROPIEDADES.
      2. Seleccione spark en la lista Prefijo y, a continuación, añada "spark.dataproc.enhanced.execution.enabled" en el campo Clave y "true" en el campo Valor.
  4. Completa o confirma el resto de los campos de creación del clúster y, a continuación, haz clic en Crear.

gcloud

  1. Ejecuta el siguiente comando gcloud dataproc clusters create de forma local en una ventana de terminal o en Cloud Shell.

    gcloud dataproc clusters create CLUSTER_NAME \
        --project=PROJECT_ID \
        --region=REGION \
        --image-version=IMAGE \
        --properties=PROPERTIES
    

    Notas:

    • CLUSTER_NAME: el nombre del clúster, que debe ser único en un proyecto. El nombre debe empezar por una letra minúscula y puede contener hasta 51 letras minúsculas, números y guiones. No puede terminar en un guion. El nombre de un clúster eliminado se puede reutilizar.
    • PROJECT_ID: el proyecto que se va a asociar al clúster.
    • REGION: la región de Compute Engine en la que se ubicará el clúster, como us-central1.
      • Puedes añadir la marca opcional --zone=ZONE para especificar una zona dentro de la región indicada, como us-central1-a. Si no especificas ninguna zona, la función de colocación automática de zonas de Dataproc selecciona una zona de la región especificada.
    • IMAGE: Las mejoras de rendimiento de la ejecución y del optimizador de Spark de Dataproc están disponibles en las versiones de imagen de Dataproc 2.0.69+ y 2.1.17+, así como en versiones posteriores. Si omite esta marca, Dataproc seleccionará la última versión secundaria de la imagen predeterminada de Dataproc en Compute Engine para el clúster (consulte Versión de imagen predeterminada de Dataproc).
    • PROPERTIES:

      • Para habilitar las mejoras de optimización de Spark, especifique lo siguiente:
      spark:spark.dataproc.enhanced.optimizer.enabled=true
      
      • Para habilitar las mejoras de ejecución de Spark, especifique lo siguiente:
      spark:spark.dataproc.enhanced.execution.enabled=true
      
      • Para habilitar la optimización de Spark y las mejoras de ejecución, especifica lo siguiente:
      spark:spark.dataproc.enhanced.optimizer.enabled=true,spark:spark.dataproc.enhanced.execution.enabled=true
      

API

  1. Especifica lo siguiente SoftwareConfig.properties como parte de una solicitud clusters.create:

    • Para habilitar las mejoras de optimización de Spark, especifique lo siguiente:
    "spark:spark.dataproc.enhanced.optimizer.enabled": "true"
    
    • Para habilitar las mejoras de ejecución de Spark, especifique lo siguiente:
    "spark:spark.dataproc.enhanced.execution.enabled": "true"
    
    • Para habilitar las optimizaciones y las mejoras de ejecución de Spark, especifica lo siguiente:
    "spark:spark.dataproc.enhanced.optimizer.enabled": "true","spark:spark.dataproc.enhanced.execution.enabled": "true"
    

Habilitar o inhabilitar las mejoras al enviar un trabajo

Puedes usar la Google Cloud consola, la CLI de Google Cloud y la API de Dataproc para habilitar o inhabilitar las mejoras de rendimiento de Spark en una tarea de Spark enviada al servicio de Dataproc.

Consola

  1. En la Google Cloud consola, abre la página de Dataproc Trabajos.
  2. En la página Trabajos, haz clic en Enviar trabajo y, a continuación, desplázate hasta la sección Propiedades del trabajo.
    1. Para habilitar las mejoras de optimización de Spark, sigue estos pasos:
      1. Haga clic en + AÑADIR PROPIEDADES. Añada "spark.dataproc.enhanced.optimizer.enabled" en el campo Clave y "true" en el campo Valor.
    2. Para habilitar las mejoras de ejecución de Spark, sigue estos pasos:
      1. Haga clic en + AÑADIR PROPIEDADES.
      2. Añada "spark.dataproc.enhanced.execution.enabled" en el campo Clave y "true" en el campo Valor.
  3. Rellena o confirma el resto de los campos de envío de la solicitud de empleo y, a continuación, haz clic en Enviar.

gcloud

  1. Ejecuta el siguiente comando gcloud dataproc jobs submit de forma local en una ventana de terminal o en Cloud Shell.

    gcloud dataproc jobs submit SPARK_JOB_TYPE \
        --cluster=CLUSTER_NAME \
        --region=REGION \
        --properties=PROPERTIES
    

    Notas:

    • SPARK_JOB_TYPE: especifica spark, pyspark, spark-sql o spark-r .
    • CLUSTER_NAME: nombre del trabajo en el que se ejecutará.
    • REGION: la región en la que se encuentra el clúster.
    • PROPERTIES:

      • Para habilitar las mejoras de optimización de Spark, especifique lo siguiente:
      spark.dataproc.enhanced.optimizer.enabled=true
      
      • Para habilitar las mejoras de ejecución de Spark, especifique lo siguiente:
      spark.dataproc.enhanced.execution.enabled=true
      
      • Para habilitar la optimización de Spark y las mejoras de ejecución, especifica lo siguiente:
      spark.dataproc.enhanced.optimizer.enabled=true,spark.dataproc.enhanced.execution.enabled=true
      

API

  1. Especifica los siguientes properties para un SparkJob, PySparkJob, SparkSqlJob o SparkRJob como parte de una solicitud jobs.submit:

    • Para habilitar las mejoras de optimización de Spark, especifique lo siguiente:
    "spark.dataproc.enhanced.optimizer.enabled=true"
    
    • Para habilitar las mejoras de ejecución de Spark, especifique lo siguiente:
    "spark.dataproc.enhanced.execution.enabled=true"
    
    • Para habilitar la optimización de Spark y las mejoras de ejecución, especifica lo siguiente:
    "spark.dataproc.enhanced.execution.enabled=true,spark.dataproc.enhanced.optimizer.enabled=true"