Propiedades de Spark

Dataproc Serverless usa las propiedades de Spark para determinar los recursos de procesamiento, memoria y disco para asignar a tu carga de trabajo por lotes. Esta configuración de propiedades puede afectar el consumo y el costo de la cuota de la carga de trabajo (consulta Cuotas de Dataproc sin servidores y Precios de Dataproc sin servidores para obtener más información).

Cómo establecer propiedades de la carga de trabajo por lotes de Spark

Puedes especificar las propiedades de Spark cuando enviar una carga de trabajo por lotes de Spark sin servidores de Dataproc con la consola de Google Cloud, gcloud CLI o la API de Dataproc.

Console

  1. Ve a la página de creación de lotes de Dataproc en la consola de Google Cloud.

  2. En la sección Propiedades, haz clic en Agregar propiedad y, luego, ingresa Key (nombre) y Value de una propiedad Spark compatible.

gcloud

Ejemplo de envío por lotes de gcloud CLI:

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

API

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

Propiedades de Spark compatibles

Dataproc Serverless para Spark admite la mayoría de las propiedades de Spark, pero No admite propiedades de Spark relacionadas con YARN y shuffle, como spark.master=yarn y spark.shuffle.service.enabled. Si la aplicación Spark configura una propiedad YARN o Shuffle, la aplicación fallará.

Propiedades del entorno de ejecución

Dataproc Serverless para Spark admite las siguientes propiedades personalizadas de Spark para configurar el entorno de ejecución:

Propiedad Descripción
spark.dataproc.driverEnv.EnvironmentVariableName Agrega EnvironmentVariableName al proceso del controlador. Puedes especificar varias variables de entorno.

Propiedades de asignación de recursos

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

Propiedad Descripción Predeterminado Ejemplos
spark.driver.cores La cantidad de núcleos (CPU virtuales) para asignar 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").

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). Para 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 JVM con un sufijo de unidad de tamaño ("m", "g" o "t").

Esta es la memoria sin montón asociada con las sobrecargas de JVM, las cadenas internas y otras sobrecargas nativas, y también incluye la memoria que usan otros procesos de controladores, como los procesos de controladores de PySpark y la memoria que usan otros procesos que no son de controladores 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 spark.driver.memoryOverhead más spark.driver.memory.

Memoria total del controlador por núcleo del controlador, incluida la sobrecarga de memoria del controlador, debe estar entre 1024m y 7424m para la 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

El 10% de la memoria del controlador, excepto para las cargas de trabajo por lotes de PySpark, que usan el 40% de la memoria del controlador de forma predeterminada 512m, 2g
spark.dataproc.driver.compute.tier El nivel de procesamiento que se usará en el controlador. El nivel de procesamiento Premium ofrece un rendimiento por núcleo más alto, pero se factura a una tarifa más alta. standard estándar, 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 250GiB como mínimo. Si se selecciona el nivel de disco Premium en el controlador, los tamaños válidos son 375 g, 750 g, 1,500 g, 3,000 g, 6,000 g o 9,000 g. Si se selecciona el nivel de disco Premium y 16 núcleos de controlador, el tamaño mínimo del disco es de 750 g. 100GiB por núcleo 1024g, 2t
spark.dataproc.driver.disk.tier Es el nivel de disco que se usará para el almacenamiento local y aleatorio 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 el nivel de disco Premium está seleccionado en el controlador, el nivel de procesamiento Premium también debe seleccionarse spark.dataproc.driver.compute.tier=premium, y la cantidad de espacio en disco debe especificarse 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 las aplicaciones del usuario no pueden usar.

standard estándar, premium
spark.executor.cores La cantidad de núcleos (CPU virtuales) para asignar a cada ejecutor de Spark. Valores válidos: 4, 8 y 16. 4
spark.executor.memory

La cantidad de memoria para asignar a cada proceso del ejecutor de Spark. especificar en formato de cadena de memoria JVM con un sufijo de unidad de tamaño ("m", "g" o “t”).

Memoria total del ejecutor por núcleo del ejecutor, incluida la memoria del ejecutor sobrecarga, 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 de JVM adicional que se asignará a Spark. ejecutor, especificado en formato de cadena de memoria JVM con una unidad de tamaño el sufijo ("m", "g" o "t").

Esta es la memoria sin 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 de ejecutor que se ejecutan en el contenedor. El tamaño máximo de memoria del contenedor en el que se ejecuta el ejecutor es de 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.

