En este documento, se describen las propiedades de Spark y cómo configurarlas. Managed Service para Apache Spark usa las propiedades de Spark para determinar los recursos de procesamiento, memoria y disco que se asignarán a tu carga de trabajo por lotes. Estos parámetros de configuración de propiedades pueden afectar el consumo y el costo de la cuota de la carga de trabajo. Para obtener más información, consulta Cuotas de Managed Service para Apache Spark y Precios de Managed Service para Apache Spark.
Cómo establecer las propiedades de la carga de trabajo por lotes de Spark
Puedes especificar las propiedades de Spark cuando envías una carga de trabajo por lotes de Managed Service para Apache Spark con la Google Cloud consola, gcloud CLI o la API de Dataproc.
Console
En la Google Cloud consola de, ve a la página Crear lote de Managed Service para Apache Spark.
En la sección Propiedades, haz clic en Agregar propiedad.
Ingresa el
Key(nombre) y elValuede una propiedad de Spark admitida.
gcloud
A continuación, se muestra un ejemplo de envío por lotes de gcloud CLI. Las propiedades múltiples se separan con comas.
gcloud dataproc batches submit spark \ --properties=spark.checkpoint.compress=true,spark.driver.cores=8 \ --region=REGION \ other args ...
API
Establece RuntimeConfig.properties con las propiedades de Spark admitidas como parte de una batches.create.
Propiedades de Spark admitidas
Managed Service para Apache Spark admite la mayoría de las propiedades de Spark, pero no admite las propiedades de Spark relacionadas con YARN y con la reorganización, como spark.master=yarn y spark.shuffle.service.enabled. Si el código de la aplicación de Spark establece una propiedad de YARN o de reorganización, la aplicación fallará.
Propiedades del entorno de ejecución
Managed Service para Apache Spark admite las siguientes propiedades personalizadas de Spark para configurar el entorno de ejecución:
| Propiedad | Descripción |
|---|---|
spark.dataproc.driverEnv.ENVIRONMENT_VARIABLE_NAME |
Agrega ENVIRONMENT_VARIABLE_NAME al proceso del controlador. Puedes especificar varias variables de entorno. |
spark.executorEnv.ENVIRONMENT_VARIABLE_NAME |
Agrega ENVIRONMENT_VARIABLE_NAME al proceso del ejecutor. Puedes especificar varias variables de entorno. |
Propiedad de nivel
| Propiedad | Descripción | Predeterminado |
|---|---|---|
dataproc.tier |
Es el nivel en el que se ejecuta una carga de trabajo por lotes, ya sea standard o premium (consulta los niveles de Managed Service para Apache Spark). Las sesiones interactivas
siempre se ejecutan en el dataproc.tier premium.
|
standard |
Propiedades del motor y del entorno de ejecución
| Propiedad | Descripción | Predeterminado |
|---|---|---|
spark.dataproc.engine |
Es el motor que se usará para ejecutar la carga de trabajo por lotes o la sesión interactiva: lightningEngine
(consulta Lightning Engine) o el motor default.
|
|
spark.dataproc.lightningEngine.runtime |
Es el entorno de ejecución que se usará cuando se selecciona Lightning Engine para una carga de trabajo por lotes o una sesión interactiva: default o native (ejecución de consultas nativas).
|
default |
Propiedades de asignación de recursos
Managed Service para Apache Spark admite las siguientes propiedades de Spark para configurar la asignación de recursos:
| Propiedad | Descripción | Predeterminado | Ejemplos |
|---|---|---|---|
spark.driver.cores |
Es la cantidad de núcleos (CPU virtuales) que se asignarán al controlador de Spark.
Valores válidos: 4, 8 y 16. |
4 |
|
spark.driver.memory |
Es la cantidad de memoria que se asignará al proceso del controlador de Spark, especificada en formato de cadena de memoria de JVM con un sufijo de unidad de tamaño ("m", "g" o "t"). La memoria total del controlador por núcleo del controlador, incluida la sobrecarga de memoria del controlador, que debe estar entre |
512m, 2g |
|
spark.driver.memoryOverhead |
Es la cantidad de memoria JVM adicional que se asignará al proceso del controlador de Spark especificada en formato de cadena de memoria de JVM con un sufijo de unidad de tamaño ("m", "g" o "t"). Esta es una memoria que no es del montón asociada con sobrecargas de JVM,
cadenas internas y otras sobrecargas nativas, y que incluye
la memoria que usan otros procesos del controlador, como los procesos del controlador de PySpark
y la memoria que usan otros procesos que no son del controlador que se ejecutan en el contenedor.
El tamaño máximo de memoria del contenedor en el que se ejecuta el controlador se
determina mediante la suma de La memoria total del controlador por núcleo del controlador, incluida la sobrecarga de memoria del controlador, debe estar entre |
10% de la memoria del controlador, excepto para las cargas de trabajo por lotes de PySpark, que tienen un valor predeterminado del 40% de la memoria del controlador | 512m, 2g |
spark.dataproc.driver.compute.tier |
Es el nivel de procesamiento que se usará en el controlador. El nivel de procesamiento Premium ofrece un mayor rendimiento por núcleo, pero se factura a una tarifa más alta. | standard | standard, premium |
spark.dataproc.driver.disk.size |
Es la cantidad de espacio en disco asignado al controlador,
especificada con un sufijo de unidad de tamaño ("k", "m", "g" o "t").
Debe ser como mínimo 250GiB.
Si se selecciona el nivel de disco Premium en el controlador, los tamaños válidos son
375g, 750g, 1500g, 3000g, 6000g o 9000g. Si se seleccionan el nivel de disco Premium
y 16 núcleos del controlador,
el tamaño mínimo del disco es de 750g. |
100GiB por núcleo |
1024g, 2t |
spark.dataproc.driver.disk.tier |
Es el nivel de disco que se usará para el almacenamiento local y de reorganización en el controlador.
El nivel de disco Premium ofrece un mejor rendimiento en IOPS y capacidad de procesamiento, pero
se factura a una tarifa más alta. Si se selecciona el nivel de disco Premium en
el controlador, también se debe seleccionar el nivel de procesamiento Premium con
spark.dataproc.driver.compute.tier=premium,
y la cantidad de espacio en disco se debe especificar con
spark.dataproc.driver.disk.size.
Si se selecciona el nivel de disco Premium, el controlador asigna 50 GiB adicionales de espacio en disco para el almacenamiento del sistema, que no pueden usar las aplicaciones del usuario. |
standard | standard, premium |
spark.executor.cores |
Es la cantidad de núcleos (CPU virtuales) que se asignarán a cada ejecutor de Spark.
Valores válidos: 4, 8 y 16. |
4 |
|
spark.executor.memory |
Es la cantidad de memoria que se asignará a cada proceso del ejecutor de Spark, especificada en formato de cadena de memoria de JVM con un sufijo de unidad de tamaño ("m", "g" o "t"). La memoria total del ejecutor por núcleo del ejecutor, incluida la sobrecarga de memoria del ejecutor, debe estar entre |
512m, 2g |
|
spark.executor.memoryOverhead |
Es la cantidad de memoria JVM adicional que se asignará al proceso del ejecutor de Spark especificada en formato de cadena de memoria de JVM con un sufijo de unidad de tamaño ("m", "g" o "t"). Esta es una memoria que no es del montón que se usa para sobrecargas de JVM, cadenas internas,
y otras sobrecargas nativas, y que incluye la memoria del ejecutor de PySpark y
la memoria que usan otros procesos que no son del ejecutor que se ejecutan en el contenedor.
El tamaño máximo de memoria del contenedor en el que se ejecuta el ejecutor se
determina mediante la suma de La memoria total del ejecutor por núcleo del ejecutor, incluida la sobrecarga de memoria del ejecutor, debe estar entre |
10% de la memoria del ejecutor, excepto para las cargas de trabajo por lotes de PySpark, que tienen un valor predeterminado del 40% de la memoria del ejecutor | 512m, 2g |
spark.dataproc.executor.compute.tier |
Es el nivel de procesamiento que se usará en los ejecutores. El nivel de procesamiento Premium ofrece un mayor rendimiento por núcleo, pero se factura a una tarifa más alta. | standard | standard, premium |
spark.dataproc.executor.disk.size |
Es la cantidad de espacio en disco asignado a cada ejecutor,
especificada con un sufijo de unidad de tamaño ("k", "m", "g" o "t").
El espacio en disco del ejecutor se puede usar para reorganizar datos y preparar
dependencias. Debe ser como mínimo 250GiB.
Si se selecciona el nivel de disco Premium en el ejecutor, los tamaños válidos son
375g, 750g, 1500g, 3000g, 6000g o 9000g. Si se seleccionan el nivel de disco Premium
y 16 núcleos del ejecutor,
el tamaño mínimo del disco es de 750g. |
100GiB por núcleo |
1024g, 2t |
spark.dataproc.executor.disk.tier |
Es el nivel de disco que se usará para el almacenamiento local y de reorganización en los ejecutores.
El nivel de disco Premium ofrece un mejor rendimiento en IOPS y capacidad de procesamiento, pero
se factura a una tarifa más alta. Si se selecciona el nivel de disco Premium en el
ejecutor, también se debe seleccionar el nivel de procesamiento Premium con
spark.dataproc.executor.compute.tier=premium,
y la cantidad de espacio en disco se debe especificar con
spark.dataproc.executor.disk.size.
Si se selecciona el nivel de disco Premium, a cada ejecutor se le asignan 50 GiB adicionales de espacio en disco para el almacenamiento del sistema, que no pueden usar las aplicaciones del usuario. |
standard | standard, premium |
spark.executor.instances |
Es la cantidad inicial de ejecutores que se asignarán. Después de que se inicia una carga de trabajo por lotes, el ajuste de escala automático puede cambiar la cantidad de ejecutores activos. Debe ser
como mínimo 2 y como máximo 2000. |
Propiedades de aprovisionamiento
Managed Service para Apache Spark admite las siguientes propiedades de Spark para configurar el aprovisionamiento de cargas de trabajo.
| Propiedad | Descripción | Predeterminado |
|---|---|---|
spark.dataproc.[driver|executor].provisioning.mode |
Especifica el modelo de aprovisionamiento. Usa queue para el inicio flexible del programador dinámico de cargas de trabajo (DWS) (el valor predeterminado para las GPU en la versión `3.0`+ del entorno de ejecución) o default para inhabilitar DWS y usar el aprovisionamiento a pedido. |
queue (para GPU en 3.0+) |
spark.dataproc.[driver|executor].provisioning.allocationTimeout |
Es la duración máxima que el grupo de nodos debe esperar en la cola para obtener capacidad.
El valor predeterminado es 1 hora (3600s) y el
el máximo es de 2 horas (7200s).
Nota: Los valores deben terminar con un sufijo "s". |
3600s |
Propiedades de ajuste de escala automático
Consulta las propiedades de asignación dinámica de Spark para obtener una lista de las propiedades de Spark que puedes usar para configurar el ajuste de escala automático de Managed Service para Apache Spark.
Propiedades de registro
| Propiedad | Descripción | Predeterminado | Ejemplos |
|---|---|---|---|
spark.log.level |
Cuando se establece, anula cualquier configuración de registro definida por el usuario con el efecto de
una llamada a SparkContext.setLogLevel() en el inicio de Spark. Los niveles de registro válidos incluyen: ALL, DEBUG, ERROR, FATAL, INFO, OFF, TRACE y WARN. |
INFO, DEBUG |
|
spark.executor.syncLogLevel.enabled |
Cuando se establece en true, el nivel de registro aplicado a través del método SparkContext.setLogLevel() se propaga a todos los ejecutores. |
false |
true, false |
spark.log.level.PackageName |
Cuando se establece, anula cualquier configuración de registro definida por el usuario
con el efecto de una llamada a SparkContext.setLogLevel(PackageName, level)
en el inicio de Spark. Los niveles de registro válidos incluyen: ALL, DEBUG,
ERROR, FATAL, INFO, OFF,
TRACE, y WARN. |
spark.log.level.org.apache.spark=error |
Propiedades de programación
| Propiedad | Descripción | Predeterminado | Ejemplos |
|---|---|---|---|
spark.scheduler.excludeShuffleSkewExecutors |
Excluye los ejecutores sesgados del mapa de reorganización cuando se programa, lo que puede reducir los tiempos de espera prolongados de recuperación de reorganización causados por el sesgo de escritura de reorganización. | false |
true |
spark.scheduler.shuffleSkew.minFinishedTasks |
Es la cantidad mínima de tareas de mapa de reorganización finalizadas en un ejecutor para tratar como sesgo. | 10 |
100 |
spark.scheduler.shuffleSkew.maxExecutorsNumber |
Es la cantidad máxima de ejecutores que se tratarán como sesgo. Los ejecutores sesgados se excluyen de la ronda de programación actual. | 5 | 10 |
spark.scheduler.shuffleSkew.maxExecutorsRatio |
Es la proporción máxima de ejecutores totales que se tratarán como sesgo. Los ejecutores sesgados se excluyen de la programación. | 0.05 | 0.1 |
spark.scheduler.shuffleSkew.ratio |
Es un múltiplo de las tareas de mapa de reorganización finalizadas promedio en un ejecutor para tratar como sesgo. | 1.5 | 2.0 |
Otras propiedades
| Propiedad | Descripción |
|---|---|
dataproc.diagnostics.enabled |
**Solo se admite en los entornos de ejecución `2.3` y versiones anteriores** Habilita esta propiedad para ejecutar diagnósticos en caso de falla o cancelación de una carga de trabajo por lotes. Si los diagnósticos están habilitados, tu carga de trabajo por lotes seguirá usando recursos de procesamiento después de que se complete la carga de trabajo hasta que finalicen los diagnósticos. En el campo de la API de Batch.RuntimeInfo.diagnosticOutputUri, se muestra un URI que apunta a la ubicación del archivo tar de diagnóstico. |
dataproc.gcsConnector.version |
**Solo se admite en los entornos de ejecución 2.3 y versiones anteriores** Usa esta propiedad para actualizar a una versión del conector de Cloud Storage que sea diferente de la versión instalada con la versión del entorno de ejecución de tu carga de trabajo por lotes. |
dataproc.sparkBqConnector.version |
**Solo se admite en los entornos de ejecución `2.3` y versiones anteriores** Usa esta propiedad para actualizar a una versión del conector de Spark a BigQuery que sea diferente de la versión instalada con la versión del entorno de ejecución de tu carga de trabajo por lotes (consulta Usa el conector de BigQuery con Managed Service para Apache Spark). |
dataproc.profiling.enabled |
**Solo se admite en los entornos de ejecución `2.3` y versiones anteriores** Establece esta propiedad en true para habilitar la generación de perfiles para la
carga de trabajo de Managed Service para Apache Spark. |
dataproc.profiling.name |
**Solo se admite en los entornos de ejecución `2.3` y versiones anteriores** Usa esta propiedad para establecer el nombre que se usará para crear un perfil en el generador de perfiles servicio. |
spark.jars |
Usa esta propiedad para establecer la lista de archivos jar separada por comas que se incluirán en las rutas de clase del controlador y del ejecutor. |
spark.archives |
Usa esta propiedad para establecer la lista de archivos separados por comas que se extraerán en el directorio de trabajo de cada ejecutor. Se admiten los formatos .jar, .tar.gz, .tgz y .zip. Para las sesiones interactivas sin servidores, agrega esta propiedad cuando crees una sesión o plantilla interactiva. |
dataproc.artifacts.remove |
Usa esta propiedad para quitar los artefactos predeterminados instalados en
los entornos de ejecución de Managed Service para Apache Spark.
Los artefactos admitidos son conscrypt, delta-lake, iceberg, rapids y spark-bigquery-connector. |