AnalyticDB for MySQL Los parámetros de configuración de Spark son similares a los de Apache Spark. Este tema describe los parámetros de configuración de AnalyticDB for MySQL que difieren de los de Apache Spark.
Notas de uso
Los parámetros de configuración de aplicaciones Spark se utilizan para configurar y ajustar el comportamiento y rendimiento de las aplicaciones Spark. El formato de estos parámetros varía según las herramientas de desarrollo de Spark que utilice.
|
Herramienta de desarrollo |
Formato del parámetro de configuración |
Ejemplo de configuración |
|
SQL editor |
set key=value; |
|
|
Spark Jar editor |
"key": "value" |
|
|
Notebook editor |
"key": "value" |
|
|
spark-submit command line interface |
key=value |
|
Especifique los recursos de Driver y Executor
Parámetro | Obligatorio | Valor predeterminado | Descripción | Parámetro correspondiente en Apache Spark |
spark.adb.acuPerApp | No | Ninguna | Número de ACU utilizadas por un solo trabajo de Spark. Valores válidos: [2, Recursos de cómputo máximos de un resource group de trabajos]. Después de configurar este parámetro, el sistema calcula y configura automáticamente las especificaciones del Spark Driver, las especificaciones del Spark Executor y el número de nodos del Spark Executor. | N/A |
spark.driver.resourceSpec | Sí | medium | Especificaciones de recursos del driver de Spark. Cada tipo corresponde a especificaciones distintas. Para obtener más información, consulte la columna Tipo en la tabla Spark resource specifications de este tema. Importante Si envía aplicaciones Spark, puede usar parámetros de Apache Spark y configurar los parámetros según los valores de núcleos y memoria descritos en la tabla Spark resource specifications de este tema. Ejemplo: | spark.driver.cores y spark.driver.memory |
spark.executor.resourceSpec | Sí | medium | Especificaciones de recursos de cada executor de Spark. Cada tipo corresponde a especificaciones distintas. Para obtener más información, consulte la columna Tipo en la tabla Spark resource specifications de este tema. Importante Si envía aplicaciones Spark, puede usar parámetros de Apache Spark y configurar los parámetros según los valores de núcleos y memoria descritos en la tabla Spark resource specifications de este tema. Ejemplo: | spark.executor.cores y spark.executor.memory |
spark.executor.instances | No | Recursos de cómputo máximos de un resource group de trabajos/5 | Número de executors de Spark iniciados. | spark.executor.instances |
spark.adb.driverDiskSize | No | Ninguna | Tamaño del almacenamiento de disco adicional montado en el driver de Spark para satisfacer requisitos de almacenamiento de disco grandes. De forma predeterminada, el almacenamiento de disco adicional se monta en el directorio /user_data_dir. Unidad: GiB. Valores válidos: (0,100]. Ejemplo: spark.adb.driverDiskSize=50Gi. En este ejemplo, el almacenamiento de disco adicional montado en el driver de Spark se establece en 50 GiB. | N/A |
spark.adb.executorDiskSize | No | Ninguna | Tamaño del almacenamiento de disco adicional montado en un executor de Spark para satisfacer los requisitos de operaciones shuffle. De forma predeterminada, el almacenamiento de disco adicional se monta en el directorio /shuffle_volume. Unidad: GiB. Valores válidos: (0,100]. Ejemplo: spark.adb.executorDiskSize=50Gi. En este ejemplo, el almacenamiento de disco adicional montado en un executor de Spark se establece en 50 GiB. | N/A |
Especificaciones de recursos de Spark
Puede utilizar recursos reservados o recursos elásticos para ejecutar trabajos de Spark. Si utiliza los recursos elásticos bajo demanda de un resource group de trabajos para ejecutar trabajos de Spark, el sistema calcula el número de unidades de cómputo de AnalyticDB (ACU) utilizadas basándose en las especificaciones de recursos de Spark y la proporción CPU-memoria mediante las siguientes fórmulas:
Proporción CPU-memoria 1:2: Número de ACU utilizadas = Número de núcleos de CPU × 0.8.
Proporción CPU-memoria 1:4: Número de ACU utilizadas = Número de núcleos de CPU × 1.
Proporción CPU-memoria 1:8: Número de ACU utilizadas = Número de núcleos de CPU × 1.5.
Para obtener información sobre los precios de los recursos elásticos bajo demanda, consulte Pricing for Data Lakehouse Edition.
Tabla 1. Especificaciones de recursos de Spark
Tipo | Especificaciones | ACU utilizadas | ||
Núcleos de CPU | Memoria (GB) | Almacenamiento de disco1 (GB) | ||
c.small | 1 | 2 | 20 | 0.8 |
small | 1 | 4 | 20 | 1 |
m.small | 1 | 8 | 20 | 1.5 |
c.medium | 2 | 4 | 20 | 1.6 |
medium | 2 | 8 | 20 | 2 |
m.medium | 2 | 16 | 20 | 3 |
c.large | 4 | 8 | 20 | 3.2 |
large | 4 | 16 | 20 | 4 |
m.large | 4 | 32 | 20 | 6 |
c.xlarge | 8 | 16 | 20 | 6.4 |
xlarge | 8 | 32 | 20 | 8 |
m.xlarge | 8 | 64 | 20 | 12 |
c.2xlarge | 16 | 32 | 20 | 12.8 |
2xlarge | 16 | 64 | 20 | 16 |
m.2xlarge | 16 | 128 | 20 | 24 |
m.4xlarge | 32 | 256 | 20 | 48 |
m.8xlarge | 64 | 512 | 20 | 96 |
1Almacenamiento de disco: Se espera que el sistema ocupe aproximadamente el 1% del almacenamiento de disco. El almacenamiento de disco disponible real podría ser inferior a 20 GB.
Ejemplo
Asigne 32 Executors para un trabajo de Spark, donde cada Executor tenga una especificación de medium (2 núcleos, 8 GB) y cada Driver tenga una especificación de small (1 núcleo, 4 GB). En este caso, todo el trabajo puede asignar un total de 65 ACU de recursos de cómputo.
{
"spark.driver.resourceSpec":"small",
"spark.executor.resourceSpec":"medium",
"spark.executor.instances":"32",
"spark.adb.executorDiskSize":"100Gi"
}
Especifique prioridades para trabajos de Spark
Parámetro | Obligatorio | Valor predeterminado | Descripción |
spark.adb.priority | No | NORMAL | Prioridad de un trabajo de Spark. Si los recursos son insuficientes para ejecutar todos los trabajos de Spark enviados, los trabajos en cola con mayor prioridad se ejecutan primero. Valores válidos:
Importante Se recomienda establecer este parámetro en HIGH para trabajos de Spark de streaming (trabajos de flujo de larga duración). |
Acceda a los metadatos
Parámetro | Obligatorio | Valor predeterminado | Descripción |
spark.sql.catalogImplementation | No |
| Tipo de metadatos a los que se accederá. Valores válidos:
|
spark.sql.hive.metastore.version | No |
| Versión del servicio metastore. Valores válidos:
Nota
|
Ejemplos
-
Configure el siguiente ajuste para acceder a los metadatos en AnalyticDB for MySQL:
spark.sql.hive.metastore.version=adb; -
Configure los siguientes ajustes para acceder a los metadatos en el Hive Metastore integrado de Apache Spark:
spark.sql.catalogImplementation=hive; spark.sql.hive.metastore.version=2.1.3; -
Configure el siguiente ajuste para acceder a los metadatos en el directorio temporal:
spark.sql.catalogImplementation=in-memory;
Configure la Spark UI
Parámetro | Obligatorio | Valor predeterminado | Descripción |
spark.app.log.rootPath | No |
| Directorio donde se almacenan los registros de trabajos de Spark de AnalyticDB for MySQL y los datos de salida del sistema operativo Linux. De forma predeterminada, la carpeta llamada Spark application ID contiene el siguiente contenido:
|
spark.adb.event.logUploadDuration | No | false | Especifica si se debe registrar la duración de la carga de un registro de eventos. |
spark.adb.buffer.maxNumEvents | No | 1000 | Número máximo de eventos almacenados en caché por el driver. |
spark.adb.payload.maxNumEvents | No | 10000 | Número máximo de eventos que se pueden cargar a Object Storage Service (OSS) a la vez. |
spark.adb.event.pollingIntervalSecs | No | 0.5 | Intervalo entre dos cargas de eventos a OSS. Unidad: segundos. Por ejemplo, un valor de 0.5 indica que los eventos se cargan cada 0.5 segundos. |
spark.adb.event.maxPollingIntervalSecs | No | 60 | Intervalo máximo de reintento cuando falla una carga de eventos a OSS. Unidad: segundos. El intervalo entre una carga fallida y un reintento de carga debe estar dentro del rango de los valores de |
spark.adb.event.maxWaitOnEndSecs | No | 10 | Tiempo máximo de espera para cargar eventos a OSS. Unidad: segundos. El tiempo máximo de espera es el intervalo entre el inicio y la finalización de una carga. Si una carga no se completa dentro del tiempo máximo de espera, se reintenta la carga. |
spark.adb.event.waitForPendingPayloadsSleepIntervalSecs | No | 1 | Tiempo de espera requerido para reintentar una carga que no se completó dentro del valor de |
spark.adb.eventLog.rolling.maxFileSize | No | 209715200 | Tamaño máximo de archivo de los registros de eventos en OSS. Unidad: bytes. Los registros de eventos se almacenan en OSS en forma de varios archivos, como Eventlog.0 y Eventlog.1. Puede especificar el tamaño del archivo. |
Otorgue permisos a usuarios RAM
Parámetro | Obligatorio | Valor predeterminado | Descripción |
spark.adb.roleArn | No | N/A | Nombre de recurso de Alibaba Cloud (ARN) del rol de Resource Access Management (RAM) que desea adjuntar al usuario RAM en la consola de RAM para otorgar al usuario RAM los permisos necesarios para enviar aplicaciones Spark. Para obtener más información, consulte RAM role overview. Si envía aplicaciones Spark como usuario RAM, debe especificar este parámetro. Si envía aplicaciones Spark con una cuenta de Alibaba Cloud, no necesita especificar este parámetro. Nota Si ya ha otorgado permisos a un usuario RAM en la consola de RAM, no necesita especificar este parámetro. Para obtener más información, consulte Account authorization. |
Habilite los conectores de fuentes de datos integrados
|
Parámetro |
Obligatorio |
Valor predeterminado |
Descripción |
|
spark.adb.connectors |
No |
N/A |
Nombres de los conectores integrados de Spark de AnalyticDB for MySQL que desea habilitar. Separe varios nombres con comas (,). Valores válidos: oss, hudi, delta, adb, odps, external_hive, jindo y default. |
|
spark.hadoop.io.compression.codec.snappy.native |
No |
false |
Especifica si un archivo Snappy está en el formato Snappy estándar. De forma predeterminada, Hadoop reconoce los archivos Snappy editados en Hadoop. Si establece este parámetro en true, se utiliza la biblioteca Snappy estándar para la descompresión. Si establece este parámetro en false, se utiliza la biblioteca Snappy predeterminada de Hadoop para la descompresión. |
Habilitar el acceso a VPC y a orígenes de datos
Parámetro | Obligatorio | Valor predeterminado | Descripción |
spark.adb.eni.enabled | No | false | Especifica si se habilita la interfaz de red elástica (ENI). Si utiliza tablas externas para acceder a otros orígenes de datos externos, debe habilitar ENI. Valores válidos:
|
spark.adb.eni.vswitchId | No | N/A | ID del vSwitch asociado a una ENI. Si se conecta a AnalyticDB for MySQL desde una instancia de Elastic Compute Service (ECS) a través de una nube privada virtual (VPC), debe especificar un ID de vSwitch para la VPC. Nota Si ha habilitado el acceso a VPC, debe establecer el parámetro spark.adb.eni.enabled en true. |
spark.adb.eni.securityGroupId | No | N/A | ID del security group asociado a una ENI. Si se conecta a AnalyticDB for MySQL desde una instancia de ECS a través de una VPC, debe especificar un ID de security group. Nota Si ha habilitado el acceso a VPC, debe establecer el parámetro spark.adb.eni.enabled en true. |
spark.adb.eni.extraHosts | No | N/A | Asignaciones entre direcciones IP y nombres de host. Este parámetro permite que Spark resuelva los nombres de host de los orígenes de datos. Si desea acceder a un origen de datos Hive autogestionado, debe especificar este parámetro. Nota
|
spark.adb.eni.adbHostAlias.enabled | No | false | Especifica si se escribe automáticamente la información de resolución de nombres de dominio que requiere AnalyticDB for MySQL en una tabla de asignación de nombres de dominio y direcciones IP. Valores válidos:
Si utiliza una ENI para leer o escribir datos en EMR Hive, debe establecer este parámetro en true. |
Configurar reintentos de aplicación
|
Parámetro |
Obligatorio |
Valor predeterminado |
Descripción |
|
spark.adb.maxAttempts |
No |
1 |
Número máximo de intentos permitidos para ejecutar una aplicación. El valor predeterminado es 1, lo que indica que no se permiten reintentos. Si establece este parámetro en 3 para una aplicación de Spark, el sistema intenta ejecutar la aplicación hasta tres veces dentro de una ventana deslizante. |
|
spark.adb.attemptFailuresValidityInterval |
No |
Integer.MAX |
Duración de la ventana deslizante durante la cual el sistema intenta volver a ejecutar una aplicación. Unidad: segundos. Por ejemplo, si establece este parámetro en 6000 para una aplicación de Spark, el sistema cuenta el número de intentos realizados en los últimos 6,000 segundos tras una ejecución con errores. Si el número de intentos es menor que el valor del parámetro maxAttempts, el sistema reintenta la ejecución de la aplicación. |
Terminación automática de trabajos por tiempo de espera de programación (Scheduling Watchdog)
Cuando los pods de Executor de un trabajo permanecen en estado Pending durante un periodo prolongado debido a recursos subyacentes insuficientes (como agotamiento de inventario de ECI, exceso de cuota de recursos o afinidad de nodo insatisfecha), el trabajo sigue en espera, lo que desperdicia recursos del Driver y bloquea programaciones posteriores. Al habilitar esta función, cuando tanto la proporción de Executors no programables como el tiempo de espera alcanzan los umbrales especificados, el sistema marca automáticamente el trabajo como fallido y libera recursos para lograr un comportamiento de fallo rápido.
Escenarios
Esta función es adecuada para escenarios en los que ejecuta una gran cantidad de trabajos de Spark en un clúster compartido y desea que los trabajos fallen rápidamente en lugar de esperar indefinidamente cuando los recursos son insuficientes. Los escenarios típicos incluyen:
Recursos de ECI insuficientes: Cuando utiliza Elastic Container Instance (ECI) para ejecutar Executors, la falta de inventario de los tipos de instancia subyacentes provoca que los pods permanezcan en estado Pending durante mucho tiempo.
Exceso de cuota de recursos: La cuota de CPU o memoria del namespace o resource group se agota y no se pueden programar nuevos Executors.
Reintentos rápidos para trabajos por lotes: Desea que los trabajos fallen rápidamente cuando los recursos no están disponibles y permitir que un sistema de programación de capa superior (como Airflow) decida la estrategia de reintento.
Método de configuración
Al enviar un trabajo de Spark, configure los siguientes parámetros para habilitar y ajustar el comportamiento del Watchdog.
Parámetro | Obligatorio | Valor predeterminado | Descripción |
spark.adb.terminateOnPending.enabled | Obligatorio cuando la función está habilitada | false | Especifica si se habilita la terminación automática del trabajo por tiempo de espera de programación. Valores válidos:
Esta función está deshabilitada de forma predeterminada. Esta función y los demás parámetros solo surten efecto después de establecer este parámetro en true. |
spark.adb.terminateOnPending.timeoutSec | No | 610 | Tiempo de tolerancia durante el cual un pod de Executor permanece en estado Pending. Unidad: segundos. El temporizador inicia cuando se detecta por primera vez que un pod de Executor no es programable. Cuando el tiempo de espera supera este valor y también se cumple la condición spark.adb.terminateOnPending.executorRatio, el trabajo se termina. Valores recomendados: 610 a 900. |
spark.adb.terminateOnPending.executorRatio | No | 0.5 | Umbral de la proporción de Executors no programables que activa la terminación. Rango válido: (0, 1.0]. La proporción se calcula como el número de Executors no programables dividido por el número total esperado de Executors. Cuando la proporción alcanza este valor y el tiempo en Pending supera spark.adb.terminateOnPending.timeoutSec, el trabajo se termina. Un valor menor hace que la activación sea más sensible, y un valor mayor la hace más permisiva:
El número total esperado de Executors se determina según la siguiente prioridad:
|
La terminación se activa solo cuando se cumplen tanto la condición spark.adb.terminateOnPending.executorRatio como spark.adb.terminateOnPending.timeoutSec. La terminación no se activa si solo se excede el tiempo de espera pero no se alcanza la proporción, o si solo se alcanza la proporción pero el tiempo de espera es insuficiente.
Ejemplo de configuración: habilite la terminación automática de trabajos por tiempo de espera de programación y termine el trabajo cuando la mitad de los Executors permanezcan sin programarse durante más de 300 segundos.
{
"spark.adb.terminateOnPending.enabled":"true",
"spark.adb.terminateOnPending.timeoutSec":"300",
"spark.adb.terminateOnPending.executorRatio":"0.5"
}
Comportamiento del trabajo tras la terminación
Una vez que se activa la terminación, el trabajo se comporta de la siguiente manera:
Estado del trabajo: SparkApplication entra primero en
FailingStatey luego cambia aFailedState.Mensaje de error:
status.appState.errorMessagecontiene información estructurada de diagnóstico de fallos.Pod de Driver: El pod de Driver se elimina proactivamente para liberar recursos.
El siguiente ejemplo muestra un mensaje de error:
[ResourceQuotaExceeded] executors unschedulable: 5/10 (50%) for 5m12s; threshold ratio≥50%, age≥5m0s
denom=10 (spec.executor.instances), distinct reasons=1, oldest pod=my-job-exec-3 (pending since 2026-06-01T10:16:34Z)
scheduler reason: Unschedulable
scheduler message: 0/1279 nodes are available: quota not enough, quotaName: amv-x
El contenido entre corchetes al inicio del mensaje de error indica la causa del fallo clasificada automáticamente por el sistema. La siguiente tabla describe el significado de cada categoría y el manejo recomendado.
|
Categoría de fallo |
Significado |
Manejo recomendado |
|
|
El pod de ECI supera la duración máxima en Pending. |
Compruebe el inventario de tipos de instancia de ECI o cambie a otro tipo de instancia de ECI. |
|
|
La cuota de recursos es insuficiente. |
Contacte al administrador para aumentar la cuota o reduzca la concurrencia del trabajo. |
|
|
La CPU o memoria del clúster es insuficiente. |
Espere a que se liberen recursos o escale horizontalmente el clúster. |
El Watchdog solo marca el trabajo como fallido. Si el trabajo se reintenta posteriormente depende de la restartPolicy del trabajo, lo cual es consistente con el comportamiento cuando un trabajo falla normalmente. Para obtener más información sobre los reintentos de aplicación, consulte la sección Configure application retries en este tema.
Especificar un entorno de ejecución para trabajos de Spark
La siguiente tabla describe los parámetros de configuración necesarios cuando utiliza la tecnología de entornos virtuales para empaquetar un entorno de Python y enviar trabajos de Spark.
|
Parámetro |
Obligatorio |
Valor predeterminado |
Descripción |
|
spark.pyspark.python |
No |
N/A |
Ruta del intérprete de Python en su dispositivo local. |
Especificar la versión de Spark
Parámetro | Obligatorio | Valor predeterminado | Descripción |
spark.adb.version | No | 3.2 | Versión de Spark. Valores válidos:
|
Motor de ejecución vectorizada de alto rendimiento
|
Parámetro |
Obligatorio |
Valor predeterminado |
Descripción |
|
spark.adb.native.enabled |
No |
false |
Especifica si se habilita el motor de ejecución vectorizada de alto rendimiento para ejecutar trabajos. El motor está integrado en AnalyticDB for MySQL Spark y es totalmente compatible con Spark de código abierto. Puede habilitarlo sin modificar su código existente. |
Aceleración de almacenamiento de lago
|
Parámetro |
Obligatorio |
Valor predeterminado |
Descripción |
|
spark.adb.lakecache.enabled |
No |
false |
Especifica si se habilita LakeCache (lake storage acceleration). |
Parámetros de configuración no compatibles con AnalyticDB for MySQL
AnalyticDB for MySQL Spark no admite los siguientes parámetros de configuración de Apache Spark. Estos parámetros no surten efecto en AnalyticDB for MySQL Spark.
Useless options(these options will be ignored):
--deploy-mode
--master
--packages, please use `--jars` instead
--exclude-packages
--proxy-user
--repositories
--keytab
--principal
--queue
--total-executor-cores
--driver-library-path
--driver-class-path
--supervise
-S,--silent
-i <filename>