All Products
Search
Document Center

AnalyticDB:Kembangkan aplikasi Spark dengan PySpark

Last Updated:Jul 16, 2026

Artikel ini menjelaskan cara mengembangkan job 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 example.py ke OSS. Untuk informasi selengkapnya, lihat Unggah 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 job dan jenis job Spark. Topik ini menggunakan tipe Batch sebagai contoh.

  5. Masukkan konfigurasi job 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

instalasi real-time

  • Debugging dan job temporary.

  • Dependensi sedikit dan unduhan cepat.

Kelebihan: Konfigurasi sederhana dan siap digunakan.

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

cloud build

  • Lingkungan produksi.

  • Banyak atau besar dependensi.

  • Lingkungan yang memerlukan penggunaan ulang jangka panjang.

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

Kekurangan: Memerlukan job 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, job akan gagal.

Contoh

Instalasi real-time

  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 job

    ## Contoh job
    {
        "file": "oss://your-bucket/scripts/job.py",  // Path ke file kode Anda
        "name": "Demo Env Real-time",
        "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

    Default

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

    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 default 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 Konfigurasikan akses jaringan publik untuk aplikasi Spark.

    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 berasal 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 job contoh. Anda dapat melihat log untuk memastikan bahwa 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 job khusus untuk mengemas dependensi ke dalam arsip terkompresi, yang kemudian diunggah ke OSS untuk digunakan kembali pada job berikutnya.

  1. Rencanakan jalur OSS

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

  2. Kirim job pengemasan

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

    • Di args, tentukan dependensi yang akan diinstal.

    ## Contoh job
    {
        // 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

    Default

    Catatan

    spark.kubernetes.driverEnv.VENV_OSS_PATH

    Path penyimpanan 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 data disk dan ubah path ini menjadi /user_data_dir.

    spark.kubernetes.driverEnv.PYTHON_BIN

    Versi Python yang digunakan untuk job.

    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 default 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 Konfigurasikan akses jaringan publik untuk aplikasi Spark.

    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 berasal 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 job

    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
    Mengunggah arsip ke 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
    Berhasil: Total jumlah: 1, ukuran: 115.655.687. OK jumlah: 1(mengunggah 1 file).
    0,788886(d) berlalu
    Unggahan selesai: oss://xxx/envs/my_custom_env/venv_20251225174458.tar.gz
  4. Gunakan paket lingkungan

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

    Untuk menggunakan lingkungan yang telah dikemas, atur parameter archives dalam konfigurasi job Anda.

    Peringatan

    Konfigurasi ini hanya didukung di Spark 3.5 dan versi lebih baru.

    ## Contoh penggunaan
    {
     "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"
     }
    }

Pemecahan Masalah

  1. ModuleNotFoundError:

    • Verifikasi bahwa dependensi dikonfigurasi untuk driverEnv dan executorEnv.

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

  2. kesalahan 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 default, verifikasi bahwa jika Anda telah menentukan mirror publik, Anda juga telah mengaktifkan akses jaringan publik untuk job Anda.