El 10% de la memoria del ejecutor, excepto para las cargas de trabajo por lotes de PySpark, que usan el 40% de la memoria del ejecutor de forma predeterminada 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 facturará a una tarifa más alta. standard estándar, premium
spark.dataproc.executor.disk.size La cantidad de espacio en disco asignado a cada ejecutor, se especifica con un sufijo de unidad de tamaño (“k”, “m”, “g” o “t”). El espacio en el disco del ejecutor se puede usar para datos aleatorios y para almacenar en etapa intermedia las dependencias. Debe ser 250GiB como mínimo. Si se selecciona el nivel de disco Premium en el ejecutor, los tamaños válidos son 375 g, 750 g, 1,500 g, 3,000 g, 6,000 g o 9,000 g. Si se selecciona el nivel de disco Premium y 16 núcleos de ejecutor, el tamaño mínimo del disco es de 750 GB. 100GiB por núcleo 1024g, 2t
spark.dataproc.executor.disk.tier Es el nivel de disco que se usará para el almacenamiento local y aleatorio en los ejecutores. El nivel de disco Premium ofrece un mejor rendimiento en IOPS y capacidad de procesamiento, pero se facturará a una tarifa más alta. Si el nivel de disco Premium está seleccionado en ejecutor, el nivel de procesamiento Premium también debe seleccionarse spark.dataproc.executor.compute.tier=premium, y la cantidad de espacio en disco debe especificarse spark.dataproc.executor.disk.size

Si se selecciona el nivel de disco Premium, a cada ejecutor se le asigna un espacio adicional de 50 GiB en el disco para el almacenamiento del sistema, que las aplicaciones de los usuarios no pueden usar.

standard estándar, premium
spark.executor.instances Es la cantidad inicial de ejecutores que se asignarán. Después de una carga de trabajo por lotes el ajuste de escala automático puede cambiar la cantidad de ejecutores activos. Debe ser de al menos 2 y, como máximo, 2000.

Propiedades del 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 Ajuste de escala automático sin servidores de Dataproc.

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. Válida los niveles de registro incluyen ALL, DEBUG, ERROR y FATAL, INFO, OFF y TRACE y WARN. INFO, DEBUG
spark.executor.syncLogLevel.enabled Cuando se establece en true, el nivel de registro aplicado mediante el método SparkContext.setLogLevel() es propagado 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 Spark Startups. Los niveles de registro válidos son ALL, DEBUG, ERROR, FATAL, INFO, OFF, TRACE y WARN. spark.log.level.org.apache.spark=error

Programa propiedades

Propiedad Descripción Predeterminado Ejemplos
spark.scheduler.excludeShuffleSkewExecutors Excluye los ejecutores sesgados del mapa de shuffle cuando programes, lo que puede reducir los tiempos de espera de recuperación de shuffle largos causados por el sesgo de escritura de shuffle. false true
spark.scheduler.shuffleSkew.minFinishedTasks Cantidad mínima de tareas de mapa de Shuffle finalizadas en un ejecutor. tratar como sesgo. 10 100
spark.scheduler.shuffleSkew.maxExecutorsNumber Es la cantidad máxima de ejecutores que se tratarán como sesgados. Ejecutores sesgados se excluyen de esta ronda de programación. 5 10
spark.scheduler.shuffleSkew.maxExecutorsRatio Proporción máxima del total de ejecutores para tratar como sesgo. Ejecutores sesgados se excluyen de la programación. 0.05 0.1
spark.scheduler.shuffleSkew.ratio Un múltiplo de las tareas promedio finalizadas del mapa de Shuffle en una ejecutor para tratarlo como sesgo. 1.5 2.0

Otras propiedades

Propiedad Descripción
dataproc.diagnostics.enabled Habilita esta propiedad para ejecutar diagnósticos en una falla o cancelación de carga de trabajo por lotes. Si el diagnóstico está habilitado, la carga de trabajo por lotes seguirá usándose Recursos de procesamiento después de que se complete la carga de trabajo hasta que finalice el diagnóstico. Un URI que apunta a la ubicación del archivo comprimido de diagnóstico se incluye en la Batch.RuntimeInfo.diagnosticOutputUri.
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 del entorno 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 BigQuery de Spark 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 Cómo usar el conector de BigQuery con Dataproc Serverless para Spark).
dataproc.profiling.enabled Establece esta propiedad en true para habilitar la generación de perfiles para la carga de trabajo de Dataproc Serverless.
dataproc.profiling.name Usa esta propiedad para establecer el nombre que se usa para crear un perfil en el servicio de Profiler.