En este documento se proporciona información sobre el ajuste automático de cargas de trabajo de Spark. Optimizar una carga de trabajo de Spark para mejorar el rendimiento y la resiliencia puede ser complicado debido al número de opciones de configuración de Spark y a la dificultad de evaluar cómo afectan esas opciones a una carga de trabajo. Google Cloud El ajuste automático de Spark sin servidor ofrece una alternativa a la configuración manual de la carga de trabajo, ya que aplica automáticamente los ajustes de configuración de Spark a una carga de trabajo de Spark recurrente en función de las prácticas recomendadas de optimización de Spark y de un análisis de las ejecuciones de la carga de trabajo.
Regístrate para usar la Google Cloud optimización automática de Serverless para Apache Spark
Para registrarte y acceder a la versión preliminar de la función de ajuste automático de Serverless para Apache Spark que se describe en esta página, rellena 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 incluyan en él tendrán acceso a las funciones de vista previa.
Ventajas
Google Cloud La optimización automática de Serverless para Apache Spark puede ofrecer las siguientes ventajas:
- Rendimiento mejorado: optimización para aumentar el rendimiento
- Optimización más rápida: configuración automática para evitar las pruebas de configuración manual, que requieren mucho tiempo
- Mayor resiliencia: asignación automática de memoria para evitar errores relacionados con la memoria
Limitaciones
Google Cloud El ajuste automático de Apache Spark sin servidor tiene las siguientes limitaciones:
- El ajuste automático se calcula y se aplica a la segunda ejecución y a las posteriores de una carga de trabajo. La primera ejecución de una carga de trabajo periódica no se optimiza automáticamente porque Google Cloud la optimización automática de Serverless para Apache Spark usa el historial de la carga de trabajo para optimizarla.
- 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 solo a las cohortes de cargas de trabajo enviadas recientemente.
Cohortes de ajuste automático
El ajuste automático se aplica a las ejecuciones periódicas de una carga de trabajo por lotes, denominadas cohortes.
El nombre de la cohorte que especifiques al enviar una carga de trabajo la identificará como una de las ejecuciones sucesivas de la carga de trabajo periódica.
Te recomendamos que uses nombres de cohorte que describan el tipo de carga de trabajo o que ayuden a identificar las ejecuciones de una carga de trabajo como parte de una carga de trabajo periódica. Por ejemplo, especifica daily_sales_aggregation
como nombre de cohorte de una carga de trabajo programada que ejecute una tarea de agregación de ventas diaria.
Situaciones de ajuste automático
Para aplicar el ajuste automático de Google Cloud Serverless para Apache Spark a tu carga de trabajo, selecciona uno o varios de los siguientes escenarios de ajuste automático:
MEMORY
: ajusta automáticamente la asignación de memoria de Spark para predecir y evitar posibles errores de falta de memoria en las cargas de trabajo. Se ha corregido un error de falta de memoria que se había producido en una carga de trabajo.SCALING
: ajusta automáticamente la configuración del autoescalado de Spark.BROADCAST_HASH_JOIN
: ajusta automáticamente la configuración de Spark para optimizar el rendimiento de la combinación de difusión de SQL.
Precios
Google Cloud El ajuste automático de la versión sin servidor de Apache Spark se ofrece durante la versión preliminar sin coste adicional. Se aplican los precios estándar de Google Cloud Serverless para Apache Spark.
Disponibilidad regional
Puedes usar la Google Cloud optimización automática de Serverless para Apache Spark con lotes que se envían en las regiones de Compute Engine disponibles.
Usar el ajuste automático de Google Cloud Serverless para Apache Spark
Puedes habilitar la optimización automática de Google Cloud Serverless para Apache Spark en una carga de trabajo mediante la Google Cloud consola, la CLI de Google Cloud o la API de Dataproc.
Consola
Para habilitar la optimización automática de Google Cloud Serverless para Apache Spark en cada envío de una carga de trabajo por lotes periódica, sigue estos pasos:
En la Google Cloud consola, ve a la página Lotes de Dataproc.
Para crear una carga de trabajo en lote, haz clic en Crear.
En la sección Contenedor, rellene los siguientes campos de su carga de trabajo de Spark:
Cohorte: 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_aggregation
como nombre de cohorte de una carga de trabajo programada que ejecute una tarea de agregación de ventas diaria.Situaciones de ajuste automático: una o varias situaciones de ajuste automático que se usarán para optimizar la carga de trabajo. Por ejemplo,
BROADCAST_HASH_JOIN
,MEMORY
ySCALING
. Puedes cambiar la selección de escenario con cada envío de cohorte por lotes.
Rellena otras secciones de la página Crear lote según sea necesario y, a continuación, haz clic en Enviar. Para obtener más información sobre estos campos, consulta Enviar una carga de trabajo por lotes.
gcloud
Para habilitar el ajuste automático de Google Cloud Serverless para Apache Spark en cada envío de una carga de trabajo por lotes periódica, ejecuta el siguiente comando de la CLI de gcloud gcloud dataproc batches submit
en un terminal local o en Cloud Shell.
gcloud dataproc batches submit COMMAND \ --region=REGION \ --cohort=COHORT \ --autotuning-scenarios=SCENARIOS \ other arguments ...
Haz los cambios siguientes:
- 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.
COHORT: 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_aggregation
como nombre de cohorte de una carga de trabajo programada que ejecute una tarea de agregación de ventas diaria.SCENARIOS: uno o varios escenarios de ajuste automático separados por comas que se usarán para optimizar la carga de trabajo. Por ejemplo,
--autotuning-scenarios=MEMORY,SCALING
. Puede cambiar la lista de escenarios con cada envío de cohorte por lotes.
API
Para habilitar el ajuste automático de Google Cloud Serverless para Apache Spark en cada envío de una carga de trabajo por lotes periódica, envía una solicitud batches.create que incluya los siguientes campos:
RuntimeConfig.cohort
: 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 enviadas con este nombre de cohorte. Por ejemplo, especificadaily_sales_aggregation
como nombre de cohorte de una carga de trabajo programada que ejecute una tarea de agregación de ventas diaria.AutotuningConfig.scenarios
: uno o varios escenarios de ajuste automático que se usarán para optimizar la carga de trabajo. Por ejemplo,BROADCAST_HASH_JOIN
,MEMORY
ySCALING
. Puede cambiar la lista de escenarios 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 este ejemplo, sigue las Javainstrucciones de configuración de la guía de inicio rápido de Serverless para Apache Spark con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Java Serverless para Apache Spark.
Para autenticarte en Serverless para Apache Spark, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.
Para habilitar el ajuste automático de Google Cloud Serverless para Apache Spark en cada envío de una carga de trabajo por lotes periódica, 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 una de una serie de cargas de trabajo recurrentes. El ajuste automático se aplica a la segunda y las siguientes cargas de trabajo enviadas con este nombre de cohorte. Por ejemplo, puede especificardaily_sales_aggregation
como nombre de cohorte de una carga de trabajo programada que ejecute una tarea de agregación de ventas diaria.Batch.RuntimeConfig.AutotuningConfig.scenarios
: uno o varios casos de ajuste automático que se usarán para optimizar la carga de trabajo, comoBROADCAST_HASH_JOIN
,MEMORY
oSCALING
. Puede cambiar la lista de escenarios con cada envío de cohorte por lotes. Para ver la lista completa de escenarios, consulta el Javadoc de AutotuningConfig.Scenario.
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 usar la versión 4.43.0
o una posterior de la biblioteca de cliente google-cloud-dataproc
. Puedes usar una de las siguientes configuraciones para añadir 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 Pythoninstrucciones de configuración de la guía de inicio rápido de Serverless para Apache Spark con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Python Serverless para Apache Spark.
Para autenticarte en Serverless para Apache Spark, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.
Para habilitar el ajuste automático de Google Cloud Serverless para Apache Spark en cada envío de una carga de trabajo por lotes periódica, llama a BatchControllerClient.create_batch con un Batch que incluya los siguientes campos:
batch.runtime_config.cohort
: 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 enviadas con este nombre de cohorte. Por ejemplo, puede especificardaily_sales_aggregation
como nombre de cohorte de una carga de trabajo programada que ejecute una tarea de agregación de ventas diaria.batch.runtime_config.autotuning_config.scenarios
: uno o varios escenarios de ajuste automático que se usarán para optimizar la carga de trabajo, comoBROADCAST_HASH_JOIN
,MEMORY
oSCALING
. Puedes cambiar la lista de escenarios con cada envío de cohorte por lotes. Para ver la lista completa de escenarios, consulta la referencia de Scenario.
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 usar la versión 5.10.1
o una posterior de la biblioteca de cliente google-cloud-dataproc
. Para añadirlo a tu proyecto, puedes usar el siguiente requisito:
google-cloud-dataproc>=5.10.1
Airflow
Para habilitar el ajuste automático de Google Cloud Serverless para Apache Spark en cada envío de una carga de trabajo por lotes periódica, llama a BatchControllerClient.create_batch con un Batch que incluya los siguientes campos:
batch.runtime_config.cohort
: 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 enviadas con este nombre de cohorte. Por ejemplo, puede especificardaily_sales_aggregation
como nombre de cohorte de una carga de trabajo programada que ejecute una tarea de agregación de ventas diaria.batch.runtime_config.autotuning_config.scenarios
: uno o varios escenarios de ajuste automático que se usarán para optimizar la carga de trabajo (por ejemplo,BROADCAST_HASH_JOIN
,MEMORY
ySCALING
). Puedes cambiar la lista de escenarios con cada envío de cohorte por lotes. Para ver la lista completa de escenarios, consulta la referencia de Scenario.
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 usar la versión 5.10.1
o una posterior de la biblioteca de cliente google-cloud-dataproc
. Puedes usar el siguiente requisito de entorno de Airflow:
google-cloud-dataproc>=5.10.1
Para actualizar el paquete en Cloud Composer, consulta Instalar dependencias de Python en Cloud Composer .
Ver los cambios de ajuste automático
Para ver los cambios de ajuste automático de Google Cloud Serverless para 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.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 últimos cambios de ajuste automático que se han aplicado a una carga de trabajo en curso, completada o fallida en la página Detalles del lote de la consola, en la pestaña Investigar. Google Cloud