Bu konu, AnalyticDB for MySQL Spark Python işlerinin nasıl geliştirileceğini açıklar ve bir cloud ortamı oluşturma yöntemi sunar.
Önkoşullar
Bir AnalyticDB for MySQL Enterprise Edition, Basic Edition veya Data Lakehouse Edition kümesi oluşturulmuştur.
AnalyticDB for MySQL kümesiyle aynı bölgede bir Object Storage Service (OSS) paketi oluşturulmuştur.
-
AnalyticDB for MySQL kümesi için bir veritabanı hesabı oluşturulmuştur.
Bir Alibaba Cloud hesabı kullanıyorsanız, yalnızca ayrıcalıklı bir hesap oluşturmanız gerekir.
Bir Resource Access Management (RAM) kullanıcısı kullanıyorsanız, bir ayrıcalıklı hesap ve bir standart hesap oluşturmanız ve standart hesabı RAM kullanıcısı ile ilişkilendirmeniz gerekir.
Temel PySpark kullanımı
-
Aşağıdaki örnek kodu yazın ve example.py olarak kaydedin.
from pyspark.sql import SparkSession if __name__ == "__main__": spark = SparkSession.builder.getOrCreate() df = spark.sql("SELECT 1+1") df.printSchema() df.show() example.py dosyasını OSS'e yükleyin. Daha fazla bilgi için bkz. Dosya yükleme.
-
Spark geliştirme düzenleyicisine gidin.
AnalyticDB for MySQL konsolu üzerinde oturum açın. Konsolun sol üst köşesinde bir bölge seçin. Sol gezinme bölmesinde Clusters öğesine tıklayın. Yönetmek istediğiniz kümeyi bulun ve küme kimliğine tıklayın.
Sol gezinme bölmesinde seçeneğini belirleyin.
Düzenleyici penceresinin üst kısmında bir iş kaynak grubu ve bir Spark iş türü seçin. Bu konuda Batch türü örnek olarak kullanılmıştır.
-
Düzenleyiciye aşağıdaki iş yapılandırmasını girin.
{ "name": "Spark Python Test", "file": "oss://testBucketName/example.py", "conf": { "spark.driver.resourceSpec": "small", "spark.executor.instances": 1, "spark.executor.resourceSpec": "small" } }Parametre ayrıntıları için bkz. Parametre açıklaması.
Python bağımlılıklarını kullanma
Bu konu, yerel paketleme gerektirmeden cloud tabanlı bir ortam oluşturmak için iki çözüm sunar.
Çözüm türü | Kullanım durumları | Artılar ve eksiler |
gerçek zamanlı kurulum |
| Artılar: Yapılandırması basittir ve kullanıma hazırdır. Eksiler: Bağımlılıklar, iş her çalıştırıldığında yeniden indirilir ve kurulur. |
cloud derleme |
| Artılar: Bir kez paketleyin, süresiz olarak yeniden kullanın. Hızlı başlatma ve yüksek kararlılık sağlar. Eksiler: Bağımlılıkları paketlemek için ek bir iş gerektirir. |
Önkoşullar
Cloud ortamını yapılandırmadan önce aşağıdaki gereksinimlerin karşılandığından emin olun:
Küme Durumu: Küme başlatılmıştır ve temel Spark Pi örneğini başarıyla çalıştırabilir.
-
Sürüm Gereksinimleri:
Spark sürümü: 3.5.1 desteklenir.
Python sürümü: 3,9 veya 3,11 desteklenir.
-
Anahtar Kısıtlama (NumPy sürümü):
Apache Spark, numpy < 2.0.0 olan bir ortamda çalışmalıdır.
Sistem, numpy==1.26.0 kurulumunu zorunlu kılar.
Önemli: Pandas ve SciPy gibi kurduğunuz diğer bağımlılıkların NumPy 1.26.0 ile uyumlu olduğundan emin olun. Aksi takdirde iş başarısız olur.
Örnekler
Gerçek zamanlı kurulum
-
Uygulama kodunuzu hazırlayın
Bir Python betiği yazın (örneğin,
job.py) ve bunu oss://your-bucket/scripts/job.py gibi bir OSS yoluna yükleyin.# 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) -
İş parametrelerini yapılandırın
## 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 --- } }ÖnemliSpark, bir Driver (kontrol düğümü) ve Yürütücülerden (execution nodes) oluşur. Tutarlı bir ortam sağlamak için her ikisi için de aynı ortam değişkenlerini yapılandırmanız gerekir .
Parametre
Açıklama
Gerekli
Varsayılan
Notlar
spark.kubernetes.driverEnv.PYTHON_MODULES
Kurulacak Python paketlerinin listesi.
Evet
Yok
Birden çok Python bağımlılığını virgülle (,) ayırın.
Python bağımlılıklarının biçimi,
PyPItopluluğunun gereksinimleriyle tamamen uyumlu olmalıdır.Sürüm kısıtlaması olmayan Python bağımlılıkları listenin sonunda yer almalıdır.
Örnek:
chinesecalendar>=1.10.0,dynaconf>=3.2.10,pandas>=1.5.3,lunar_pythonspark.executorEnv.PYTHON_MODULES
spark.kubernetes.driverEnv.PYTHON_BIN
İş için kullanılacak Python sürümü.
Hayır
python3.11
Geçerli değerler:
python3.11
python3.9
spark.executorEnv.PYTHON_BIN
spark.kubernetes.driverEnv.INDEX_URL
PyPIdeposunun URL'si.Hayır
http://mirrors.cloud.aliyuncs.com/pypi/simple/
Varsayılan değer, dahili ağ üzerinden erişilebilen Alibaba Cloud içinde barındırılan bir yansıtmanın URL'sidir. Yalnızca genel ağ üzerinden erişilebilen bir adres belirtirseniz (örneğin Tsinghua Üniversitesi'ndeki PyPI yansıtması), genel ağ erişimini etkinleştirmeniz gerekir. Daha fazla bilgi için bkz. Spark uygulaması için genel ağ erişimini yapılandırma.
spark.executorEnv.INDEX_URL
spark.kubernetes.driverEnv.TRUSTED_HOST
Güvenilir ana bilgisayar olarak eklenecek
PyPIdeposunun etki alanı.Hayır
mirrors.cloud.aliyuncs.com
Python, kurulum sırasında PyPI deposunun SSL sertifikasını doğrular. Depo sertifikası güvenilir bir sertifika yetkilisinden (CA) değilse, bu parametreyi kullanarak depo etki alanını güvenilir ana bilgisayar olarak işaretleyin.
ÖnemliBu parametreyi dikkatli kullanın. Bağımlılık karıştırma saldırıları yaygın bir tehdit olduğundan yapılandırılan PyPI kaynağının güvenilir olduğundan emin olun.
spark.executorEnv.TRUSTED_HOST
-
Örnek işi çalıştırın. Günlüğü görüntüleyerek Python ortamının bildirilen bağımlılıkları ve bunların geçişli bağımlılıklarını içerdiğini görebilirsiniz.
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
Cloud derleme
Bu çözüm, bağımlılıkları sıkıştırılmış bir arşivde paketlemek için özel bir iş kullanır; bu arşiv daha sonra sonraki işlerde yeniden kullanılmak üzere OSS'e yüklenir.
-
Bir OSS yolu planlayın
Paketlenmiş ortamı depolamak için bir OSS yolu belirtin, örneğin
oss://your-bucket/envs/my_custom_env. -
Bir paketleme işi gönderin
ÖnemliYerleşik paketleme betiğinin yolunu değiştirmeyin:
local:///opt/tools/build_venv.py.argsiçinde kurulacak bağımlılıkları belirtin.
## 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" } }Parametre
Açıklama
Gerekli
Varsayılan
Notlar
spark.kubernetes.driverEnv.VENV_OSS_PATH
Ortam paketinin depolama yolu.
Evet
Yok
Örnek:
oss://your-bucket/envs/my_custom_env.spark.kubernetes.driverEnv.VENV_DIR
Geçici derleme dizini.
Hayır
/tmp/venv
Ortam paketi büyükse bir veri diski bağlayın ve bu yolu
/user_data_dirolarak değiştirin.spark.kubernetes.driverEnv.PYTHON_BIN
İş için kullanılacak Python sürümü.
Hayır
python3.11
Geçerli değerler:
python3.11
python3.9
spark.kubernetes.driverEnv.INDEX_URL
PyPIdeposunun URL'si.Hayır
http://mirrors.cloud.aliyuncs.com/pypi/simple/
Varsayılan değer, dahili ağ üzerinden erişilebilen Alibaba Cloud içinde barındırılan bir yansıtmanın URL'sidir. Yalnızca genel ağ üzerinden erişilebilen bir adres belirtirseniz (örneğin Tsinghua Üniversitesi'ndeki PyPI yansıtması), genel ağ erişimini etkinleştirmeniz gerekir. Daha fazla bilgi için bkz. Spark uygulaması için genel ağ erişimini yapılandırma.
spark.kubernetes.driverEnv.TRUSTED_HOST
Güvenilir ana bilgisayar olarak eklenecek
PyPIdeposunun etki alanı.Hayır
mirrors.cloud.aliyuncs.com
Python, kurulum sırasında PyPI deposunun SSL sertifikasını doğrular. Depo sertifikası güvenilir bir sertifika yetkilisinden (CA) değilse, bu parametreyi kullanarak depo etki alanını güvenilir ana bilgisayar olarak işaretleyin.
ÖnemliBu parametreyi dikkatli kullanın. Bağımlılık karıştırma saldırıları yaygın bir tehdit olduğundan yapılandırılan PyPI kaynağının güvenilir olduğundan emin olun.
-
İşi çalıştırın
Günlükler, arşiv yükleme ayrıntılarını ve sanal ortamda kurulan paketlerin tam listesini ile sürümlerini gösterir.
------------------ -------------- 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 -
Ortam paketini kullanın
Sonraki PySpark işleri için
oss://your-bucket/envs/my_custom_enviçindeki arşive başvurabilirsiniz.Paketlenmiş ortamı kullanmak için iş yapılandırmanızda
archivesparametresini ayarlayın.UyarıBu yapılandırma yalnızca Spark 3.5 ve sonraki sürümlerde desteklenir.
## 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" } }
Sorun giderme
-
ModuleNotFoundError:
Bağımlılıkların hem
driverEnvhem deexecutorEnviçin yapılandırıldığını doğrulayın.Paket adlarının doğru yazıldığını ve PyPI'deki adlarla eşleştiğini doğrulayın.
-
NumPy ile ilgili hatalar:
Bağımlılıklarınızın numpy >= 2.0.0 gerektirip gerektirmediğini kontrol edin. Gerektiriyorsa, bağımlılık sürümlerinizi numpy 1.26.0 ile uyumlu olacak şekilde düşürün.
-
İndirme zaman aşımları:
Varsayılan dahili ağ yansıtmasını kullanırken zaman aşımları devam ederse, genel bir yansıtma belirttiyseniz işiniz için genel ağ erişiminin etkinleştirildiğini doğrulayın.