Ajuste automático de las cargas de trabajo de Spark

Optimizar una carga de trabajo de Spark para mejorar el rendimiento y la resiliencia puede ser un desafío debido a la la cantidad de opciones de configuración de Spark y la dificultad de evaluar cómo esas opciones impactan en una carga de trabajo. El ajuste automático de Dataproc Serverless ofrece una alternativa a la configuración manual de cargas de trabajo aplicando automáticamente los parámetros de configuración de Spark a una carga de trabajo recurrente de Spark según las prácticas recomendadas de optimización de Spark un análisis de las ejecuciones de cargas de trabajo.

Regístrate para el ajuste automático de Dataproc Serverless

Para registrarte y obtener acceso al ajuste automático de Dataproc Serverless versión preliminar que se describe en esta página, complete y envíe la Versión preliminar de Gemini en BigQuery formulario de registro. Una vez aprobado el formulario, los proyectos incluidos en él tienen acceso a funciones de vista previa.

Ventajas

El ajuste automático de Dataproc Serverless puede proporcionar los siguientes beneficios:

  • Rendimiento mejorado: Ajuste de optimización para aumentar el rendimiento.
  • Optimización más rápida: Se configura automáticamente para evitar el trabajo manual y tedioso. pruebas de configuración
  • Mayor resiliencia: Asignación automática de memoria para evitar problemas de memoria fallas

Limitaciones

El ajuste automático de Dataproc Serverless tiene las siguientes limitaciones:

  • El ajuste automático se calcula y aplica a la segunda ejecución y las siguientes de un carga de trabajo. La primera ejecución de una carga de trabajo recurrente No se ajusta automáticamente porque el ajuste automático de Dataproc Serverless usa cargas de trabajo para su optimización.
  • No se admite la reducción de memoria.
  • El ajuste automático no se aplica de forma retroactiva a las cargas de trabajo en ejecución, sino a las cohortes de carga de trabajo enviadas.

Cohortes de ajuste automático

El ajuste automático se aplica a ejecuciones recurrentes de una carga de trabajo por lotes, llamadas cohortes. El nombre de la cohorte que especificas cuando envías una carga de trabajo. la identifica como una de las ejecuciones sucesivas de la carga de trabajo recurrente. Te recomendamos que uses nombres de cohortes que describan el tipo de o que ayuden a identificar las ejecuciones de una carga de trabajo como parte de una carga de trabajo recurrente. Por ejemplo, especifica daily_sales_aggregation como el valor nombre de cohorte para una carga de trabajo programada que ejecuta una tarea diaria de agregación de ventas.

Situaciones de ajuste automático

Debes aplicar el ajuste automático de Dataproc Serverless a tu carga de trabajo de la siguiente manera: selecciona una o más de las siguientes situaciones de ajuste automático:

  • MEMORY: Ajusta automáticamente la asignación de memoria de Spark para predecir y evitar el potencial errores de carga de trabajo por falta de memoria. Corregir una carga de trabajo con errores anteriores debido a a un error de memoria insuficiente (OOM).
  • SCALING: Ajusta automáticamente la configuración del ajuste de escala automático de Spark.
  • BROADCAST_HASH_JOIN: Ajusta automáticamente la configuración de Spark para optimizar la unión de transmisión de SQL. rendimiento.

Precios

El ajuste automático de Dataproc Serverless se ofrece durante la vista previa sin cargo adicional. Estándar Se aplican los precios de Dataproc Serverless.

Disponibilidad regional

Puedes usar el ajuste automático de Dataproc Serverless con lotes que se envían regiones de Compute Engine disponibles.

Usa el ajuste automático de Dataproc Serverless

Puedes habilitar el ajuste automático de Dataproc Serverless en un carga de trabajo usando la consola de Google Cloud, Google Cloud CLI API de Dataproc.

Console

Para habilitar el ajuste automático de Dataproc Serverless en cada envío de una carga de trabajo por lotes recurrente, realiza los siguientes pasos:

  1. En la consola de Google Cloud, ve a la página Lotes de Dataproc.

    Ir a Lotes de Dataproc

  2. Para crear una carga de trabajo por lotes, haz clic en Crear.

  3. En la sección Contenedor, completa los siguientes campos para tu carga de trabajo de Spark:

    • Cohort: el nombre de la cohorte, que identifica el lote como parte de una serie de cargas de trabajo recurrentes. El ajuste automático se aplica a la segunda carga de trabajo y las posteriores que se envían. por el nombre de esta cohorte. Por ejemplo, especifica daily_sales_aggregation como el valor nombre de cohorte para una carga de trabajo programada que ejecuta una tarea diaria de agregación de ventas.

    • Situaciones de ajuste automático: Una o más situaciones de ajuste automático para optimizar la carga de trabajo, por ejemplo, BROADCAST_HASH_JOIN, MEMORY y SCALING. Puedes cambiar la situación elegida con cada envío de cohorte por lotes.

  4. Completa otras secciones de la página Crear lote según sea necesario y, luego, haz clic en Enviar. Para obtener más información sobre estos campos, consulta Envía una carga de trabajo por lotes.

