Propiedades de Spark

En este documento, se describen las propiedades de Spark y cómo configurarlas. Serverless 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 costo y el consumo de cuota de la carga de trabajo. Para obtener más información, consulta Cuotas de Serverless para Apache Spark y Precios de Serverless 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 Spark de Serverless para Apache Spark con la Google Cloud consola, la CLI de gcloud o la API de Dataproc.

Console

  1. En la Google Cloud consola, ve a la página **Dataproc create batch**.

    Ir a Dataproc Create batch

  2. En la sección Properties, haz clic en Add Property.

  3. Ingresa el Key (nombre) y el Value de una propiedad de Spark admitida.

gcloud

Ejemplo de envío por lotes de la CLI de gcloud:

gcloud dataproc batches submit spark
    --properties=spark.checkpoint.compress=true \
    --region=region \
    other args ...

API

Establece RuntimeConfig.properties con las propiedades de Spark admitidas como parte de una batches.create.

Propiedades de Spark admitidas

Serverless para Apache Spark admite la mayoría de las propiedades de Spark, pero no admite las propiedades de Spark relacionadas con YARN y la mezcla, 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 mezcla, la aplicación fallará.

Propiedades del entorno de ejecución

Serverless 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 Predeterminada
dataproc.tier Es el nivel en el que se ejecuta una carga de trabajo por lotes, ya sea standard o premium (consulta Google Cloud Niveles de Serverless para Apache Spark). Las sesiones interactivas siempre se ejecutan en el nivel dataproc.tier premium.
  • Si estableces esta propiedad de nivel de lote en standard, se establecen las propiedades de nivel de recursos y de tiempo de ejecución de Dataproc en el nivel standard (consulta las propiedades de asignación de recursos).
  • Si estableces esta propiedad de nivel de lote en premium, se establece spark.dataproc.engine en lightningEngine y se establecen spark.dataproc.driver.compute.tier y spark.dataproc.executor.compute.tier en premium. Puedes anular la mayoría de los parámetros de configuración de nivel de lote establecidos automáticamente, pero no se pueden anular los parámetros de configuración de nivel de procesamiento establecidos automáticamente para los lotes que usan tiempos de ejecución anteriores a 3.0 (consulta las propiedades de asignación de recursos).
standard

Propiedades de motor y tiempo de ejecución

Propiedad Descripción Predeterminada
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.
  • Cargas de trabajo por lotes: Si seleccionas la propiedad dataproc.tier estándar para tu carga de trabajo, esta propiedad se establece automáticamente en default y no se puede anular. Si seleccionas premium dataproc.tier para tu carga de trabajo, esta propiedad se establece automáticamente en lightningEngine, pero puedes cambiar el parámetro de configuración a default si es necesario.
  • Sesiones interactivas: Este parámetro de configuración se establece automáticamente en default, pero puedes cambiarlo a lightningEngine. Ten en cuenta que la sesión interactiva siempre se ejecuta en el nivel premium.
  • Lotes (nivel estándar): default
  • Lotes (nivel premium): lightningEngine
  • Sesiones: default
spark.dataproc.lightningEngine.runtime Es el tiempo 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

Serverless para Apache Spark admite las siguientes propiedades de Spark para configurar la asignación de recursos:

Propiedad Descripción Predeterminada 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, 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 1024m y 7424m para el nivel de procesamiento Estándar (24576m para el nivel de procesamiento Premium). Por ejemplo, si spark.driver.cores = 4, entonces 4096m <= spark.driver.memory + spark.driver.memoryOverhead <= 29696m.

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 la memoria fuera del montón asociada con las sobrecargas de JVM, cadenas internas y otras sobrecargas nativas, y también 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 está determinado por la suma de spark.driver.memoryOverhead más spark.driver.memory.

La memoria total del controlador por núcleo del controlador, incluida la sobrecarga de memoria del controlador, debe estar entre 1024m y 7424m para el nivel de procesamiento Estándar (24576m para el nivel de procesamiento Premium). Por ejemplo, si spark.driver.cores = 4, entonces 4096m <= spark.driver.memory + spark.driver.memoryOverhead <= 29696m.

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 el 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 mezcla 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 el disco se debe especificar con spark.dataproc.executor.disk.size.

Si se selecciona el nivel de disco Premium, el controlador asigna 50 GiB adicionales de espacio en el 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, 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 1024m y 7424m para el nivel de procesamiento Estándar (24576m para el nivel de procesamiento Premium). Por ejemplo, si spark.executor.cores = 4, entonces 4096m <= spark.executor.memory + spark.executor.memoryOverhead <= 29696m.

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 la memoria fuera del montón que se usa para las sobrecargas de JVM, las cadenas internas, y otras sobrecargas nativas, y también 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 está determinado por la suma de spark.executor.memoryOverhead más spark.executor.memory.

La memoria total del ejecutor por núcleo del ejecutor, incluida la sobrecarga de memoria del ejecutor, debe estar entre 1024m y 7424m para el nivel de procesamiento Estándar (24576m para el nivel de procesamiento Premium). Por ejemplo, si spark.executor.cores = 4, entonces 4096m <= spark.executor.memory + spark.executor.memoryOverhead <= 29696m.

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 el disco asignado a cada ejecutor, especificada con un sufijo de unidad de tamaño ("k", "m", "g" o "t"). El espacio en el disco del ejecutor se puede usar para mezclar 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 mezcla 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 el 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 el 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 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 Serverless para Apache Spark.

Propiedades de registro

Propiedad Descripción Predeterminada 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 Predeterminada Ejemplos
spark.scheduler.excludeShuffleSkewExecutors Excluye los ejecutores sesgados del mapa de mezcla cuando se programa, lo que puede reducir los tiempos de espera prolongados de recuperación de mezcla causados por la asimetría de escritura de mezcla. false true
spark.scheduler.shuffleSkew.minFinishedTasks Es la cantidad mínima de tareas de mapa de mezcla 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 mezcla finalizadas promedio en un ejecutor para tratar como sesgo. 1.5 2.0

Otras propiedades

Propiedad Descripción
dataproc.diagnostics.enabled 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 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 de tiempo de ejecución de tu carga de trabajo por lotes .
dataproc.sparkBqConnector.version Usa esta propiedad para actualizar a una versión del conector de Spark BigQuery que sea diferente de la versión instalada con la versión de tiempo de ejecución de tu carga de trabajo por lotes (consulta Usa el conector de BigQuery con Serverless para Apache Spark).
dataproc.profiling.enabled Establece esta propiedad en true para habilitar la generación de perfiles para la carga de trabajo de Serverless para Apache Spark.
dataproc.profiling.name 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 separados 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 tiempos de ejecución de Serverless para Apache Spark. Los artefactos admitidos son spark-bigquery-connector, iceberg y delta-lake.