En este documento, se proporciona información sobre el ajuste automático de las cargas de trabajo por lotes de Serverless for Apache Spark. Optimizar una carga de trabajo de Spark para mejorar el rendimiento y la capacidad de recuperación puede ser un desafío debido a la cantidad de opciones de configuración de Spark y a la dificultad para evaluar cómo esas opciones afectan una carga de trabajo. El ajuste automático de Serverless para Apache Spark proporciona una alternativa a la configuración manual de la carga de trabajo, ya que aplica automáticamente la configuración de Spark a una carga de trabajo recurrente de Spark según las prácticas recomendadas de optimización de Spark y un análisis de las ejecuciones de la carga de trabajo (denominadas "cohortes").
Regístrate para el ajuste automático de Serverless for Apache Spark
Para registrarte y obtener acceso a la versión preliminar del ajuste automático de Serverless for 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 Dataproc. Una vez que se aprueba el formulario, los proyectos que se indican en él tienen acceso a las funciones en versión preliminar.
Beneficios
El ajuste automático de Serverless for Apache Spark puede proporcionar los siguientes beneficios:
- Optimización automática: Ajusta automáticamente las configuraciones ineficientes de Spark y por lotes de Serverless for Apache Spark, lo que puede acelerar los tiempos de ejecución de los trabajos.
- Aprendizaje histórico: Aprende de las ejecuciones recurrentes para aplicar recomendaciones personalizadas según 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 cargas de trabajo por lotes de la siguiente manera:
El ajuste automático se calcula y se aplica a la segunda y las siguientes cohortes de una carga de trabajo. El ajuste automático no se aplica a la primera ejecución de una carga de trabajo recurrente, ya que el ajuste automático de Serverless for 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 analizando las estadísticas de la cohorte. Para permitir que el sistema recopile datos suficientes, te recomendamos que mantengas habilitada la optimización automática durante al menos cinco ejecuciones.
Nombres de cohortes: Se recomienda usar nombres de cohortes que ayuden a identificar el tipo de carga de trabajo recurrente. Por ejemplo, puedes usar daily_sales_aggregation como nombre de la cohorte para una carga de trabajo programada que ejecuta una tarea de agregación de ventas diaria.
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: Es la configuración del ajuste de escala automático de Spark.
- Optimización de la unión: Parámetros de configuración de Spark para optimizar el rendimiento de la unión de transmisión de SQL.
Usa el ajuste automático de Serverless for Apache Spark
Puedes habilitar el ajuste automático de Serverless for Apache Spark en una carga de trabajo por lotes con la consola de Google Cloud , Google Cloud CLI, la API de Dataproc o las bibliotecas cliente de Cloud.
Console
Para habilitar el ajuste automático de Serverless for Apache Spark en cada envío de una carga de trabajo por lotes recurrente, sigue estos pasos:
En la consola de Google Cloud , ve a la página Lotes de Dataproc.
Para crear una carga de trabajo por lotes, haz clic en Crear.
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 una de una serie de cargas de trabajo recurrentes. El ajuste automático se aplica a la segunda y las siguientes cargas de trabajo que se envían con este nombre de cohorte. Por ejemplo, especifica
daily_sales_aggregationcomo el nombre de la cohorte para una carga de trabajo por lotes programada que ejecuta una tarea de agregación de ventas diaria.
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 Serverless para Apache Spark en cada envío de una carga de trabajo recurrente por lotes, ejecuta el siguiente comando de 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=auto \ other arguments ...
Reemplaza lo siguiente:
- COMMAND: Es el tipo de carga de trabajo de Spark, como
Spark,PySpark,Spark-SqloSpark-R. - REGION: La región en la que se ejecutará tu carga de trabajo por lotes.
- COHORT: Es el nombre de la cohorte, que identifica el lote como una de una serie de cargas de trabajo recurrentes.
El ajuste automático se aplica a la segunda y las siguientes cargas de trabajo que se envían con este nombre de cohorte. Por ejemplo, especifica
daily_sales_aggregationcomo el nombre de la cohorte para una carga de trabajo por lotes programada que ejecuta una tarea de agregación de ventas diaria. --autotuning-scenarios=auto: Habilita el ajuste automático.
API
Para habilitar el ajuste automático de Serverless for Apache Spark en cada envío de una carga de trabajo por lotes recurrente, envía una solicitud de batches.create que incluya los siguientes campos:
RuntimeConfig.cohort: Es el nombre de la cohorte, que identifica el lote como una 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, especificadaily_sales_aggregationcomo el nombre de la cohorte para una carga de trabajo por lotes programada que ejecuta una tarea de agregación de ventas diaria.AutotuningConfig.scenarios: EspecificaAUTOpara 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 para Java que encontrarás en la guía de inicio rápido de Serverless para Apache Spark sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de Serverless para Apache Spark Java.
Para autenticarte en Serverless 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 Serverless for 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: Es el nombre de la cohorte, que identifica el lote como una 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 especificardaily_sales_aggregationcomo el nombre de la cohorte para una carga de trabajo por lotes programada que ejecuta una tarea de agregación de ventas diaria.Batch.RuntimeConfig.AutotuningConfig.scenarios: EspecificaAUTOpara 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 google-cloud-dataproc de la biblioteca cliente 4.43.0 o una 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 para Python que encontrarás en la guía de inicio rápido de Serverless para Apache Spark sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de Serverless para Apache Spark Python.
Para autenticarte en Serverless 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 Serverless for Apache Spark en cada envío de una carga de trabajo por lotes recurrente, llama a BatchControllerClient.create_batch con un Batch que incluya los siguientes campos:
batch.runtime_config.cohort: Es el nombre de la cohorte, que identifica el lote como una 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 especificardaily_sales_aggregationcomo el nombre de la cohorte para una carga de trabajo por lotes programada que ejecuta una tarea de agregación de ventas diaria.batch.runtime_config.autotuning_config.scenarios: EspecificaAUTOpara 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 google-cloud-dataproc de la biblioteca cliente 5.10.1 o una versión posterior. Para agregarlo a tu proyecto, puedes usar el siguiente requisito:
google-cloud-dataproc>=5.10.1
Airflow
En lugar de enviar manualmente cada cohorte de lotes ajustados automáticamente, 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 Batch que incluya los siguientes campos:
batch.runtime_config.cohort: Es el nombre de la cohorte, que identifica el lote como una 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 especificardaily_sales_aggregationcomo el nombre de la cohorte para una carga de trabajo por lotes programada que ejecuta una tarea de agregación de ventas diaria.batch.runtime_config.autotuning_config.scenarios: EspecificaAUTOpara 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 google-cloud-dataproc de la biblioteca cliente 5.10.1 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 Cloud Composer, consulta Instala dependencias de Python para Cloud Composer .
Cómo ver los cambios del ajuste automático
Para ver los cambios de ajuste automático de Serverless for Apache Spark en una carga de trabajo por lotes, ejecuta el comando gcloud dataproc batches describe.
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 consola de Google Cloud , en la pestaña Resumen.

Precios
El ajuste automático de Serverless para Apache Spark se ofrece durante la versión preliminar privada sin cargo adicional. Se aplican los precios estándar de Serverless for Apache Spark.