Ajusta automáticamente las cargas de trabajo por lotes de Spark

En este documento, se proporciona información sobre el ajuste automático de las cargas de trabajo por lotes de Managed Service para Apache Spark. Optimizar una carga de trabajo de Spark para el rendimiento y la resiliencia puede ser difícil debido a la cantidad de opciones de configuración de Spark y a la dificultad de evaluar cómo esas opciones afectan una carga de trabajo. El ajuste automático de Managed Service para Apache Spark proporciona una alternativa a la configuración manual de la carga de trabajo mediante la aplicación automática de la configuración de Spark a una carga de trabajo recurrente de Spark en función de las prácticas recomendadas de optimización de Spark y un análisis de las ejecuciones de la carga de trabajo (llamadas "cohortes").

Regístrate para el ajuste automático de Managed Service para Apache Spark

Para registrarte y obtener acceso a la versión preliminar del ajuste automático de Managed Service para Apache Spark que se describe en esta página, completa y envía el formulario de registro de solicitud de acceso a la versión preliminar de Managed Service para Apache Spark. Una vez que se aprueba el formulario, los proyectos que se enumeran en él tienen acceso a las funciones de vista previa.

Beneficios

El ajuste automático de Managed Service para Apache Spark puede proporcionar los siguientes beneficios:

  • Optimización automática: Ajusta automáticamente las configuraciones de Spark y por lotes de Managed Service para Apache Spark ineficientes, lo que puede acelerar los tiempos de ejecución de los trabajos.
  • Aprendizaje histórico: Aprende de las ejecuciones recurrentes para aplicar recomendaciones adaptadas a tu carga de trabajo.

Cohortes de ajuste automático

El ajuste automático se aplica a las ejecuciones recurrentes (cohortes) de una carga de trabajo por lotes.

El nombre de la cohorte que especificas cuando envías una carga de trabajo por lotes la identifica como una de las ejecuciones sucesivas de la carga de trabajo recurrente.

El ajuste automático se aplica a las cohortes de carga de trabajo por lotes de la siguiente manera:

  • El ajuste automático se calcula y se aplica a la segunda cohorte y a las posteriores de una carga de trabajo. El ajuste automático no se aplica a la primera ejecución de una carga de trabajo recurrente porque el ajuste automático de Managed Service para Apache Spark usa el historial de la carga de trabajo para la optimización.

  • El ajuste automático no se aplica de forma retroactiva a las cargas de trabajo en ejecución, sino solo a las cargas de trabajo enviadas recientemente.

  • El ajuste automático aprende y mejora con el tiempo mediante el análisis de las estadísticas de la cohorte. Para permitir que el sistema recopile datos suficientes, te recomendamos que mantengas habilitado el ajuste automático durante al menos cinco ejecuciones.

Nombres de cohortes: Una práctica recomendada es usar nombres de cohortes que ayuden a identificar el tipo de carga de trabajo recurrente. Por ejemplo, puedes usar daily_sales_aggregation como el nombre de la cohorte para una carga de trabajo programada que ejecuta una tarea de agregación de ventas diarias.

Situaciones de ajuste automático

Cuando corresponde, el ajuste automático selecciona y ejecuta automáticamente los siguientes scenarios o los siguientes objetivos para optimizar una carga de trabajo por lotes:

  • Ajuste de escala: Configuración del ajuste de escala automático de Spark.
  • Optimización de la unión: Configuración de Spark para optimizar el rendimiento de la unión de transmisión de SQL.

Usa el ajuste automático de Managed Service para Apache Spark

Puedes habilitar el ajuste automático de Managed Service para Apache Spark en una carga de trabajo por lotes con la Google Cloud consola de, Google Cloud CLI, la API de Dataproc o las bibliotecas cliente de Cloud.

Console

Para habilitar el ajuste automático de Managed Service para Apache Spark en cada envío de una carga de trabajo por lotes recurrente, sigue estos pasos:

  1. En la Google Cloud consola de, ve a la página Lotes de Managed Service para Apache Spark.

    Ir a los lotes de Managed Service para Apache Spark

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

  3. En la sección Ajuste automático , haz lo siguiente:

    • Activa el botón Habilitar para habilitar el ajuste automático para la carga de trabajo de Spark.

    • Cohorte: Completa el nombre de la cohorte, que identifica el lote como uno de una serie de cargas de trabajo recurrentes. El ajuste automático se aplica a la segunda carga de trabajo y a las posteriores que se envían con este nombre de cohorte. Por ejemplo, especifica daily_sales_aggregation como el nombre de la cohorte para una carga de trabajo por lotes programada que ejecuta una tarea de agregación de ventas diarias.

  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 Managed Service para Apache Spark en cada envío de una carga de trabajo por lotes recurrente, ejecuta el siguiente comando de gcloud CLI gcloud dataproc batches submit de forma local en una ventana de la terminal o en Cloud Shell.

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

Reemplaza lo siguiente:

API

