Todos los productos
Search
Centro de documentos

E-MapReduce:Submit a Spark job using spark-submit

Última actualización: Sep 04, 2026

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

  1. Haga clic en emr-serverless-spark-tool-1.16.0-bin.zip para descargar el paquete de instalación.

  2. Cargue el paquete de instalación en su instancia de ECS. Para obtener más información, consulte Upload or download files.

  3. 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

Importante

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.

  1. 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
  2. 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-xxxxxxxxxxxx
    Importante

    El 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.

    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.

    Importante

    Al configurar los parámetros accessKeyId y accessKeySecret, 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.

    Nota

    Si 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

  1. Ejecute el siguiente comando para ir al directorio de la herramienta spark-submit de EMR Serverless.

    cd emr-serverless-spark-tool-1.16.0
  2. 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-submit es 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.

    Nota

    El archivo spark-examples_2.12-3.5.2.jar debe 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 \
    10000

    Trabajos 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.

    Nota
    • DataFrame.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.csv

    Los 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-submit inmediatamente 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.templateId al 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 --conf para especificar el ID de plantilla: La tarea aplica directamente el ID de plantilla especificado.

      • Especificación conjunta de --enable-template y --conf: Si especifica tanto --enable-template como --conf spark.emr.serverless.templateId, el ID de plantilla en --conf anula la plantilla predeterminada.

      • Sin parámetros especificados: Si no utiliza --enable-template ni 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 workspaceId en el archivo connection.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-sql es 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.sql

      Este ejemplo utiliza example.sql. Haga clic en example.sql para descargar el archivo de prueba y cárguelo en OSS.

      Contenido de ejemplo del archivo example.sql

      CREATE TABLE IF NOT EXISTS employees (
          id INT,
          name STRING,
          age INT,
          department STRING
      );
      INSERT INTO employees VALUES
      (1, 'Alice', 30, 'Engineering'),
      (2, 'Bob', 25, 'Marketing'),
      (3, 'Charlie', 35, 'Sales');
      SELECT * FROM employees;
      

    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.sql

    Ejecuta 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

  1. En la página EMR Serverless Spark, haga clic en Job History en el panel de navegación izquierdo.

  2. 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****>
Nota

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?

  1. Cree una conexión de red. Para obtener más información, consulte Add a network connection.

  2. En el comando spark-submit, utilice --conf para 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.