Mejoras de rendimiento de Spark en el servicio administrado para Apache Spark

En este documento, se muestra cómo habilitar las mejoras de rendimiento de Spark de Managed Service para Apache Spark para ayudar a que los trabajos de Spark de Managed Service para Apache Spark procesen más datos en menos tiempo con costos reducidos.

Las mejoras de rendimiento de Spark de Managed Service para Apache Spark incluyen lo siguiente:

  • Mejoras del optimizador de Spark:
    • Reglas del optimizador escritas para mejores planes de Spark
    • Rendimiento mejorado del conector de BigQuery de Managed Service para Apache Spark cuando se usa en trabajos de Spark
  • Mejoras de la ejecución de Spark:
    • Mejoras del motor de ejecución de Spark

Otras mejoras de rendimiento de Managed Service para Apache Spark: Consulta el almacenamiento en caché de clústeres de Managed Service para Apache Spark , que ayuda a reducir la cantidad de tiempo que se dedica a acceder a los datos en 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 todos los trabajos de Spark que se ejecutan en el clúster, ya sea que se envíen al servicio de Managed Service para Apache Spark o directamente al clúster.

  • Las mejoras de rendimiento de Spark también se pueden habilitar o inhabilitar en un trabajo que se envía a Managed Service para Apache Spark. La configuración de las mejoras de rendimiento de Spark que se aplica a un trabajo anula cualquier configuración en conflicto establecida a nivel del clúster solo para el trabajo especificado.

Precios

Las mejoras de rendimiento de Spark no generan cargos adicionales. Se aplican los precios estándar de Managed Service para Apache Spark.

Consideraciones

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

  • spark.sql.shuffle.partitions: Las mejoras de rendimiento de Spark establecen esta propiedad en 1000 para los clústeres de la versión de imagen 2.2. Esta configuración puede ralentizar los trabajos pequeños.
  • spark.dataproc.sql.catalog.file.index.stats.enabled: Esta configuración puede generar condiciones OOM (sin memoria) del controlador si el recuento de particiones de Hive es alto. Inhabilitar esta propiedad puede corregir la condición OOM.

Habilita las mejoras durante la creación del clúster

Puedes usar la Google Cloud consola, Google Cloud CLI y la API de Managed Service para Apache Spark para habilitar las mejoras de rendimiento de Spark de Managed Service para Apache Spark cuando creas un clúster de Managed Service para Apache Spark con las versiones de imagen 2.0.69+, 2.1.17+, 2.2.0+ y versiones de imagen posteriores.

Console

  1. En la Google Cloud consola de, abre la página Crear un clúster de Managed Service para Apache Spark.
  2. En el formulario Crear un clúster de Managed Service para Apache Spark, haz clic en Crear en la línea Clúster.
  3. En la página Crear un clúster de Managed Service para Apache Spark , haz clic en el panel Personalizar clúster y, luego, desplázate hasta la sección Propiedades del clúster.
    1. Para habilitar las mejoras de optimización de Spark, haz lo siguiente:
      1. Haz clic en + AGREGAR PROPIEDADES.
      2. Selecciona spark en la lista de prefijos y, luego, agrega "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, haz lo siguiente:
      1. Haz clic en + AGREGAR PROPIEDADES.
      2. Selecciona spark en la lista de prefijos y, luego, agrega "spark.dataproc.enhanced.execution.enabled" en el campo Clave y "true" en el campo Valor.
  4. Completa o confirma los otros campos de creación del clúster y, luego, haz clic en Crear.

gcloud

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

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

    Notas:

    • CLUSTER_NAME: Es el nombre del clúster, que debe ser único dentro de un proyecto. El nombre debe comenzar con una letra minúscula y puede contener hasta 51 letras minúsculas, números y guiones. No puede terminar con un guion. Se puede volver a usar el nombre de un clúster borrado.
    • PROJECT_ID: Es el proyecto que se asociará con el clúster.
    • REGION: Es la región de Compute Engine en la que se ubicará el clúster, como us-central1.
      • Puedes agregar la marca opcional --zone=ZONE para especificar una zona dentro de la región especificada, como us-central1-a. Si no especificas una zona, la función de colocación automática de zonas de Managed Service para Apache Spark selecciona una zona con la región especificada.
    • IMAGE: Las mejoras de rendimiento de ejecución y optimizador de Spark de Managed Service para Apache Spark están disponibles en las versiones de imagen de Managed Service para Apache Spark 2.0.69+ y 2.1.17+ y en versiones posteriores. Si omites esta marca, Managed Service para Apache Spark seleccionará la versión secundaria más reciente de la imagen predeterminada de Managed Service para Apache Spark para el clúster (consulta la versión de imagen predeterminada de Managed Service para Apache Spark).
    • PROPERTIES:

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

API

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

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

Habilita o inhabilita las mejoras durante el envío del trabajo

Puedes usar la Google Cloud consola, Google Cloud CLI y la API de Managed Service para Apache Spark para habilitar o inhabilitar las mejoras de rendimiento de Spark en un trabajo de Spark enviado a Managed Service para Apache Spark.

Console

  1. En la Google Cloud consola de, abre la página Trabajos de Managed Service para Apache Spark .
  2. En la página Trabajos, haz clic en Enviar trabajo y, luego, desplázate hasta la sección Propiedades del trabajo.
    1. Para habilitar las mejoras de optimización de Spark, haz lo siguiente:
      1. Haz clic en + AGREGAR PROPIEDADES. Agrega "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, haz lo siguiente:
      1. Haz clic en + AGREGAR PROPIEDADES.
      2. Agrega "spark.dataproc.enhanced.execution.enabled" en el campo Clave y "true" en el campo Valor.
  3. Completa o confirma los otros campos de envío del trabajo y, luego, haz clic en Enviar.

gcloud

  1. Ejecuta el siguiente comando gcloud dataproc jobs submit de forma local en una ventana de la 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: Es el nombre del trabajo en el que se ejecutará el trabajo.
    • REGION: Es la región en la que se encuentra el clúster.
    • PROPERTIES:

      • Para habilitar las mejoras de optimización de Spark, especifica lo siguiente:
      spark.dataproc.enhanced.optimizer.enabled=true
      
      • Para habilitar las mejoras de ejecución de Spark, especifica lo siguiente:
      spark.dataproc.enhanced.execution.enabled=true
      
      • Para habilitar las mejoras de optimización y ejecución de Spark, 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, especifica lo siguiente:
    "spark.dataproc.enhanced.optimizer.enabled=true"
    
    • Para habilitar las mejoras de ejecución de Spark, especifica lo siguiente:
    "spark.dataproc.enhanced.execution.enabled=true"
    
    • Para habilitar las mejoras de optimización y ejecución de Spark, especifica lo siguiente:
    "spark.dataproc.enhanced.execution.enabled=true,spark.dataproc.enhanced.optimizer.enabled=true"