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 el rendimiento y la resiliencia puede ser un desafío debido a la cantidad de opciones de configuración de Spark y la dificultad de evaluar cómo esas opciones afectan una carga de trabajo. El ajuste automático de Serverless for 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 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 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 enumeran en él tienen acceso a las funciones de la 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 de Spark y por lotes de Serverless for 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 siguientes 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 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 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 Serverless for Apache Spark
Puedes habilitar el ajuste automático de Serverless for Apache Spark en una carga de trabajo por lotes mediante la Google Cloud consola, 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 Google Cloud consola, 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 uno de una serie de cargas de trabajo recurrentes. El ajuste automático se aplica a la segunda carga de trabajo y a las siguientes 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 diarias.
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 for 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:
- COMMAND: el tipo de carga de trabajo de Spark, como
Spark,PySpark,Spark-Sql, oSpark-R. - REGION: la región en la que se ejecutará tu carga de trabajo por lotes.
- 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 siguientes 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 diarias. --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 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 siguientes 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 diarias.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 de Java en la guía de inicio rápido de Serverless for Apache Spark con bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de Java de Serverless for Apache Spark.Java
Para autenticarte en Serverless for Apache Spark, 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 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: 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 siguientes 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 diarias.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
4.43.0 o posterior de la biblioteca cliente google-cloud-dataproc. 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 de Python en la guía de inicio rápido de Serverless for Apache Spark con bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de PythonServerless for Apache Spark.
Para autenticarte en Serverless for Apache Spark, 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 Serverless for 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 siguientes 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 diarias.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 5.10.1
o posterior de la biblioteca cliente google-cloud-dataproc. 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 con ajuste automático 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 siguientes 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 diarias.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 5.10.1
o posterior de la biblioteca cliente google-cloud-dataproc. 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 .
Visualiza los cambios del ajuste automático
Para ver los cambios del ajuste automático de Serverless for 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 fallida en la página Detalles del lote de la Google Cloud consola, en la pestaña Resumen.

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