Cette rubrique explique comment développer des jobs Python AnalyticDB for MySQL pour Spark et présente une méthode pour configurer un environnement cloud.
Prérequis
Vous avez créé un cluster AnalyticDB for MySQL Enterprise Edition, Basic Edition ou Data Lakehouse Edition.
Vous avez créé un bucket Object Storage Service (OSS) dans la même région que le cluster AnalyticDB for MySQL.
Créez un groupe de ressources de job pour le cluster AnalyticDB for MySQL Enterprise Edition, Basic Edition ou Data Lakehouse Edition.
-
Vous avez créé un compte de base de données pour le cluster AnalyticDB for MySQL.
Si vous utilisez un compte Alibaba Cloud, il vous suffit de créer un compte privilégié.
Si vous utilisez un utilisateur Resource Access Management (RAM), vous devez créer un compte privilégié et un compte standard puis associer le compte standard à l'utilisateur RAM.
Utilisation de base de PySpark
-
Rédigez l'exemple de code suivant et enregistrez-le sous le nom example.py.
from pyspark.sql import SparkSession if __name__ == "__main__": spark = SparkSession.builder.getOrCreate() df = spark.sql("SELECT 1+1") df.printSchema() df.show() Téléchargez example.py vers OSS. Pour plus d'informations, consultez la section Télécharger un fichier.
-
Accédez à l'éditeur de développement Spark.
Connectez-vous à la console AnalyticDB for MySQL. Dans l'angle supérieur gauche de la console, sélectionnez une région. Dans le volet de navigation de gauche, cliquez sur Clusters. Localisez le cluster à gérer et cliquez sur son ID.
Dans le volet de navigation de gauche, choisissez .
En haut de la fenêtre de l'éditeur, sélectionnez un groupe de ressources de job et un type de job Spark. Cette rubrique utilise le type Batch comme exemple.
-
Saisissez la configuration de job suivante dans l'éditeur.
{ "name": "Spark Python Test", "file": "oss://testBucketName/example.py", "conf": { "spark.driver.resourceSpec": "small", "spark.executor.instances": 1, "spark.executor.resourceSpec": "small" } }Pour obtenir des détails sur les paramètres, consultez la section Description des paramètres.
Utiliser des dépendances Python
Cette rubrique présente deux solutions pour configurer un environnement basé sur le cloud sans nécessiter d'empaquetage local.
Type de solution | Cas d'utilisation | Avantages et inconvénients |
installation en temps réel |
| Avantages : Configuration simple et prête à l'emploi. Inconvénients : Les dépendances sont retéléchargées et réinstallées à chaque exécution du job. |
construction cloud |
| Avantages : Empaquetez une fois, réutilisez indéfiniment. Garantit un démarrage rapide et une grande stabilité. Inconvénients : Nécessite un job supplémentaire pour empaqueter les dépendances. |
Prérequis
Avant de configurer l'environnement cloud, assurez-vous que les conditions suivantes sont remplies :
État du cluster : Le cluster est initialisé et peut exécuter avec succès l'exemple de base Spark Pi.
-
Exigences de version :
Version Spark : La version 3.5.1 est prise en charge.
Version Python : Les versions 3,9 ou 3,11 sont prises en charge.
-
Contrainte clé (version NumPy) :
Apache Spark doit s'exécuter dans un environnement avec numpy < 2.0.0.
Le système impose l'installation de numpy==1.26.0.
Important : Assurez-vous que les autres dépendances installées, telles que Pandas et SciPy, sont compatibles avec NumPy 1.26.0. Sinon, le job échouera.
Exemples
Installation en temps réel
-
Préparez votre code d'application
Rédigez un script Python, par exemple
job.py, et téléchargez-le vers un chemin OSS, tel que oss://your-bucket/scripts/job.py.# This sample script prints all dependencies in the current Python environment. # Print all modules in the Python environment import pkgutil if __name__ == "__main__": for module_info in pkgutil.iter_modules(): print(module_info.name) -
Configurez les paramètres du job
## Sample job { "file": "oss://your-bucket/scripts/job.py", // Path to your code file "name": "Real-time Env Demo", "conf": { "spark.adb.version": "3.5", "spark.driver.resourceSpec": "medium", "spark.executor.instances": 1, "spark.executor.resourceSpec": "medium", // --- Start of core configuration --- // 1. Specify the Python version "spark.kubernetes.driverEnv.PYTHON_BIN": "python3.11", "spark.executorEnv.PYTHON_BIN": "python3.11", // 2. Specify the dependencies to install (for both Driver and Executor) "spark.kubernetes.driverEnv.PYTHON_MODULES": "chinesecalendar>=1.10.0,pandas>=1.5.3,lunar_python", "spark.executorEnv.PYTHON_MODULES": "chinesecalendar>=1.10.0,pandas>=1.5.3,lunar_python" // --- End of core configuration --- } }ImportantSpark se compose d'un Driver (nœud de contrôle) et d'Executors (nœuds d'exécution). Pour garantir un environnement cohérent, vous devez configurer les mêmes variables d'environnement pour les deux composants.
Paramètre
Description
Obligatoire
Valeur par défaut
Notes
spark.kubernetes.driverEnv.PYTHON_MODULES
Liste des packages Python à installer.
Oui
Aucune
Séparez plusieurs dépendances Python par des virgules (,).
Le format des dépendances Python doit être entièrement conforme aux exigences de la communauté
PyPI.Les dépendances Python sans contrainte de version doivent être placées à la fin de la liste.
Exemple :
chinesecalendar>=1.10.0,dynaconf>=3.2.10,pandas>=1.5.3,lunar_pythonspark.executorEnv.PYTHON_MODULES
spark.kubernetes.driverEnv.PYTHON_BIN
Version Python à utiliser pour le job.
Non
python3.11
Valeurs valides :
python3.11
python3.9
spark.executorEnv.PYTHON_BIN
spark.kubernetes.driverEnv.INDEX_URL
URL du dépôt
PyPI.Non
http://mirrors.cloud.aliyuncs.com/pypi/simple/
La valeur par défaut est l'URL d'un miroir hébergé au sein d'Alibaba Cloud, accessible via le réseau interne. Si vous spécifiez une adresse accessible uniquement via le réseau public, telle que le miroir PyPI de l'Université Tsinghua, vous devez activer l'accès au réseau public. Pour plus d'informations, consultez la section Configurer l'accès au réseau public pour une application Spark.
spark.executorEnv.INDEX_URL
spark.kubernetes.driverEnv.TRUSTED_HOST
Domaine du dépôt
PyPIà ajouter en tant qu'hôte de confiance.Non
mirrors.cloud.aliyuncs.com
Python vérifie le certificat SSL du dépôt PyPI lors de l'installation. Si le certificat du dépôt ne provient pas d'une autorité de certification (CA) de confiance, utilisez ce paramètre pour marquer le domaine du dépôt comme hôte de confiance.
ImportantUtilisez ce paramètre avec prudence. Assurez-vous que la source PyPI configurée est fiable, car les attaques par confusion de dépendances constituent une menace courante.
spark.executorEnv.TRUSTED_HOST
-
Exécutez l'exemple de job. Consultez le journal pour vérifier que l'environnement Python contient les dépendances déclarées ainsi que leurs dépendances transitives.
xxlimited_35 zlib numpy pandas _distutils_hack _virtualenv chinese_calendar dateutil lunar_python pip pkg_resources pytz setuptools six tzdata wheel >>>>>>>> stderr: 25/12/25 17:01:56 INFO ShutdownHookManager: Shutdown hook called
Construction cloud
Cette solution utilise un job dédié pour empaqueter les dépendances dans une archive compressée, qui est ensuite téléchargée vers OSS pour une réutilisation dans les jobs suivants.
-
Planifiez un chemin OSS
Spécifiez un chemin OSS pour stocker l'environnement empaqueté, par exemple
oss://your-bucket/envs/my_custom_env. -
Soumettez un job d'empaquetage
ImportantNe modifiez pas le chemin du script d'empaquetage intégré :
local:///opt/tools/build_venv.py.Dans
args, spécifiez les dépendances à installer.
## Sample job { // 1. Specify all dependencies to be packaged. "args": [ "chinesecalendar>=1.10.0", "pandas>=1.5.3", "pyarrow>=19.0.1", "lunar_python" ], // 2. Call the built-in packaging script (do not modify). "file": "local:///opt/tools/build_venv.py", "name": "Build VirtualEnv Job", "conf": { "spark.driver.resourceSpec": "medium", "spark.executor.instances": 1, "spark.executor.resourceSpec": "medium", // 3. Specify the Python version. "spark.kubernetes.driverEnv.PYTHON_BIN": "python3.11", // 4. Specify the OSS path to upload the packaged environment (modify as needed). "spark.kubernetes.driverEnv.VENV_OSS_PATH": "oss://your-bucket/envs/my_custom_env", // 5. Specify the temporary directory for the build. "spark.kubernetes.driverEnv.VENV_DIR": "/tmp/build_test" } }Paramètre
Description
Obligatoire
Valeur par défaut
Notes
spark.kubernetes.driverEnv.VENV_OSS_PATH
Chemin de stockage du package d'environnement.
Oui
Aucune
Exemple :
oss://your-bucket/envs/my_custom_env.spark.kubernetes.driverEnv.VENV_DIR
Répertoire de construction temporaire.
Non
/tmp/venv
Si le package d'environnement est volumineux, montez un disque de données et remplacez ce chemin par
/user_data_dir.spark.kubernetes.driverEnv.PYTHON_BIN
Version Python à utiliser pour le job.
Non
python3.11
Valeurs valides :
python3.11
python3.9
spark.kubernetes.driverEnv.INDEX_URL
URL du dépôt
PyPI.Non
http://mirrors.cloud.aliyuncs.com/pypi/simple/
La valeur par défaut est l'URL d'un miroir hébergé au sein d'Alibaba Cloud, accessible via le réseau interne. Si vous spécifiez une adresse accessible uniquement via le réseau public, telle que le miroir PyPI de l'Université Tsinghua, vous devez activer l'accès au réseau public. Pour plus d'informations, consultez la section Configurer l'accès au réseau public pour une application Spark.
spark.kubernetes.driverEnv.TRUSTED_HOST
Domaine du dépôt
PyPIà ajouter en tant qu'hôte de confiance.Non
mirrors.cloud.aliyuncs.com
Python vérifie le certificat SSL du dépôt PyPI lors de l'installation. Si le certificat du dépôt ne provient pas d'une autorité de certification (CA) de confiance, utilisez ce paramètre pour marquer le domaine du dépôt comme hôte de confiance.
ImportantUtilisez ce paramètre avec prudence. Assurez-vous que la source PyPI configurée est fiable, car les attaques par confusion de dépendances constituent une menace courante.
-
Exécutez le job
Les journaux affichent les détails du téléchargement de l'archive ainsi qu'une liste complète des packages et de leurs versions installés dans l'environnement virtuel.
------------------ -------------- chinesecalendar 1.11.0 lunar_python 1.4.8 numpy 1.26.0 pandas 2.3.3 pip 24.2 pyarrow 22.0.0 python-dateutil 2.9.0.post0 pytz 2025.2 setuptools 75.1.0 six 1.17.0 tzdata 2025.3 wheel 0.44.0 Uploading archive to oss://xxx/envs/my_custom_env/venv_20251225174458.tar.gz + ossutil cp /tmp/venv_20251225174458.tar.gz xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx Succeed: Total num: 1, size: 115,655,687. OK num: 1(upload 1 files). 0.788886(s) elapsed Upload completed: oss://xxx/envs/my_custom_env/venv_20251225174458.tar.gz -
Utilisez le package d'environnement
Pour les jobs PySpark suivants, vous pouvez référencer l'archive située dans
oss://your-bucket/envs/my_custom_env.Pour utiliser l'environnement empaqueté, définissez le paramètre
archivesdans la configuration de votre job.AvertissementCette configuration est prise en charge uniquement dans Spark 3.5 et versions ultérieures.
## Sample usage { "name": "Spark Python", "file": "oss://testBucketName/example.py", "archives": ["oss://your-bucket/envs/my_custom_env/venv_*****.tar.gz#PY3"], "args": [ "oss://testBucketName/staff.csv" ], "conf": { "spark.driver.resourceSpec": "small", "spark.executor.instances": 2, "spark.executor.resourceSpec": "small", "spark.pyspark.python": "./PY3/venv/bin/python3" } }
Dépannage
-
ModuleNotFoundError :
Vérifiez que les dépendances sont configurées pour
driverEnvetexecutorEnv.Assurez-vous que les noms des packages sont correctement orthographiés et correspondent aux noms sur PyPI.
-
Erreurs liées à NumPy :
Vérifiez si vos dépendances requièrent numpy >= 2.0.0. Si c'est le cas, rétrogradez les versions de vos dépendances pour les rendre compatibles avec numpy 1.26.0.
-
Délais d'expiration du téléchargement :
Si des délais d'expiration se produisent toujours lors de l'utilisation du miroir de réseau interne par défaut, vérifiez que vous avez activé l'accès au réseau public pour votre job si vous avez spécifié un miroir public.