Todos los productos
Search
Centro de documentos

Lindorm:Desarrollo de trabajos Python: guía práctica

Última actualización: Sep 05, 2026

El motor de cómputo Lindorm expone una API RESTful para enviar trabajos Python de Apache Spark. Úsela para ejecutar tareas de streaming y por lotes, así como tareas de aprendizaje automático y computación de grafos. Esta guía describe el flujo de trabajo completo: definición del trabajo, empaquetado de dependencias, carga de archivos a Object Storage Service (OSS) y envío del trabajo.

Requisitos previos

Antes de empezar, asegúrese de contar con lo siguiente:

  • Un motor de cómputo Lindorm activado. Consulte Activate the service

  • Un bucket de OSS para almacenar los archivos de su proyecto Python, el entorno de ejecución y el script de lanzamiento

  • Un AccessKey ID y un AccessKey secret con permisos de lectura y escritura sobre el bucket de OSS. Consulte Create an AccessKey pair

  • Un entorno Linux (obligatorio para empaquetar archivos binarios de Python compatibles con el motor de cómputo Lindorm)

Funcionamiento

El flujo de trabajo para enviar trabajos Python de Spark consta de cuatro etapas:

  1. Definir el trabajo: estructure su proyecto Python con los archivos de punto de entrada necesarios.

  2. Empaquetar el trabajo: agrupe el código del proyecto y el entorno de ejecución de Python por separado.

  3. Cargar los archivos: almacene todos los artefactos en OSS.

  4. Enviar el trabajo: ejecute el trabajo desde la consola de Lindorm o Data Management Service (DMS).

Paso 1: Definir el trabajo

Descargue el paquete de ejemplo de trabajo Spark y extráigalo. La carpeta extraída se llama lindorm-spark-examples. Revise el directorio lindorm-spark-examples/python para consultar la estructura de referencia del proyecto.

La raíz de su proyecto (your_project en el ejemplo) requiere tres cambios estructurales antes de poder enviarse.

1. Agregar __init__.py

Cree un archivo vacío llamado __init__.py en el directorio your_project. Esto convierte al directorio en un módulo de Python que launcher.py puede importar.

2. Preparar main.py

Abra your_project/main.py y realice dos modificaciones:

Agregue el directorio del proyecto a sys.path para que las importaciones se resuelvan correctamente durante la ejecución:

current_dir = os.path.abspath(os.path.dirname(__file__))
sys.path.append(current_dir)

Envuelva su lógica de entrada en una función main(argv):

def main(argv):
    # Write your job logic here
    pass

if __name__ == "__main__":
    main(sys.argv)

Como ejemplo funcional, el siguiente código inicializa una SparkSession:

from pyspark.sql import SparkSession

def main(argv):
    spark = SparkSession \
        .builder \
        .appName("PythonImportTest") \
        .getOrCreate()
    print(spark.conf)
    spark.stop()

if __name__ == "__main__":
    main(sys.argv)

3. Crear launcher.py

En el directorio raíz de your_project, cree un archivo llamado launcher.py. Copie el contenido de lindorm-spark-examples/python/launcher.py. Este archivo es el punto de entrada que invoca el motor de cómputo Lindorm; agrega el directorio del proyecto a sys.path y llama a su función main(argv).

Paso 2: Empaquetar el trabajo

El empaquetado genera dos artefactos separados: un archivo .zip (o .egg) que contiene el código del proyecto, y un archivo tar que contiene el entorno de ejecución de Python.

Empaquetar el código del proyecto

Comprima your_project en un archivo .zip:

zip -r your_project.zip your_project

Alternativamente, cree un archivo .egg. Consulte Building Eggs.

Empaquetar el entorno de ejecución de Python

Utilice Conda o Virtualenv para empaquetar el entorno de ejecución de Python y las bibliotecas de terceros en un archivo tar; luego páselo mediante el parámetro spark.archives.

Herramienta

Cuándo usarla

Conda

Úsela cuando su trabajo requiera una versión específica de Python o deba ejecutarse en nodos donde Python no está preinstalado. Conda incluye el intérprete de Python dentro del archivo tar.