gcloud

Para habilitar el ajuste automático de Dataproc Serverless en cada envío de una carga de trabajo por lotes recurrente, ejecuta la siguiente gcloud CLI gcloud dataproc batches submit de forma local en una ventana de terminal o en Cloud Shell.

gcloud dataproc batches submit COMMAND \
    --region=REGION \
    --cohort=COHORT \
    --autotuning-scenarios=SCENARIOS \
    other arguments ...

Reemplaza lo siguiente:

  • COMMAND: Es el tipo de carga de trabajo de Spark, como Spark, PySpark. Spark-Sql o Spark-R.
  • REGION: el región en la que se ejecutará tu carga de trabajo.
  • COHORT: Es el nombre de la cohorte, que identifica el lote como parte de una serie de cargas de trabajo recurrentes. El ajuste automático se aplica a la segunda carga de trabajo y las posteriores que se envían. por el nombre de esta cohorte. Por ejemplo, especifica daily_sales_aggregation como el valor nombre de cohorte para una carga de trabajo programada que ejecuta una tarea diaria de agregación de ventas.

  • SCENARIOS: Uno o más separados por comas situaciones de ajuste automático para optimizar la carga de trabajo, por ejemplo, --autotuning-scenarios=MEMORY,SCALING. Puedes cambiar la lista de situaciones con cada envío de cohorte por lotes.

API

Para habilitar el ajuste automático de Dataproc Serverless en cada envío de una carga de trabajo por lotes recurrente, envía un batches.create. que incluya los siguientes campos:

  • RuntimeConfig.cohort: Es el nombre de la cohorte, que identifica el lote como parte de una serie de cargas de trabajo recurrentes. El ajuste automático se aplica a la segunda carga de trabajo y las siguientes. por el nombre de esta cohorte. Por ejemplo, especifica daily_sales_aggregation como el valor nombre de cohorte para una carga de trabajo programada que ejecuta una tarea diaria de agregación de ventas.
  • AutotuningConfig.scenarios: Uno o más situaciones de ajuste automático para optimizar la carga de trabajo, por ejemplo, BROADCAST_HASH_JOIN, MEMORY y SCALING. Puedes cambiar la lista de situaciones con cada envío de cohorte por lotes.

Ejemplo:

...
runtimeConfig:
  cohort: daily_sales_aggregation
  autotuningConfig:
    scenarios:
    - BROADCAST_HASH_JOIN
    - MEMORY
    - SCALING
...

Java

Antes de probar esta muestra, sigue las instrucciones de configuración de Java que se encuentran en el Guía de inicio rápido de Dataproc Serverless con bibliotecas cliente. Para obtener más información, consulta la API de Dataproc sin servidores Java documentación de referencia.

Para autenticarte en Dataproc Serverless, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

Para habilitar el ajuste automático de Dataproc Serverless en cada envío de un lote recurrente Llama a BatchControllerClient.createBatch. con una CreateBatchRequest que incluya los siguientes campos:

  • Batch.RuntimeConfig.cohort: El nombre de la cohorte, que identifica el lote como parte de una serie de cargas de trabajo recurrentes. El ajuste automático se aplica a la segunda carga de trabajo y las siguientes. por el nombre de esta cohorte. Por ejemplo, puedes especificar daily_sales_aggregation como el valor nombre de cohorte para una carga de trabajo programada que ejecuta una tarea diaria de agregación de ventas.
  • Batch.RuntimeConfig.AutotuningConfig.scenarios: Uno o más situaciones de ajuste automático para optimizar la carga de trabajo, como BROADCAST_HASH_JOIN, MEMORY y SCALING. Puedes cambiar la lista de situaciones con cada envío de cohorte por lotes. Para obtener una lista completa de situaciones, consulta la AutotuningConfig.Scenario Javadoc.

Ejemplo:

