Artikel ini menjelaskan cara mengembangkan job Python Spark pada AnalyticDB for MySQL dan menyediakan metode untuk membangun lingkungan berbasis cloud.
Prasyarat
Kluster AnalyticDB for MySQL Edisi Perusahaan, Edisi Dasar, atau Edisi Data Lakehouse telah dibuat.
Bucket Object Storage Service (OSS) telah dibuat di wilayah yang sama dengan kluster AnalyticDB for MySQL.
Kelompok sumber daya job telah dibuat untuk kluster AnalyticDB for MySQL Edisi Perusahaan, Edisi Dasar, atau Edisi Data Lakehouse.
Akun database telah dibuat untuk kluster AnalyticDB for MySQL.
Jika Anda menggunakan Akun Alibaba Cloud, Anda hanya perlu membuat akun istimewa.
Jika Anda menggunakan Pengguna Resource Access Management (RAM), Anda harus membuat akun istimewa dan akun standar serta mengaitkan akun standar tersebut dengan Pengguna RAM.
Penggunaan dasar PySpark
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()Unggah
example.pyke OSS. Untuk informasi selengkapnya, lihat Unggah file.Buka editor pengembangan Spark.
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.
Di panel navigasi sebelah kiri, pilih .
Di bagian atas jendela editor, pilih kelompok sumber daya job dan jenis job Spark. Topik ini menggunakan tipe Batch sebagai contoh.
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 |
| Kelebihan: Konfigurasi sederhana dan siap digunakan. Kekurangan: Dependensi diunduh dan diinstal ulang setiap kali job dijalankan. |
cloud build |
| 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:
Status Kluster: Kluster telah diinisialisasi dan dapat menjalankan contoh Spark Pi dasar dengan sukses.
Persyaratan Versi:
Versi Spark: 3.5.1 didukung.
Versi Python: 3.9 atau 3.11 didukung.
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
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)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 --- } }PentingSpark 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_pythonspark.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
PyPIyang 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.
PentingGunakan parameter ini dengan hati-hati. Pastikan sumber PyPI yang dikonfigurasi dapat dipercaya, karena serangan dependency confusion merupakan ancaman umum.
spark.executorEnv.TRUSTED_HOST
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.
Rencanakan jalur OSS
Tentukan path OSS untuk menyimpan lingkungan yang telah dikemas, misalnya,
oss://your-bucket/envs/my_custom_env.Kirim job pengemasan
PentingJangan 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
PyPIyang 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.
PentingGunakan parameter ini dengan hati-hati. Pastikan sumber PyPI yang dikonfigurasi dapat dipercaya, karena serangan dependency confusion merupakan ancaman umum.
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.gzGunakan 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
archivesdalam konfigurasi job Anda.PeringatanKonfigurasi 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
ModuleNotFoundError:
Verifikasi bahwa dependensi dikonfigurasi untuk
driverEnvdanexecutorEnv.Verifikasi bahwa nama paket dieja dengan benar dan sesuai dengan nama di PyPI.
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.
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.