All Products
Search
Document Center

AnalyticDB:Kembangkan aplikasi Spark dengan PySpark

Last Updated:Jun 22, 2026

Artikel ini menjelaskan cara mengembangkan pekerjaan Python Spark pada AnalyticDB for MySQL dan menyediakan metode untuk membangun lingkungan berbasis cloud.

Prasyarat

Penggunaan dasar PySpark

  1. Tulis kode contoh berikut dan simpan sebagai example.py.

    from pyspark.sql import SparkSession
    if __name__ == "__main__":
        spark = SparkSession.builder.getOrCreate()
        df = spark.sql("SELECT 1+1")
        df.printSchema()
        df.show()
    
  2. Unggah file example.py ke OSS. Untuk informasi selengkapnya, lihat Upload a file.

  3. Buka editor pengembangan Spark.

    1. Login ke Konsol AnalyticDB for MySQL. Di pojok kiri atas konsol, pilih wilayah. Di panel navigasi sebelah kiri, klik Clusters. Temukan kluster yang ingin Anda kelola dan klik ID kluster tersebut.

    2. Di panel navigasi sebelah kiri, pilih Job Development > Spark JAR Development.

  4. Di bagian atas jendela editor, pilih kelompok sumber daya pekerjaan dan jenis pekerjaan Spark. Topik ini menggunakan tipe Batch sebagai contoh.

  5. Masukkan konfigurasi pekerjaan berikut di editor.

    {
     "name": "Spark Python Test",
     "file": "oss://testBucketName/example.py",
     "conf": {
     "spark.driver.resourceSpec": "small",
     "spark.executor.instances": 1,
     "spark.executor.resourceSpec": "small"
     }
    }

    Untuk detail parameter, lihat Deskripsi parameter.

Gunakan dependensi Python

Topik ini menyediakan dua solusi untuk membangun lingkungan berbasis cloud tanpa memerlukan pengemasan lokal.

Jenis Solusi

Kasus Penggunaan

Kelebihan dan Kekurangan

real-time installation

  • Debugging dan pekerjaan temporary.

  • Dependensi sedikit dan unduhan cepat.

Kelebihan: Konfigurasi sederhana dan siap digunakan.

Kekurangan: Dependensi diunduh dan diinstal ulang setiap kali pekerjaan dijalankan.

cloud build

  • Lingkungan produksi.

  • Banyak atau besar dependensinya.

  • Lingkungan yang memerlukan penggunaan ulang jangka panjang.

Kelebihan: Paket sekali, gunakan berulang kali. Menjamin startup cepat dan stabilitas tinggi.

Kekurangan: Memerlukan pekerjaan tambahan untuk mengemas dependensi.

Prasyarat

Sebelum mengonfigurasi lingkungan cloud, pastikan persyaratan berikut terpenuhi:

  1. Status Kluster: Kluster telah diinisialisasi dan dapat menjalankan contoh Spark Pi dasar dengan sukses.

  2. Persyaratan Versi:

    • Versi Spark: 3.5.1 didukung.

    • Versi Python: 3.9 atau 3.11 didukung.

  3. Batasan Penting (versi NumPy):

    • Apache Spark harus dijalankan di lingkungan dengan numpy < 2.0.0.

    • Sistem menerapkan instalasi numpy==1.26.0.

    • Penting: Pastikan dependensi lain yang Anda instal, seperti Pandas dan SciPy, kompatibel dengan NumPy 1.26.0. Jika tidak, pekerjaan akan gagal.

Contoh

