Tous les produits
Search
Centre de documentation

Lindorm:Développement de jobs Python : guide pratique

Dernière mise à jour :Aug 11, 2026

Le moteur de calcul Lindorm expose une API RESTful pour soumettre des jobs Python Apache Spark. Utilisez-la pour exécuter des tâches de streaming et par lots, ainsi que des travaux d'apprentissage automatique et de calcul de graphes. Ce guide détaille le flux de travail complet : définition du job, empaquetage des dépendances, chargement des fichiers dans Object Storage Service (OSS) et soumission du job.

Prérequis

Avant de commencer, assurez-vous de disposer des éléments suivants :

  • Un moteur de calcul Lindorm activé. Voir Activation du service

  • Un bucket OSS pour stocker les fichiers de votre projet Python, l'environnement d'exécution et le script de lancement

  • Un AccessKey ID et un AccessKey Secret disposant des autorisations de lecture et d'écriture sur le bucket OSS. Voir Création d'une paire de clés d'accès

  • Un environnement Linux (nécessaire pour l'empaquetage des fichiers binaires Python compatibles avec le moteur de calcul Lindorm)

Fonctionnement

Le flux de soumission des jobs Spark Python comporte quatre étapes :

  1. Définir le job — structurez votre projet Python avec les fichiers de point d'entrée requis.

  2. Empaqueter le job — regroupez séparément le code de votre projet et l'environnement d'exécution Python.

  3. Charger les fichiers — stockez tous les artefacts dans OSS.

  4. Soumettre le job — exécutez le job depuis la console Lindorm ou Data Management Service (DMS).

Étape 1 : Définir le job

Téléchargez le package d'exemple de job Spark et extrayez-le. Le dossier extrait est nommé lindorm-spark-examples. Consultez le répertoire lindorm-spark-examples/python pour obtenir un exemple de structure de projet.

La racine de votre projet (your_project dans l'exemple) nécessite trois modifications structurelles avant sa soumission.

1. Ajouter __init__.py

Créez un fichier vide __init__.py dans le répertoire your_project. Cette opération transforme le répertoire en module Python importable par launcher.py.

2. Préparer main.py

Ouvrez your_project/main.py et apportez les deux modifications suivantes :

Ajoutez le répertoire du projet à sys.path afin que les imports soient résolus correctement au moment de l'exécution :

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

Enveloppez votre logique d'entrée dans une fonction main(argv) :

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

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

Pour un exemple fonctionnel, le code suivant initialise une 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. Créer launcher.py

Dans le répertoire racine your_project, créez un fichier nommé launcher.py. Copiez le contenu depuis lindorm-spark-examples/python/launcher.py. Ce fichier constitue le point d'entrée appelé par le moteur de calcul Lindorm ; il ajoute le répertoire du projet à sys.path et appelle votre fonction main(argv).

Étape 2 : Empaqueter le job

L'empaquetage produit deux artefacts distincts : un fichier .zip (ou .egg) contenant le code de votre projet, et un fichier tar contenant l'environnement d'exécution Python.

Empaqueter le code du projet

Compressez your_project dans un fichier .zip :

zip -r your_project.zip your_project

Vous pouvez également créer un fichier .egg. Voir Building Eggs.

Empaqueter l'environnement d'exécution Python

Utilisez Conda ou Virtualenv pour empaqueter l'environnement d'exécution Python et les bibliothèques tierces dans un fichier tar, puis transmettez-le via le paramètre spark.archives.

Outil Cas d'utilisation
Conda À utiliser lorsque votre job requiert une version spécifique de Python ou doit s'exécuter sur des nœuds où Python n'est pas préinstallé. Conda inclut l'interpréteur Python dans le fichier tar.
Virtualenv À utiliser lorsque la version de Python sur les nœuds du cluster correspond déjà à celle de votre projet. Virtualenv n'inclut pas l'interpréteur ; il s'appuie sur l'installation Python existante du nœud.
Important

Exécutez l'étape d'empaquetage sous Linux. Le moteur de calcul Lindorm requiert des fichiers binaires Python compilés pour Linux.

Exemple : utilisation 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

Pour d'autres options d'empaquetage, consultez Python Package Management.

Étape 3 : Charger les fichiers dans OSS

Chargez les trois artefacts dans votre bucket OSS. Voir Chargement simple.

  • launcher.py — le point d'entrée créé à l'étape 1

  • your_project.zip (ou .egg) — le package de code du projet issu de l'étape 2

  • pyspark_conda_env.tar.gz — l'environnement d'exécution Python issu de l'étape 2

Étape 4 : Soumettre le job

Le moteur de calcul Lindorm prend en charge deux méthodes de soumission :

Quelle que soit la méthode, configurez les paramètres suivants dans le champ configs de votre demande de soumission de job.

Paramètres de l'environnement d'exécution

Définissez ces trois paramètres pour orienter le job vers vos artefacts OSS :

Paramètre Description Exemple
spark.submit.pyFiles Chemin vers le fichier .zip, .egg ou .py du projet dans OSS oss://testBucketName/your_project.zip
spark.archives Chemin vers le fichier tar de l'environnement d'exécution Python. Utilisez # pour spécifier le nom du répertoire cible. oss://testBucketName/pyspark_conda_env.tar.gz#environment
spark.kubernetes.driverEnv.PYSPARK_PYTHON Chemin vers l'exécutable Python dans le fichier tar extrait ./environment/bin/python

Paramètres d'accès à OSS

Définissez ces paramètres pour permettre au moteur de calcul de lire vos fichiers depuis OSS :

Paramètre Description Exemple
spark.hadoop.fs.oss.endpoint Endpoint du bucket OSS stockant vos fichiers 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 Classe utilisée pour accéder à OSS org.apache.hadoop.fs.aliyun.oss.AliyunOSSFileSystem

Pour plus d'informations sur les autres paramètres OSS-on-Hadoop, consultez la documentation Hadoop-Aliyun.

Exemple : valeur configs assemblée

L'exemple ci-dessous combine tous les paramètres de l'environnement d'exécution et d'accès à OSS dans un seul objet 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"
}

Remplacez <your-access-key-id> et <your-access-key-secret> par vos identifiants AccessKey réels.

Diagnostic des jobs

Après avoir soumis le job, consultez son statut et l'adresse de l'interface utilisateur Spark sur la page Jobs. Voir Affichage d'un job.

En cas d'échec de la soumission, ouvrez un ticket et fournissez l'ID du job ainsi que l'adresse de l'interface utilisateur Spark à l'équipe d'assistance.

Étapes suivantes