...
Batch batch =
  Batch.newBuilder()
    .setRuntimeConfig(
      RuntimeConfig.newBuilder()
        .setCohort("daily_sales_aggregation")
        .setAutotuningConfig(
          AutotuningConfig.newBuilder()
            .addScenarios(Scenario.SCALING))
    ...
  .build();

batchControllerClient.createBatch(
    CreateBatchRequest.newBuilder()
        .setParent(parent)
        .setBatchId(batchId)
        .setBatch(batch)
        .build());
...

Para usar la API, debes utilizar la versión 4.43.0 de la biblioteca cliente google-cloud-dataproc o una fecha posterior. Puedes usar una de las siguientes configuraciones para agregar la biblioteca a tu en un proyecto final.

Maven

<dependencies>
 <dependency>
   <groupId>com.google.cloud</groupId>
   <artifactId>google-cloud-dataproc</artifactId>
   <version>4.43.0</version>
 </dependency>
</dependencies>

Gradle

implementation 'com.google.cloud:google-cloud-dataproc:4.43.0'

SBT

libraryDependencies += "com.google.cloud" % "google-cloud-dataproc" % "4.43.0"

Python

Antes de probar esta muestra, sigue las instrucciones de configuración de Python que se encuentran en el Guía de inicio rápido de Dataproc Serverless con bibliotecas cliente. Para obtener más información, consulta la API de Dataproc sin servidores Python documentación de referencia.

Para autenticarte en Dataproc Serverless, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

Para habilitar el ajuste automático de Dataproc Serverless en cada envío de un lote recurrente Llama a BatchControllerClient.create_batch. con una instancia de Batch que incluya los siguientes campos:

  • batch.runtime_config.cohort: El nombre de la cohorte, que identifica el lote como parte de una serie de cargas de trabajo recurrentes. El ajuste automático se aplica a la segunda carga de trabajo y las siguientes. por el nombre de esta cohorte. Por ejemplo, puedes especificar daily_sales_aggregation como el valor nombre de cohorte para una carga de trabajo programada que ejecuta una tarea diaria de agregación de ventas.
  • batch.runtime_config.autotuning_config.scenarios: Uno o más situaciones de ajuste automático para optimizar la carga de trabajo, como BROADCAST_HASH_JOIN, MEMORY, SCALING. Puedes cambiar la lista de situaciones con cada envío de cohorte por lotes. Para obtener una lista completa de situaciones, consulta la Situación referencia.

Ejemplo:

# Create a client
client = dataproc_v1.BatchControllerClient()

# Initialize request argument(s)
batch = dataproc_v1.Batch()
batch.pyspark_batch.main_python_file_uri = "gs://bucket/run_tpcds.py"
batch.runtime_config.cohort = "daily_sales_aggregation"
batch.runtime_config.autotuning_config.scenarios = [
    Scenario.SCALING
]

request = dataproc_v1.CreateBatchRequest(
    parent="parent_value",
    batch=batch,
)

# Make the request
operation = client.create_batch(request=request)

Para usar la API, debes utilizar la versión 5.10.1 de la biblioteca cliente google-cloud-dataproc o una fecha posterior. Para agregarla a tu proyecto, puedes usar el siguiente requisito:

google-cloud-dataproc>=5.10.1

Airflow

Para habilitar el ajuste automático de Dataproc Serverless en cada envío de un lote recurrente Llama a BatchControllerClient.create_batch. con una instancia de Batch que incluya los siguientes campos:

  • batch.runtime_config.cohort: El nombre de la cohorte, que identifica el lote como parte de una serie de cargas de trabajo recurrentes. El ajuste automático se aplica a la segunda carga de trabajo y las siguientes. por el nombre de esta cohorte. Por ejemplo, puedes especificar daily_sales_aggregation como el valor nombre de cohorte para una carga de trabajo programada que ejecuta una tarea diaria de agregación de ventas.
  • batch.runtime_config.autotuning_config.scenarios: Uno o más situaciones de ajuste automático para optimizar la carga de trabajo, por ejemplo, BROADCAST_HASH_JOIN, MEMORY,SCALING. Puedes cambiar la lista de situaciones con cada envío de cohorte por lotes. Para obtener una lista completa de situaciones, consulta la Situación referencia.

Ejemplo:

create_batch = DataprocCreateBatchOperator(
    task_id="batch_create",
    batch={
        "pyspark_batch": {
            "main_python_file_uri": PYTHON_FILE_LOCATION,
        },
        "environment_config": {
            "peripherals_config": {
                "spark_history_server_config": {
                    "dataproc_cluster": PHS_CLUSTER_PATH,
                },
            },
        },
        "runtime_config": {
            "cohort": "daily_sales_aggregation",
            "autotuning_config": {
                "scenarios": [
                    Scenario.SCALING,
                ]
            }
        },
    },
    batch_id="BATCH_ID",
)

Para usar la API, debes utilizar la versión 5.10.1 de la biblioteca cliente google-cloud-dataproc o una fecha posterior. Puedes usar el siguiente requisito de entorno de Airflow:

google-cloud-dataproc>=5.10.1

Para actualizar el paquete en Cloud Composer, consulta Instala dependencias de Python para Cloud Composer .

Ver cambios de ajuste automático

Para ver los cambios de ajuste automático de Dataproc Serverless en una carga de trabajo por lotes, sigue estos pasos: ejecuta gcloud dataproc batches describe kubectl.

Ejemplo: El resultado de gcloud dataproc batches describe es similar al siguiente:

...
runtimeInfo:
   propertiesInfo:
    # Properties set by autotuning.
    autotuningProperties
      spark.driver.memory:
        annotation: Driver OOM was detected
        value: 11520m
      spark.driver.memoryOverhead:
        annotation: Driver OOM was detected
        value: 4608m
    # Old overwritten properties.
    userProperties
...

Puedes ver los cambios de ajuste automático más recientes que se aplicaron. a una carga de trabajo en ejecución, completada o con errores en la En la página Detalles del lote de la consola de Google Cloud, en la pestaña Investigar.

Panel de investigación de ajuste automático.