Real-time installation

  1. Siapkan kode aplikasi Anda

    Tulis skrip Python, misalnya, job.py, dan unggah ke path OSS, seperti oss://your-bucket/scripts/job.py.

    # Skrip contoh ini mencetak semua dependensi di lingkungan Python saat ini.
    # Cetak semua modul di lingkungan Python
    import pkgutil
    if __name__ == "__main__":
        for module_info in pkgutil.iter_modules():
            print(module_info.name)
  2. Konfigurasikan parameter pekerjaan

    ## Contoh pekerjaan
    {
        "file": "oss://your-bucket/scripts/job.py",  // Path ke file kode Anda
        "name": "Real-time Env Demo",
        "conf": {
            "spark.adb.version": "3.5",
            "spark.driver.resourceSpec": "medium",
            "spark.executor.instances": 1,
            "spark.executor.resourceSpec": "medium",
            // --- Mulai konfigurasi inti ---
            // 1. Tentukan versi Python
            "spark.kubernetes.driverEnv.PYTHON_BIN": "python3.11",
            "spark.executorEnv.PYTHON_BIN": "python3.11",
            // 2. Tentukan dependensi yang akan diinstal (untuk Driver dan 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"
            // --- Akhir konfigurasi inti ---
        }
    }
    Penting

    Spark terdiri dari Driver (node kontrol) dan Executors (node eksekusi). Untuk memastikan lingkungan yang konsisten, Anda harus mengonfigurasi variabel lingkungan yang sama untuk keduanya.

    Parameter

    Deskripsi

    Wajib

    Bawaan

    Catatan

    spark.kubernetes.driverEnv.PYTHON_MODULES

    Daftar paket Python yang akan diinstal.

    Ya

    Tidak ada

    • Pisahkan beberapa dependensi Python dengan koma (,).

    • Format dependensi Python harus sepenuhnya mematuhi persyaratan komunitas PyPI.

    • Dependensi Python tanpa batasan versi harus ditempatkan di akhir daftar.

    Contoh: chinesecalendar>=1.10.0,dynaconf>=3.2.10,pandas>=1.5.3,lunar_python

    spark.executorEnv.PYTHON_MODULES

    spark.kubernetes.driverEnv.PYTHON_BIN

    Versi Python yang digunakan untuk pekerjaan.

    Tidak

    python3.11

    Nilai yang valid:

    • python3.11

    • python3.9

    spark.executorEnv.PYTHON_BIN

    spark.kubernetes.driverEnv.INDEX_URL

    URL repositori PyPI.

    Tidak

    http://mirrors.cloud.aliyuncs.com/pypi/simple/

    Nilai bawaan adalah URL mirror yang di-host di dalam Alibaba Cloud, yang dapat diakses melalui jaringan internal. Jika Anda menentukan alamat yang hanya dapat diakses melalui jaringan publik, seperti mirror PyPI dari Universitas Tsinghua, Anda harus mengaktifkan akses jaringan publik. Untuk informasi selengkapnya, lihat Configure public network access for a Spark application.

    spark.executorEnv.INDEX_URL

    spark.kubernetes.driverEnv.TRUSTED_HOST

    Domain repositori PyPI yang akan ditambahkan sebagai host tepercaya.

    Tidak

    mirrors.cloud.aliyuncs.com

    Python memverifikasi sertifikat SSL repositori PyPI selama instalasi. Jika sertifikat repositori bukan dari otoritas sertifikat (CA) tepercaya, gunakan parameter ini untuk menandai domain repositori sebagai host tepercaya.

    Penting

    Gunakan parameter ini dengan hati-hati. Pastikan sumber PyPI yang dikonfigurasi dapat dipercaya, karena serangan dependency confusion merupakan ancaman umum.

    spark.executorEnv.TRUSTED_HOST

  3. Jalankan pekerjaan contoh. Anda dapat melihat log untuk memastikan lingkungan Python berisi dependensi yang dideklarasikan beserta dependensi transitifnya.

    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 build