Virtualenv

Úselo cuando la versión de Python en los nodos del clúster ya coincida con la de su proyecto. Virtualenv no incluye el intérprete, sino que utiliza la instalación de Python existente en el nodo.

Importante

Ejecute el paso de empaquetado en Linux. El motor de cómputo Lindorm requiere archivos binarios de Python compilados para Linux.

Ejemplo: uso de Conda

conda create -y -n pyspark_conda_env -c conda-forge numpy conda-pack
conda activate pyspark_conda_env
conda pack -f -o pyspark_conda_env.tar.gz

Para otras opciones de empaquetado, consulte Python Package Management.

Paso 3: Cargar los archivos a OSS

Cargue los tres artefactos a su bucket de OSS. Consulte Simple upload.

  • launcher.py: el punto de entrada creado en el paso 1

  • your_project.zip (o .egg): el paquete de código del proyecto generado en el paso 2

  • pyspark_conda_env.tar.gz: el entorno de ejecución de Python generado en el paso 2

Paso 4: Enviar el trabajo

El motor de cómputo Lindorm admite dos métodos de envío:

Sin importar el método elegido, configure los siguientes parámetros en el campo configs de su solicitud de envío de trabajo.

Parámetros del entorno de ejecución

Establezca estos tres parámetros para dirigir el trabajo hacia sus artefactos en OSS:

Parámetro

Descripción

Ejemplo

spark.submit.pyFiles

Ruta al archivo .zip, .egg o .py del proyecto en OSS

oss://testBucketName/your_project.zip

spark.archives

Ruta al archivo tar del entorno de ejecución de Python. Use # para especificar el nombre del directorio destino.

oss://testBucketName/pyspark_conda_env.tar.gz#environment

spark.kubernetes.driverEnv.PYSPARK_PYTHON

Ruta al ejecutable de Python dentro del archivo tar extraído

./environment/bin/python

Parámetros de acceso a OSS

Configure estos parámetros para que el motor de cómputo pueda leer sus archivos desde OSS:

Parámetro

Descripción

Ejemplo

spark.hadoop.fs.oss.endpoint

Endpoint del bucket de OSS donde se almacenan sus archivos Python

oss-cn-beijing-internal.aliyuncs.com

spark.hadoop.fs.oss.accessKeyId

AccessKey ID

testAccessKey ID

spark.hadoop.fs.oss.accessKeySecret

AccessKey secret

testAccessKey Secret

spark.hadoop.fs.oss.impl

Clase utilizada para acceder a OSS

org.apache.hadoop.fs.aliyun.oss.AliyunOSSFileSystem

Para más parámetros de OSS sobre Hadoop, consulte la documentación de Hadoop-Aliyun.

Ejemplo: valor de configs ensamblado

A continuación se muestran todos los parámetros del entorno de ejecución y de acceso a OSS combinados en un único objeto configs:

{
  "spark.archives": "oss://testBucketName/pyspark_conda_env.tar.gz#environment",
  "spark.kubernetes.driverEnv.PYSPARK_PYTHON": "./environment/bin/python",
  "spark.submit.pyFiles": "oss://testBucketName/your_project.zip",
  "spark.hadoop.fs.oss.endpoint": "oss-cn-beijing-internal.aliyuncs.com",
  "spark.hadoop.fs.oss.accessKeyId": "<your-access-key-id>",
  "spark.hadoop.fs.oss.accessKeySecret": "<your-access-key-secret>",
  "spark.hadoop.fs.oss.impl": "org.apache.hadoop.fs.aliyun.oss.AliyunOSSFileSystem"
}

Reemplace <your-access-key-id> y <your-access-key-secret> con sus credenciales de AccessKey reales.

Diagnóstico de trabajos

Después de enviar el trabajo, consulte su estado y la dirección de la interfaz de usuario de Spark en la página Jobs. Consulte View a job.

Si el envío falla, envíe un ticket y proporcione el ID del trabajo y la dirección de la interfaz de usuario de Spark al equipo de soporte.

Pasos siguientes