Para habilitar el ajuste automático de Managed Service para Apache Spark en cada envío de una carga de trabajo por lotes recurrente, envía una batches.create que incluya los siguientes campos:

  • RuntimeConfig.cohort: el nombre de la cohorte, que identifica el lote como uno de una serie de cargas de trabajo recurrentes. El ajuste automático se aplica a la segunda carga de trabajo y a las posteriores que se envían con este nombre de cohorte. Por ejemplo, especifica daily_sales_aggregation como el nombre de la cohorte para una carga de trabajo por lotes programada que ejecuta una tarea de agregación de ventas diarias.
  • AutotuningConfig.scenarios: Especifica AUTO para habilitar el ajuste automático en la carga de trabajo por lotes de Spark.

Ejemplo:

...
runtimeConfig:
  cohort: COHORT_NAME
  autotuningConfig:
    scenarios:
    - AUTO
...

Java

Antes de probar este ejemplo, sigue las instrucciones de configuración de Java que encontrarás en la guía de inicio rápido de Managed Service para Apache Spark con bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de JavaManaged Service para Apache Spark.

Para autenticarte en Managed Service para Apache Spark, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

Para habilitar el ajuste automático de Managed Service para Apache Spark en cada envío de una carga de trabajo por lotes recurrente, llama a BatchControllerClient.createBatch con un CreateBatchRequest que incluya los siguientes campos:

  • Batch.RuntimeConfig.cohort: El nombre de la cohorte, que identifica el lote como uno de una serie de cargas de trabajo recurrentes. El ajuste automático se aplica a la segunda carga de trabajo y a las posteriores que se envían con este nombre de cohorte. Por ejemplo, puedes especificar daily_sales_aggregation como el nombre de la cohorte para una carga de trabajo por lotes programada que ejecuta una tarea de agregación de ventas diarias.
  • Batch.RuntimeConfig.AutotuningConfig.scenarios: Especifica AUTO para habilitar el ajuste automático en la carga de trabajo por lotes de Spark.

Ejemplo:

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

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

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

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 este ejemplo, sigue las instrucciones de configuración Python que encontrarás en la guía de inicio rápido de Managed Service para Apache Spark con bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de PythonManaged Service para Apache Spark.

Para autenticarte en Managed Service para Apache Spark, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

Para habilitar el ajuste automático de Managed Service para Apache Spark en cada envío de una carga de trabajo por lotes recurrente, llama a BatchControllerClient.create_batch con un lote que incluya los siguientes campos:

  • batch.runtime_config.cohort: El nombre de la cohorte, que identifica el lote como uno de una serie de cargas de trabajo recurrentes. El ajuste automático se aplica a la segunda carga de trabajo y a las posteriores que se envían con este nombre de cohorte. Por ejemplo, puedes especificar daily_sales_aggregation como el nombre de la cohorte para una carga de trabajo por lotes programada que ejecuta una tarea de agregación de ventas diarias.
  • batch.runtime_config.autotuning_config.scenarios: Especifica AUTO para habilitar el ajuste automático en la carga de trabajo por lotes de Spark.

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.AUTO
]

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

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

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

google-cloud-dataproc>=5.10.1

Airflow

En lugar de enviar cada cohorte de lotes ajustada automáticamente de forma manual, puedes usar Airflow para programar el envío de cada carga de trabajo por lotes recurrente. Para ello, llama a BatchControllerClient.create_batch con un lote que incluya los siguientes campos:

  • batch.runtime_config.cohort: El nombre de la cohorte, que identifica el lote como uno de una serie de cargas de trabajo recurrentes. El ajuste automático se aplica a la segunda carga de trabajo y a las posteriores que se envían con este nombre de cohorte. Por ejemplo, puedes especificar daily_sales_aggregation como el nombre de la cohorte para una carga de trabajo por lotes programada que ejecuta una tarea de agregación de ventas diarias.
  • batch.runtime_config.autotuning_config.scenarios: Especifica AUTO para habilitar el ajuste automático en la carga de trabajo por lotes de Spark.

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.AUTO,
                ]
            }
        },
    },
    batch_id="BATCH_ID",
)

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

google-cloud-dataproc>=5.10.1

Para actualizar el paquete en Managed Service para Apache Airflow, consulta Instala dependencias de Python para Managed Airflow .

Visualiza los cambios del ajuste automático

Para ver los cambios del ajuste automático de Managed Service para Apache Spark en una carga de trabajo por lotes, ejecuta el gcloud dataproc batches describe comando.

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

...
runtimeInfo:
  propertiesInfo:
    # Properties set by autotuning.
    autotuningProperties:
      spark.dataproc.sql.broadcastJoin.hints:
        annotation: Converted 1 Sort-Merge Joins to Broadcast Hash Join
        value: v2;Inner,<hint>
      spark.dynamicAllocation.initialExecutors:
        annotation: Adjusted Initial executors based on stages submitted in first
          2 minutes to 9
        overriddenValue: '2'
        value: '9'
      spark.dynamicAllocation.maxExecutors:
        annotation: Tuned Max executors to 11
        overriddenValue: '5'
        value: '11'
      spark.dynamicAllocation.minExecutors:
        annotation: Changed Min executors to 9
        overriddenValue: '2'
        value: '9'
...

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

Panel de resumen del ajuste automático.

Precios

El ajuste automático de Managed Service para Apache Spark se ofrece durante la vista previa privada sin cargo adicional. Se aplican los precios estándar de Managed Service para Apache Spark.