Solusi ini menggunakan pekerjaan khusus untuk mengemas dependensi ke dalam arsip terkompresi, yang kemudian diunggah ke OSS untuk digunakan kembali pada pekerjaan berikutnya.

  1. Rencanakan jalur OSS

    Tentukan path OSS untuk menyimpan lingkungan yang telah dikemas, misalnya, oss://your-bucket/envs/my_custom_env.

  2. Kirim pekerjaan pengemasan

    Penting
    • Jangan mengubah path skrip pengemasan bawaan: local:///opt/tools/build_venv.py.

    • Di args, tentukan dependensi yang akan diinstal.

    ## Contoh pekerjaan
    {
        // 1. Tentukan semua dependensi yang akan dikemas.
        "args": [
            "chinesecalendar>=1.10.0",
            "pandas>=1.5.3",
            "pyarrow>=19.0.1",
            "lunar_python"
        ],
        // 2. Panggil skrip pengemasan bawaan (jangan ubah).
        "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. Tentukan versi Python.
            "spark.kubernetes.driverEnv.PYTHON_BIN": "python3.11",
            // 4. Tentukan path OSS untuk mengunggah lingkungan yang dikemas (sesuaikan jika perlu).
            "spark.kubernetes.driverEnv.VENV_OSS_PATH": "oss://your-bucket/envs/my_custom_env",
            // 5. Tentukan direktori sementara untuk proses build.
            "spark.kubernetes.driverEnv.VENV_DIR": "/tmp/build_test"
        }
    }

    Parameter

    Deskripsi

    Wajib

    Bawaan

    Catatan

    spark.kubernetes.driverEnv.VENV_OSS_PATH

    Path penyimpanan untuk paket lingkungan.

    Ya

    Tidak ada

    Contoh: oss://your-bucket/envs/my_custom_env.

    spark.kubernetes.driverEnv.VENV_DIR

    Direktori build sementara.

    Tidak

    /tmp/venv

    Jika paket lingkungan besar, pasang disk data dan ubah path ini menjadi /user_data_dir.

    spark.kubernetes.driverEnv.PYTHON_BIN

    Versi Python yang digunakan untuk pekerjaan.

    Tidak

    python3.11

    Nilai yang valid:

    • python3.11

    • python3.9

    spark.kubernetes.driverEnv.INDEX_URL

    URL repositori PyPI.

    Tidak

    http://mirrors.cloud.aliyuncs.com/pypi/simple/

    Nilai bawaan adalah URL mirror yang di-host di dalam Alibaba Cloud, yang dapat diakses melalui jaringan internal. Jika Anda menentukan alamat yang hanya dapat diakses melalui jaringan publik, seperti mirror PyPI dari Universitas Tsinghua, Anda harus mengaktifkan akses jaringan publik. Untuk informasi selengkapnya, lihat Configure public network access for a Spark application.

    spark.kubernetes.driverEnv.TRUSTED_HOST

    Domain repositori PyPI yang akan ditambahkan sebagai host tepercaya.

    Tidak

    mirrors.cloud.aliyuncs.com

    Python memverifikasi sertifikat SSL repositori PyPI selama instalasi. Jika sertifikat repositori bukan dari otoritas sertifikat (CA) tepercaya, gunakan parameter ini untuk menandai domain repositori sebagai host tepercaya.

    Penting

    Gunakan parameter ini dengan hati-hati. Pastikan sumber PyPI yang dikonfigurasi dapat dipercaya, karena serangan dependency confusion merupakan ancaman umum.

  3. Jalankan pekerjaan

    Log menampilkan detail unggahan arsip dan daftar lengkap paket beserta versinya yang diinstal di lingkungan virtual.

    ------------------ --------------
    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. Gunakan paket lingkungan

    Untuk pekerjaan PySpark berikutnya, Anda dapat mereferensikan arsip di oss://your-bucket/envs/my_custom_env.

    Untuk menggunakan lingkungan yang telah dikemas, atur parameter pyFiles dalam konfigurasi pekerjaan Anda.

    ## Contoh penggunaan
    {
     "name": "Spark Python",
     "file": "oss://testBucketName/example.py",
     "pyFiles": ["oss://your-bucket/envs/my_custom_env/venv_*****.tar.gz"],
     "args": [
     "oss://testBucketName/staff.csv"
     ],
     "conf": {
     "spark.driver.resourceSpec": "small",
     "spark.executor.instances": 2,
     "spark.executor.resourceSpec": "small"
     }
    }

Pemecahan Masalah

  1. ModuleNotFoundError:

    • Verifikasi bahwa dependensi telah dikonfigurasi untuk driverEnv dan executorEnv.

    • Verifikasi bahwa nama paket dieja dengan benar dan sesuai dengan nama di PyPI.

  2. Error terkait NumPy:

    Periksa apakah dependensi Anda memerlukan numpy >= 2.0.0. Jika iya, turunkan versi dependensi Anda agar kompatibel dengan numpy 1.26.0.

  3. Timeout unduhan:

    Jika timeout masih terjadi saat menggunakan mirror jaringan internal bawaan, verifikasi bahwa jika Anda telah menentukan mirror publik, Anda juga telah mengaktifkan akses jaringan publik untuk pekerjaan Anda.