En este documento, se muestra cómo habilitar las mejoras de rendimiento de Dataproc Spark para ayudar a que tus trabajos de Dataproc Spark procesen más datos en menos tiempo y con costos reducidos.
Las mejoras en el rendimiento de Dataproc Spark incluyen lo siguiente:
- Mejoras en el optimizador de Spark:
- Reglas del optimizador escritas para mejores planes de Spark
- Se mejoró el rendimiento del conector de BigQuery de Dataproc 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 en el rendimiento de Dataproc: Consulta el almacenamiento en caché de clústeres de Dataproc, que ayuda a reducir la cantidad de tiempo dedicado al acceso a los datos en Cloud Storage.
Puedes habilitar las mejoras en el rendimiento de Spark en un clúster o en un trabajo de Spark:
Las mejoras en el 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 Dataproc o directamente al clúster.
Las mejoras en el rendimiento de Spark también se pueden habilitar o inhabilitar en un trabajo que se envía al servicio de Dataproc. La configuración de las mejoras de rendimiento de Spark que se aplica a un trabajo anula cualquier configuración conflictiva establecida a nivel del clúster solo para el trabajo especificado.
Precios
Las mejoras en el rendimiento de Spark no generan cargos adicionales. Se aplican los precios estándar de Dataproc en Compute Engine.
Consideraciones
Las mejoras en el rendimiento de Spark ajustan las propiedades de Spark, incluidas las siguientes:
spark.sql.shuffle.partitions
: Las mejoras en el rendimiento de Spark establecen esta propiedad en1000
para los clústeres de la versión de imagen2.2
. Este parámetro de configuración puede ralentizar los trabajos pequeños.spark.dataproc.sql.catalog.file.index.stats.enabled
: Este parámetro de configuración puede generar condiciones de OOM (sin memoria) del controlador si el recuento de particiones de Hive es alto. Si inhabilitas esta propiedad, se puede corregir la condición de OOM.
Habilita las mejoras durante la creación del clúster
Puedes usar la consola de Google Cloud , Google Cloud CLI y la API de Dataproc para habilitar las mejoras de rendimiento de Dataproc Spark cuando creas un clúster de Dataproc con versiones de imagen 2.0.69+, 2.1.17+, 2.2.0+ y versiones de imagen posteriores.
Console
- En la Google Cloud consola, abre la páginaCrear un clúster de Dataproc.
- En el formulario Crear clúster de Dataproc, haz clic en Crear en la línea Clúster en Compute Engine.
- En la página Crea un clúster de Dataproc en Compute Engine, haz clic en el panel Personalizar clúster y, luego, desplázate hasta la sección Propiedades del clúster.
- Para habilitar las mejoras en la optimización de Spark, haz lo siguiente:
- Haz clic en + AGREGAR PROPIEDADES.
- Selecciona spark en la lista Prefijo y, luego, agrega "spark.dataproc.enhanced.optimizer.enabled" en el campo Clave y "true" en el campo Valor.
- Para habilitar las mejoras en la ejecución de Spark, haz lo siguiente:
- Haz clic en + AGREGAR PROPIEDADES.
- Selecciona spark en la lista Prefijo y, luego, agrega "spark.dataproc.enhanced.execution.enabled" en el campo Clave y "true" en el campo Valor.
- Para habilitar las mejoras en la optimización de Spark, haz lo siguiente:
- Completa o confirma el resto de los campos de creación del clúster y, luego, haz clic en Crear.
gcloud
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 en minúscula y puede contener hasta 51 letras en minúscula, números y guiones. No puede terminar con un guion. Se puede reutilizar 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, comous-central1-a
. Si no especificas una zona, la función de ubicación de zona automática de Dataproc selecciona una zona con la región especificada.
- Puedes agregar la marca opcional
- IMAGE: Las mejoras en el rendimiento de la ejecución y el optimizador de Spark de Dataproc están disponibles en las versiones de imagen
2.0.69+
y2.1.17+
de Dataproc, y en versiones posteriores. Si omites esta marca, Dataproc seleccionará la versión secundaria más reciente de la imagen predeterminada de Dataproc en Compute Engine para el clúster (consulta Versión de imagen predeterminada de Dataproc). PROPERTIES:
- Para habilitar las mejoras de optimización de Spark, especifica lo siguiente:
spark:spark.dataproc.enhanced.optimizer.enabled=true
- Para habilitar las mejoras en la ejecución de Spark, especifica lo siguiente:
spark:spark.dataproc.enhanced.execution.enabled=true
- Para habilitar las mejoras en la optimización y la ejecución de Spark, especifica lo siguiente:
spark:spark.dataproc.enhanced.optimizer.enabled=true,spark:spark.dataproc.enhanced.execution.enabled=true
API
Especifica el siguiente objeto
SoftwareConfig.properties
como parte de una solicitudclusters.create
:- Para habilitar las mejoras de optimización de Spark, especifica lo siguiente:
"spark:spark.dataproc.enhanced.optimizer.enabled": "true"
- Para habilitar las mejoras en la ejecución de Spark, especifica lo siguiente:
"spark:spark.dataproc.enhanced.execution.enabled": "true"
- Para habilitar las mejoras en la optimización y la 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 cuando envías un trabajo
Puedes usar la Google Cloud consola, Google Cloud CLI y la API de Dataproc para habilitar o inhabilitar las mejoras de rendimiento de Spark en un trabajo de Spark enviado al servicio de Dataproc.
Console
- En la Google Cloud consola, abre la páginaTrabajos de Dataproc.
- En la página Trabajos, haz clic en Enviar trabajo y, luego, desplázate hasta la sección Propiedades del trabajo.
- Para habilitar las mejoras en la optimización de Spark, haz lo siguiente:
- Haz clic en + AGREGAR PROPIEDADES. Agrega "spark.dataproc.enhanced.optimizer.enabled" en el campo Clave y "true" en el campo Valor.
- Para habilitar las mejoras en la ejecución de Spark, haz lo siguiente:
- Haz clic en + AGREGAR PROPIEDADES.
- Agrega "spark.dataproc.enhanced.execution.enabled" en el campo Clave y "true" en el campo Valor.
- Para habilitar las mejoras en la optimización de Spark, haz lo siguiente:
- Termina de completar o confirmar los demás campos de envío del trabajo y, luego, haz clic en Enviar.
gcloud
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
ospark-r
. - CLUSTER_NAME: Es el nombre del trabajo en el que se ejecutará.
- 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 en la ejecución de Spark, especifica lo siguiente:
spark.dataproc.enhanced.execution.enabled=true
- Para habilitar las mejoras en la optimización y la ejecución de Spark, especifica lo siguiente:
spark.dataproc.enhanced.optimizer.enabled=true,spark.dataproc.enhanced.execution.enabled=true
- SPARK_JOB_TYPE: Especifica
API
Especifica el siguiente
properties
para un SparkJob, PySparkJob, SparkSqlJob o SparkRJob como parte de una solicitud dejobs.submit
:- Para habilitar las mejoras de optimización de Spark, especifica lo siguiente:
"spark.dataproc.enhanced.optimizer.enabled=true"
- Para habilitar las mejoras en la ejecución de Spark, especifica lo siguiente:
"spark.dataproc.enhanced.execution.enabled=true"
- Para habilitar las mejoras en la optimización y la ejecución de Spark, especifica lo siguiente:
"spark.dataproc.enhanced.execution.enabled=true,spark.dataproc.enhanced.optimizer.enabled=true"