Artikel ini menjelaskan cara mengembangkan pekerjaan Python Spark pada AnalyticDB for MySQL dan menyediakan metode untuk membangun lingkungan berbasis cloud.
Prasyarat
Kluster AnalyticDB for MySQL Enterprise Edition, Basic Edition, atau Data Lakehouse Edition telah dibuat.
Bucket Object Storage Service (OSS) telah dibuat di wilayah yang sama dengan kluster AnalyticDB for MySQL.
Kelompok sumber daya pekerjaan telah dibuat untuk kluster AnalyticDB for MySQL Enterprise Edition, Basic Edition, atau Data Lakehouse Edition.
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 file
example.pyke OSS. Untuk informasi selengkapnya, lihat Upload a 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 pekerjaan dan jenis pekerjaan Spark. Topik ini menggunakan tipe Batch sebagai contoh.
-
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 |
|
Kelebihan: Konfigurasi sederhana dan siap digunakan. Kekurangan: Dependensi diunduh dan diinstal ulang setiap kali pekerjaan dijalankan. |
|
cloud build |
|
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:
-
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, pekerjaan akan gagal.
-
Contoh
Real-time installation
-
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 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 --- } }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
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_pythonspark.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
PyPIyang 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.
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 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.
-
Rencanakan jalur OSS
Tentukan path OSS untuk menyimpan lingkungan yang telah dikemas, misalnya,
oss://your-bucket/envs/my_custom_env. -
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
PyPIyang 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.
PentingGunakan parameter ini dengan hati-hati. Pastikan sumber PyPI yang dikonfigurasi dapat dipercaya, karena serangan dependency confusion merupakan ancaman umum.
-
-
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 -
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
pyFilesdalam 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
-
ModuleNotFoundError:
-
Verifikasi bahwa dependensi telah dikonfigurasi untuk
driverEnvdanexecutorEnv. -
Verifikasi bahwa nama paket dieja dengan benar dan sesuai dengan nama di PyPI.
-
-
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.
-
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.