Tüm Ürünler
Search
Belge Merkezi

AnalyticDB:PySpark ile Spark uygulamaları geliştirin

Son Güncelleme:Oct 05, 2026

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

Temel PySpark kullanımı

  1. 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()
    
  2. example.py dosyasını OSS'e yükleyin. Daha fazla bilgi için bkz. Dosya yükleme.

  3. Spark geliştirme düzenleyicisine gidin.

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

    2. Sol gezinme bölmesinde Job Development > Spark JAR Development seçeneğini belirleyin.

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

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

  • Hata ayıklama ve geçici işler.

  • Az sayıda bağımlılık ve hızlı indirme.

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

  • Üretim ortamları.

  • Çok sayıda veya büyük bağımlılıklar.

  • Uzun süreli yeniden kullanım gerektiren ortamlar.

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:

  1. Küme Durumu: Küme başlatılmıştır ve temel Spark Pi örneğini başarıyla çalıştırabilir.

  2. Sürüm Gereksinimleri:

    • Spark sürümü: 3.5.1 desteklenir.

    • Python sürümü: 3,9 veya 3,11 desteklenir.

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

  1. 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)
  2. İş 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 ---
        }
    }
    Önemli

    Spark, 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, PyPI topluluğ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_python

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

    PyPI deposunun 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 PyPI deposunun 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.

    Önemli

    Bu 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

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

  1. Bir OSS yolu planlayın

    Paketlenmiş ortamı depolamak için bir OSS yolu belirtin, örneğin oss://your-bucket/envs/my_custom_env.

  2. Bir paketleme işi gönderin

    Önemli
    • Yerleşik paketleme betiğinin yolunu değiştirmeyin: local:///opt/tools/build_venv.py.

    • args iç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_dir olarak 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

    PyPI deposunun 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 PyPI deposunun 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.

    Önemli

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

  3. İş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
  4. Ortam paketini kullanın

    Sonraki PySpark işleri için oss://your-bucket/envs/my_custom_env içindeki arşive başvurabilirsiniz.

    Paketlenmiş ortamı kullanmak için iş yapılandırmanızda archives parametresini 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

  1. ModuleNotFoundError:

    • Bağımlılıkların hem driverEnv hem de executorEnv iç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.

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

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