Envíe un trabajo de Spark mediante la CLI spark-submit de EMR Serverless Spark desde una instancia de ECS.
Requisitos previos
Java Development Kit (JDK) 1.8 o posterior está instalado.
Si utiliza un usuario de RAM para enviar un trabajo de Spark, debe agregar dicho usuario al espacio de trabajo de EMR Serverless Spark y asignarle un rol de desarrollador o superior. Para obtener más información, consulte Manage users and roles.
Procedimiento
Paso 1: Descargar e instalar la herramienta spark-submit de EMR Serverless
Haga clic en emr-serverless-spark-tool-1.16.0-bin.zip para descargar el paquete de instalación.
Cargue el paquete de instalación en su instancia de ECS. Para obtener más información, consulte Upload or download files.
-
Ejecute el siguiente comando para descomprimir la herramienta spark-submit de EMR Serverless.
unzip emr-serverless-spark-tool-1.16.0-bin.zip
Paso 2: Configurar parámetros
En un entorno donde Spark esté instalado, si la variable de entorno SPARK_CONF_DIR está definida, debe colocar el archivo de configuración en el directorio especificado por SPARK_CONF_DIR. Por ejemplo, en un clúster de EMR, este directorio suele ser /etc/taihao-apps/spark-conf. De lo contrario, el sistema reportará un error.
-
Ejecute el siguiente comando para modificar la configuración en el archivo
connection.properties.vim emr-serverless-spark-tool-1.16.0/conf/connection.properties -
Configure el archivo como se muestra en el siguiente ejemplo. Los parámetros utilizan el formato
key=value.accessKeyId=<ALIBABA_CLOUD_ACCESS_KEY_ID> accessKeySecret=<ALIBABA_CLOUD_ACCESS_KEY_SECRET> regionId=cn-hangzhou endpoint=emr-serverless-spark.cn-hangzhou.aliyuncs.com workspaceId=w-xxxxxxxxxxxxImportanteEl usuario o rol de RAM asociado a esta AccessKey debe tener autorización en RAM y estar agregado al espacio de trabajo de EMR Serverless Spark.
Para la autorización de RAM, consulte Grant permissions to a RAM user.
Para la gestión de usuarios y roles en un espacio de trabajo de EMR Serverless Spark, consulte Manage users and roles.
La siguiente tabla describe los parámetros.
Parámetro
Obligatorio
Descripción
accessKeyId
Sí
El AccessKey ID y AccessKey Secret de la cuenta de Alibaba Cloud o del usuario de RAM que ejecuta el trabajo de Spark.
ImportanteAl configurar los parámetros
accessKeyIdyaccessKeySecret, asegúrese de que el usuario asociado a la AccessKey tenga permisos de lectura y escritura en el bucket de OSS vinculado al espacio de trabajo. Puede consultar el bucket de OSS vinculado al espacio de trabajo en la página de Spark; para ello, haga clic en Details en la columna Actions del espacio de trabajo.accessKeySecret
Sí
regionId
Sí
El ID de la región. Este ejemplo utiliza la región China (Hangzhou).
endpoint
Sí
El endpoint de EMR Serverless Spark. Para obtener más información, consulte Endpoints.
Este ejemplo utiliza el endpoint público para la región China (Hangzhou). El valor del parámetro es
emr-serverless-spark.cn-hangzhou.aliyuncs.com.NotaSi su instancia de ECS no tiene acceso a Internet, debe utilizar un endpoint de VPC.
workspaceId
Sí
El ID del espacio de trabajo de EMR Serverless Spark.
Paso 3: Enviar un trabajo de Spark
-
Ejecute el siguiente comando para ir al directorio de la herramienta spark-submit de EMR Serverless.
cd emr-serverless-spark-tool-1.16.0 -
Seleccione un método de envío según el tipo de trabajo.
Al enviar un trabajo, especifique los recursos de archivo de los que depende, como un paquete JAR o un script de Python. Estos recursos pueden almacenarse en OSS o de forma local. Todos los ejemplos de este tema utilizan recursos de OSS.
spark-submit
spark-submites la herramienta de envío de propósito general de Spark para tareas de Java/Scala y PySpark.Trabajos de Java/Scala
Este ejemplo utiliza spark-examples_2.12-3.5.2.jar, un ejemplo integrado de Spark que calcula el valor de pi (π). Haga clic en spark-examples_2.12-3.5.2.jar para descargar el paquete JAR y cárguelo en OSS.
NotaEl archivo
spark-examples_2.12-3.5.2.jardebe usarse con una versión de motor esr-4.x para enviar trabajos. Si utiliza una versión de motor esr-5.x, descargue spark-examples_2.13-4.0.1.jar para este ejemplo../bin/spark-submit --name SparkPi \ --queue dev_queue \ --num-executors 5 \ --driver-memory 1g \ --executor-cores 2 \ --executor-memory 2g \ --class org.apache.spark.examples.SparkPi \ oss://<yourBucket>/path/to/spark-examples_2.12-3.5.2.jar \ 10000Trabajos de PySpark
Este ejemplo utiliza DataFrame.py y employee.csv. Haga clic en DataFrame.py y employee.csv para descargar los archivos de prueba y cárguelos en OSS.
NotaDataFrame.py es un fragmento de código que utiliza el framework Apache Spark para procesar datos en OSS.
employee.csv es un archivo de datos que contiene nombres de empleados, departamentos y salarios.
./bin/spark-submit --name PySpark \ --queue dev_queue \ --num-executors 5 \ --driver-memory 1g \ --executor-cores 2 \ --executor-memory 2g \ --conf spark.tags.key=value \ oss://<yourBucket>/path/to/DataFrame.py \ oss://<yourBucket>/path/to/employee.csvLos parámetros se describen a continuación.
-
Parámetros de código abierto compatibles
Parámetro
Ejemplo
Descripción
--name
SparkPi
El nombre de la aplicación para el trabajo de Spark.
--class
org.apache.spark.examples.SparkPi
La clase de entrada para el trabajo de Spark. Este parámetro es obligatorio para aplicaciones de Java o Scala, pero no es necesario para aplicaciones de Python.
--num-executors
5
El número de executors para el trabajo de Spark.
--driver-cores
1
El número de núcleos del driver para el trabajo de Spark.
--driver-memory
1g
La cantidad de memoria del driver para el trabajo de Spark.
--executor-cores
2
El número de núcleos de executor para el trabajo de Spark.
--executor-memory
2g
La cantidad de memoria de executor para el trabajo de Spark.
--files
oss://<yourBucket>/file1,oss://<yourBucket>/file2
Los archivos de recursos requeridos por el trabajo de Spark. Los archivos pueden almacenarse en OSS o de forma local. Separe varios archivos con comas (,).
--py-files
oss://<yourBucket>/file1.py,oss://<yourBucket>/file2.py
Los scripts de Python requeridos por el trabajo de Spark. Los scripts pueden almacenarse en OSS o de forma local. Separe varios archivos con comas (,). Este parámetro es exclusivo para aplicaciones de PySpark.
--jars
oss://<yourBucket>/file1.jar,oss://<yourBucket>/file2.jar
Los paquetes JAR requeridos por el trabajo de Spark. Los recursos pueden almacenarse en OSS o de forma local. Separe varios archivos con comas (,).
--archives
oss://<yourBucket>/archive.tar.gz#env,oss://<yourBucket>/archive2.zip
Los archivos comprimidos requeridos por el trabajo de Spark. Los recursos pueden almacenarse en OSS o de forma local. Separe varios archivos con comas (,).
--queue
root_queue
El nombre de la cola donde se ejecuta el trabajo de Spark. Este nombre debe coincidir con el nombre de la cola en la sección de gestión de colas de su espacio de trabajo de EMR Serverless Spark.
--proxy-user
test
El valor especificado anula la variable de entorno
HADOOP_USER_NAME. El comportamiento es consistente con la versión de código abierto.--conf
spark.tags.key=value
Un parámetro personalizado para el trabajo de Spark.
--status
jr-8598aa9f459d****
Consulta el estado del trabajo de Spark.
--kill
jr-8598aa9f459d****
Finaliza el trabajo de Spark.
-
Parámetros mejorados
Parámetro
Ejemplo
Descripción
--detach
No requiere valor
Sale de
spark-submitinmediatamente después del envío, sin esperar el estado del trabajo.--detail
jr-8598aa9f459d****
Muestra los detalles del trabajo de Spark.
--release-version
esr-4.1.1 (Spark 3.5.2, Scala 2.12)
La versión del motor de Spark. Introduzca el número de versión que se muestra en la consola.
--enable-template
No requiere valor
Habilita la función de plantilla. El trabajo utiliza entonces la plantilla de configuración predeterminada del espacio de trabajo.
Si creó una configuración en Configurations dentro de Configuration management, puede especificar su ID agregando
spark.emr.serverless.templateIdal parámetro--conf. El trabajo aplicará directamente la plantilla especificada. Para obtener más información sobre cómo crear plantillas, consulte Configuration management.-
Si solo especifica
--enable-template, la tarea aplica automáticamente la plantilla de configuración predeterminada del espacio de trabajo. -
Uso exclusivo de
--confpara especificar el ID de plantilla: La tarea aplica directamente el ID de plantilla especificado. -
Especificación conjunta de
--enable-templatey--conf: Si especifica tanto--enable-templatecomo--conf spark.emr.serverless.templateId, el ID de plantilla en--confanula la plantilla predeterminada. -
Sin parámetros especificados: Si no utiliza
--enable-templateni especifica--conf spark.emr.serverless.templateId, el trabajo no aplicará ninguna configuración de plantilla.
--timeout
60
El periodo de tiempo de espera para el trabajo, en segundos.
--workspace-id
w-4b4d7925a797****
El ID del espacio de trabajo a nivel de trabajo. Anula el parámetro
workspaceIden el archivoconnection.properties. -
-
Parámetros de código abierto no compatibles
--deploy-mode
--master
--repositories
--keytab
--principal
--total-executor-cores
--driver-library-path
--driver-class-path
--supervise
--verbose
spark-sql
spark-sqles una herramienta para ejecutar consultas SQL o scripts directamente.-
Ejemplo 1: Ejecutar una sentencia SQL directamente
spark-sql -e "SHOW TABLES"Este comando lista todas las tablas en la base de datos actual.
-
Ejemplo 2: Ejecutar un archivo de script SQL
spark-sql -f oss://<yourBucketname>/path/to/your/example.sqlEste ejemplo utiliza example.sql. Haga clic en example.sql para descargar el archivo de prueba y cárguelo en OSS.
La siguiente tabla describe los parámetros.
Parámetro
Ejemplo
Descripción
-e "<sql>"-e "SELECT * FROM table"Ejecuta una sentencia SQL en línea desde la línea de comandos.
-f <path>-f oss://path/script.sqlEjecuta un archivo de script SQL desde una ruta especificada.
Paso 4: Consultar un trabajo de Spark
CLI
Consultar el estado del trabajo
cd emr-serverless-spark-tool-1.16.0
./bin/spark-submit --status <jr-8598aa9f459d****>
Consultar los detalles del trabajo
cd emr-serverless-spark-tool-1.16.0
./bin/spark-submit --detail <jr-8598aa9f459d****>
UI
En la página EMR Serverless Spark, haga clic en Job History en el panel de navegación izquierdo.
-
En la página Job History, en la pestaña Development Job Runs, puede consultar los trabajos enviados.
La lista de trabajos incluye las columnas Job name/Job run ID, Status, Tags, Submission time y Actions. En la columna Actions, puede hacer clic en Stop, Details o Spark UI.
(Opcional) Paso 5: Finalizar un trabajo de Spark
cd emr-serverless-spark-tool-1.16.0
./bin/spark-submit --kill <jr-8598aa9f459d****>
Solo puede finalizar trabajos que se encuentren en estado running.
Preguntas frecuentes
¿Cómo especifico una conexión de red al enviar un trabajo por lotes con la herramienta spark-submit?
Cree una conexión de red. Para obtener más información, consulte Add a network connection.
-
En el comando spark-submit, utilice
--confpara especificar la conexión de red.--conf spark.emr.serverless.network.service.name=<networkname>Reemplace <networkname> con el nombre de su conexión de red.