Artikel ini menjelaskan teknik tingkat lanjut untuk menggunakan DataWorks Notebooks, menjembatani kesenjangan antara pengembangan interaktif dan pekerjaan produksi terjadwal. Anda akan mempelajari cara meningkatkan efisiensi pengembangan melalui praktik rekayasa seperti reuse kode, pemasangan data, dan manajemen parameter, serta teknik praktis dan metode debugging untuk menghubungkan berbagai compute engine, termasuk MaxCompute Spark, EMR Serverless Spark, dan AnalyticDB for Spark.
Kami menyarankan Anda membaca terlebih dahulu Pengembangan Notebook.
Lingkungan pengembangan vs. produksi
DataWorks Notebooks adalah alat pengembangan dan analisis yang mendukung eksekusi terjadwal, sehingga beroperasi dalam dua lingkungan runtime yang berbeda:
Lingkungan pengembangan: Saat Anda menjalankan sebuah cell secara langsung di editor Notebook di DataStudio, kode dieksekusi dalam instans lingkungan pengembangan pribadi Anda. Lingkungan ini dirancang untuk validasi dan debugging kode secara cepat.
Lingkungan produksi: Setelah Notebook dikomit dan dipublikasikan, tugas berulang atau proses backfill akan mengeksekusinya. Kode berjalan dalam instans tugas sementara yang terisolasi. Lingkungan ini dirancang untuk eksekusi tugas produksi yang stabil dan andal.
Kedua lingkungan ini memiliki perbedaan signifikan. Memahami perbedaan tersebut merupakan kunci pengembangan yang efisien.
Perbandingan fitur: Lingkungan pengembangan vs. produksi
Fitur | Lingkungan pengembangan | Lingkungan produksi |
Referensi resource proyek ( |
| Berlaku secara otomatis. |
Membaca dan menulis dataset (OSS/NAS) | Memerlukan pemasangan di lingkungan pengembangan pribadi. | Memerlukan pemasangan di Scheduling Configurations. |
Referensi parameter ruang kerja ( | Didukung. Teks diganti otomatis sebelum eksekusi kode. | Didukung. Teks diganti otomatis sebelum tugas dijalankan. |
Manajemen sesi Spark | Timeout idle default untuk sesi Spark adalah 2 jam. Sesi akan dilepas otomatis jika tidak ada kode baru yang dijalankan dalam periode tersebut. | Sesi jangka pendek tingkat tugas. Sesi ini dibuat dan dihapus otomatis bersama instans tugas. |
Reuse kode dan data di lingkungan produksi
Referensi resource proyek (file .py)
Enkapsulasi fungsi atau kelas umum ke dalam file .py terpisah dan referensikan sebagai resource MaxCompute dengan menggunakan sintaks ##@resource_reference{"custom_name.py"}. Pendekatan ini memodularisasi kode Anda, meningkatkan reusabilitas, dan memperbaiki kemudahan pemeliharaan.
Buat dan publikasikan resource Python
Di panel navigasi kiri DataWorks DataStudio, klik
untuk menuju ke Resource Management.Di pohon manajemen resource, klik kanan direktori target atau klik ikon + di pojok kanan atas lalu pilih Create Resource > MaxCompute Python. Beri nama resource tersebut
my_utils.py.Di bagian File Content, klik Online Edit, tempel kode utilitas yang telah diuji ke dalam editor, lalu klik Save.
# my_utils.py def greet(name): return f"Hello, {name} from resource file!"Di toolbar, klik Save lalu Publish resource tersebut agar tersedia untuk tugas pengembangan maupun produksi.
Referensi resource dalam Notebook
Di cell Python Notebook Anda, gunakan sintaks
##@resource_referencedi baris pertama untuk mereferensikan resource yang telah dipublikasikan.##@resource_reference{"my_utils.py"} # Jika resource berada di direktori, misalnya my_folder/my_utils.py, Anda tetap mereferensikannya sebagai ##@resource_reference{"my_utils.py"} tanpa nama direktori. from my_utils import greet message = greet('DataWorks') print(message)Jalankan dan debug di lingkungan pengembangan
Jalankan cell Python tersebut. Output berikut akan dicetak:
Hello, DataWorks from resource file!PentingSaat Anda melakukan debugging di lingkungan pengembangan, jika sistem mendeteksi
##@resource_reference, sistem akan secara otomatis mengunduh file target dari Resource Management ke pathworkspace/_dataworks/resource_referencesdi direktori pribadi Anda, sehingga memungkinkan referensi tersebut.Jika terjadi
ModuleNotFoundError, klik tombol Restart di toolbar untuk memuat ulang resource tersebut.Publikasikan ke lingkungan produksi dan verifikasi
Save dan Publish Notebook tersebut. Lalu, buka Operation Center > Cycle Task dan klik Test untuk menjalankannya. Setelah tugas berhasil, output
Hello, DataWorks from resource file!akan muncul di log.PentingJika muncul error
There is no file with id ..., pastikan resource Python tersebut telah dipublikasikan ke lingkungan produksi terlebih dahulu.
Untuk informasi selengkapnya, lihat Resource dan fungsi MaxCompute.
Baca dan tulis dataset
Anda dapat dengan mudah membaca dan menulis data file skala besar yang disimpan di Object Storage Service (OSS) atau Network Attached Storage (NAS) saat tugas Notebook sedang berjalan.
Debug di lingkungan pengembangan
Pasang dataset: Buka halaman detail lingkungan pengembangan pribadi Anda dan konfigurasikan dataset di Storage Configuration > Dataset.
Akses data dalam kode Anda: Dataset tersebut dipasang ke suatu path di lingkungan pengembangan pribadi. Anda dapat langsung membaca atau menulis ke path tersebut dalam kode Anda.
# Asumsikan dataset telah dikonfigurasi dengan path mount /mnt/data/dataset di lingkungan pengembangan pribadi. import pandas as pd # Gunakan path mount secara langsung. file_path = '/mnt/data/dataset/testfile.csv' df = pd.read_csv(file_path) # Gunakan PyODPS untuk menulis data ke MaxCompute. o = %odps o.write_table('mc_test_table', df, overwrite=True) print(f"Berhasil menulis data ke tabel MaxCompute mc_test_table.")
Penerapan produksi
Pasang dataset: Di panel navigasi kanan editor Notebook, buka Scheduling Configurations > Scheduling Policy lalu tambahkan dataset tersebut.
Akses data dalam kode Anda: Setelah Anda mengkomit dan mempublikasikan Notebook, dataset tersebut dipasang ke suatu path di lingkungan produksi. Anda dapat langsung membaca atau menulis ke path tersebut dalam kode Anda.
# Asumsikan dataset telah dikonfigurasi dengan path mount /mnt/data/dataset. import pandas as pd # Gunakan path mount secara langsung. file_path = '/mnt/data/dataset/testfile.csv' df = pd.read_csv(file_path) # Gunakan PyODPS untuk menulis data ke MaxCompute. o = %odps o.write_table('mc_test_table', df, overwrite=True) print(f"Berhasil menulis data ke tabel MaxCompute mc_test_table.")
Untuk informasi lebih lanjut, lihat Gunakan dataset di lingkungan pengembangan pribadi.
Referensi parameter ruang kerja
Fitur ini hanya tersedia di DataWorks Edisi Profesional dan yang lebih tinggi.
Selain parameter penjadwalan yang sudah ada, DataWorks memperkenalkan parameter ruang kerja untuk reuse konfigurasi global lintas tugas dan lintas node serta isolasi lingkungan. Anda dapat mereferensikan parameter ruang kerja di cell SQL dan Python dengan format ${workspace.param}, di mana param adalah nama parameter ruang kerja Anda.
1. Buat parameter ruang kerja: Buka halaman Operation Center > Scheduling Settings > Workspace Parameters di DataWorks untuk membuat parameter yang diperlukan.
2. Rujuk parameter ruang kerja:
Referensikan parameter ruang kerja di cell SQL.
SELECT '${workspace.param}';Kueri ini mengembalikan nilai yang telah diselesaikan dari parameter ruang kerja.
Referensikan parameter ruang kerja di cell Python.
print('${workspace.param}')Ini mencetak nilai yang telah diselesaikan dari parameter ruang kerja.
Untuk informasi selengkapnya, lihat Menggunakan parameter ruang kerja.
Perintah Magic dan compute engine
Perintah Magic adalah perintah khusus yang diawali dengan % atau %%. Perintah ini menyederhanakan interaksi antara cell Python dan berbagai sumber daya komputasi.
Hubungkan ke MaxCompute
Sebelum menghubungkan ke sumber daya komputasi MaxCompute, pastikan Anda telah Mengaitkan sumber daya komputasi MaxCompute.
%odps: Dapatkan objek entry point PyODPSPerintah ini mengembalikan objek PyODPS yang telah diautentikasi dan terikat ke proyek MaxCompute saat ini. Ini adalah cara yang direkomendasikan untuk berinteraksi dengan MaxCompute karena menghindari hardcoding AccessKey dalam kode Anda.
Gunakan Perintah Magic untuk membuat koneksi MaxCompute. Masukkan
%odps. Pemilih sumber daya komputasi MaxCompute akan muncul di pojok kanan bawah, dan sumber daya komputasi akan dipilih secara otomatis. Anda dapat mengklik nama proyek MaxCompute untuk beralih ke proyek lain.o=%odpsGunakan sumber daya komputasi MaxCompute yang dikembalikan untuk menjalankan skrip PyODPS.
Contohnya, untuk mendapatkan semua tabel di proyek saat ini:
with o.execute_sql('show tables').open_reader() as reader: print(reader.raw)
%maxframe: Membuat koneksi MaxFramePerintah ini membuat sesi MaxFrame, menyediakan kemampuan pemrosesan data terdistribusi ala Pandas untuk MaxCompute.
# Hubungkan dan akses sesi MaxFrame MaxCompute. mf_session = %maxframe df = mf_session.read_odps_table('your_mc_table') print(df.head()) # Setelah pengembangan dan debugging, Anda harus menghapus sesi secara manual untuk melepaskan resource. mf_session.destroy()
Hubungkan ke sumber daya komputasi Spark
DataWorks Notebook mendukung koneksi ke beberapa engine Spark. Engine-engine ini berbeda dalam metode koneksi, konteks eksekusi, dan manajemen resource.
Satu Notebook hanya mendukung koneksi ke satu jenis sumber daya komputasi menggunakan Perintah Magic.
Bandingkan engine
Fitur | MaxCompute Spark | EMR Serverless Spark | AnalyticDB for Spark |
Perintah koneksi |
|
|
|
Catatan Setelah dieksekusi, kernel Notebook beralih ke lingkungan PySpark remote. Anda kemudian dapat menulis kode PySpark di cell-cell berikutnya. | |||
Prasyarat | Ikat sumber daya MaxCompute. | Mengikat resource EMR dan membuat Livy Gateway. | Ikat sumber daya ADB Spark. |
Dev Environment Mode | Membuat atau menggunakan kembali sesi Livy secara otomatis. | Terhubung ke Livy Gateway yang ada untuk membuat sesi. | Membuat atau menggunakan kembali Spark Connect Server secara otomatis. |
Prod Environment Mode | Mode Livy: Mengirimkan pekerjaan Spark melalui layanan Livy. | Mode batch spark-submit: Mode pemrosesan batch stateless. | Mode Spark Connect Server: Berinteraksi melalui layanan koneksi Spark. |
Pelepasan Resource Prod | Sesi dilepas otomatis setelah instans tugas selesai. | Resource dibersihkan otomatis setelah instans tugas selesai. | Resource dilepas otomatis setelah instans tugas selesai. |
Use Cases | Tugas batch dan ETL umum yang terintegrasi erat dengan ekosistem MaxCompute. | Tugas analisis kompleks yang memerlukan konfigurasi fleksibel dan interaksi dengan ekosistem open-source seperti Hudi dan Iceberg. | Kueri dan analisis interaktif berkinerja tinggi pada tabel C-Store di ADB for MySQL. |
MaxCompute Spark
Sebelum menghubungkan ke sumber daya komputasi MaxCompute, pastikan Anda telah Mengaitkan sumber daya komputasi MaxCompute.
Hubungkan ke engine Spark yang tertanam di proyek MaxCompute Anda melalui Livy.
Buat koneksi: Jalankan perintah berikut dalam cell Python. Sistem secara otomatis membuat atau menggunakan kembali sesi Spark.
# Buat sesi Spark. %maxcompute_sparkEksekusi kode PySpark: Setelah koneksi berhasil, gunakan magic cell
%%sparkdi cell Python baru untuk mengeksekusi kode PySpark.# Saat menggunakan MaxCompute Spark, cell Python harus diawali dengan %%spark. %%spark df = spark.sql("SELECT * FROM your_mc_table LIMIT 10") df.show()Lepaskan koneksi secara manual: Setelah pengembangan dan debugging, Anda dapat menghentikan atau menghapus sesi secara manual. Di lingkungan produksi, sistem secara otomatis menghentikan dan menghapus sesi Livy untuk instans tugas saat ini.
# Bersihkan sesi Spark dan hentikan Livy. %maxcompute_spark stop # Bersihkan sesi Spark, hentikan Livy, lalu hapus Livy. %maxcompute_spark delete
EMR Serverless Spark
Sebelum menghubungkan ke sumber daya komputasi, pertama-tama Kaitkan sumber daya komputasi EMR Serverless Spark di ruang kerja dan buat Livy Gateway.
Berinteraksi dengan EMR Serverless Spark dengan menghubungkan ke Livy Gateway.
Buat koneksi: Sebelum menjalankan perintah, pilih resource komputasi EMR dan Livy Gateway di pojok kanan bawah cell.
# Koneksi dasar %emr_serverless_spark # Atau, teruskan parameter Spark kustom saat menghubungkan. Perhatikan bahwa Anda harus menggunakan dua tanda persen (%%) saat menentukan parameter Spark kustom. %%emr_serverless_spark { "spark_conf": { "spark.emr.serverless.environmentId": "<EMR_Serverless_Spark_runtime_environment_ID>", "spark.emr.serverless.network.service.name": "<EMR_Serverless_Spark_network_connection_ID>", "spark.driver.cores": "1", "spark.driver.memory": "8g", "spark.executor.cores": "1", "spark.executor.memory": "2g", "spark.driver.maxResultSize": "32g" } }CatatanHubungan antara parameter kustom dan konfigurasi global
Perilaku default: Parameter kustom yang ditentukan di sini hanya berlaku untuk koneksi (sesi) saat ini dan bersifat sekali pakai. Jika Anda tidak memberikan parameter kustom, sistem akan secara otomatis menggunakan parameter global yang dikonfigurasi di Management Center.
Penggunaan yang direkomendasikan: Untuk konfigurasi yang perlu digunakan kembali di berbagai tugas atau oleh banyak pengguna, kami menyarankan menyetelnya sebagai parameter global di Management Center > Serverless Spark > SPARK parameters. Ini memastikan konsistensi dan menyederhanakan manajemen.
Aturan prioritas: Jika parameter yang sama diatur baik di parameter kustom maupun konfigurasi global, opsi Prioritize Global Configuration di Management Center menentukan parameter mana yang digunakan:
Dipilih: Konfigurasi global menggantikan parameter kustom untuk sesi ini.
Tidak dipilih: Parameter kustom untuk sesi ini menggantikan konfigurasi global.
(Opsional) Sambung ulang: Jika administrator secara tidak sengaja menghapus token di halaman gateway Livy, Anda dapat menggunakan perintah ini untuk membuatnya kembali.
# Sambung ulang dan segarkan token Livy untuk lingkungan pengembangan pribadi saat ini. %emr_serverless_spark refresh_tokenEksekusi kode PySpark atau SQL: Setelah koneksi berhasil, kernel beralih. Anda dapat menulis kode PySpark langsung di cell Python atau menulis SQL di cell EMR Spark SQL.
Kirim dan jalankan kode SQL melalui cell EMR Spark SQL
Setelah Anda membuat koneksi menggunakan
%emr_serverless_spark, Anda dapat menulis pernyataan SQL langsung di cell EMR Spark SQL tanpa memilih sumber daya komputasi di dalam cell tersebut.Cell EMR Spark SQL menggunakan kembali koneksi dari
%emr_serverless_sparkdan mengirimkan pekerjaan ke sumber daya komputasi target.
Kirim dan jalankan kode PySpark melalui cell Python
Setelah Anda membuat koneksi menggunakan
%emr_serverless_spark, Anda dapat mengirim dan menjalankan kode PySpark di cell Python baru tanpa menambahkan awalan%%sparkke cell tersebut.
Hentikan koneksi secara manual
PentingSaat beberapa pengguna berbagi satu Livy Gateway, perintah `stop` atau `delete` akan memengaruhi semua pengguna yang sedang menggunakan gateway tersebut. Gunakan perintah ini dengan hati-hati.
# Bersihkan sesi Spark dan hentikan Livy. %emr_serverless_spark stop # Bersihkan sesi Spark, hentikan Livy, lalu hapus Livy. %emr_serverless_spark delete
AnalyticDB for Spark
Sebelum menghubungkan ke sumber daya komputasi, pertama-tama Kaitkan sumber daya komputasi AnalyticDB for Spark di ruang kerja.
Hubungkan ke engine AnalyticDB for Spark dengan membuat Spark Connect Server.
Buat koneksi: Untuk memastikan konektivitas jaringan, Anda harus mengonfigurasi ID vSwitch dan ID Security Group di parameter koneksi. Sebelum menjalankan perintah, pilih resource komputasi ADB Spark di pojok kanan bawah cell.
# Anda harus mengonfigurasi ID vSwitch dan ID Security Group untuk membuat koneksi jaringan. %adb_spark add \ --spark-conf spark.adb.version=3.5 \ --spark-conf spark.adb.eni.enabled=true \ --spark-conf spark.adb.eni.vswitchId=<vSwitch_ID_of_ADB> \ --spark-conf spark.adb.eni.securityGroupId=<Security_Group_ID_of_personal_development_environment>Eksekusi kode PySpark: Setelah koneksi berhasil, eksekusi kode PySpark di cell Python baru.
# Operasi hanya dapat dilakukan pada tabel C-Store. df = spark.sql("SELECT * FROM my_adb_cstore_table LIMIT 10") df.show()Catatan: Engine AnalyticDB for Spark hanya dapat memproses tabel C-Store yang memiliki atribut
'storagePolicy'='COLD'.Lepaskan koneksi secara manual: Setelah debugging di lingkungan pengembangan, bersihkan sesi koneksi secara manual untuk menghemat resource. Di lingkungan produksi, sistem membersihkan resource secara otomatis.
%adb_spark cleanup
Lampiran: Referensi Perintah Magic
Perintah Ajaib | Deskripsi | Mesin komputasi yang berlaku |
| Mendapatkan objek entry point PyODPS. | MaxCompute |
| Membuat koneksi MaxFrame. | |
| Membuat sesi Spark. | MaxCompute Spark |
| Bersihkan sesi Spark dan hentikan Livy. | |
| Bersihkan sesi Spark, hentikan, dan hapus Livy. | |
| Di cell Python, hubungkan ke resource Spark yang sudah ada. | |
| Membuat sesi Spark. | EMR Serverless Spark |
| Lihat detail Livy Gateway. | |
| Bersihkan sesi Spark dan hentikan Livy. | |
| Bersihkan sesi Spark, hentikan, dan hapus Livy. | |
| Segarkan Livy Token untuk lingkungan dev pribadi. | |
| Membuat dan menghubungkan ke sesi ADB Spark yang dapat digunakan kembali. | AnalyticDB for Spark |
| Lihat info sesi Spark. | |
| Menghentikan dan membersihkan sesi koneksi Spark saat ini. |
FAQ
T: Mengapa saya mendapatkan error
ModuleNotFoundErroratauThere is no file with id ...saat mereferensikan resource ruang kerja?A: Periksa hal-hal berikut:
Buka Data Development > Resource Management dan pastikan resource Python MaxCompute telah disimpan. Jika error ini terjadi di lingkungan produksi, konfirmasi bahwa resource tersebut telah dipublikasikan.
Klik tombol Restart di toolbar Notebook untuk memuat ulang resource tersebut.
T: Setelah saya memperbarui resource ruang kerja, mengapa Notebook saya masih mereferensikan versi lama?
J: Saat Anda memodifikasi dan mempublikasikan ulang resource, atur kebijakan konflik resource
Dataworks › Notebook › Resource Reference: Download Strategymenjadi autoOverwrite di pengaturan DataStudio. Lalu, klik Restart Kernel di toolbar Notebook.T: Mengapa saya mendapatkan
FileNotFoundErrordi lingkungan pengembangan saat mereferensikan dataset?J: Pastikan dataset telah dipasang di lingkungan pengembangan pribadi yang saat ini dipilih.
T: Referensi dataset berfungsi di lingkungan pengembangan, tetapi saya mendapatkan error
Execute mount dataset exception! Please check your dataset configdi lingkungan produksi. Mengapa?J: Pastikan set data telah dipasang di Scheduling Configurations Notebook dan Anda telah memberikan izin yang diperlukan untuk set data OSS.

T: Bagaimana cara memeriksa versi lingkungan pengembangan pribadi saya?
J: Setelah masuk ke lingkungan pengembangan pribadi Anda, tekan `Cmd+Shift+P` lalu masukkan `ABOUT` untuk melihat versi saat ini. Jika pembaruan produk memerlukan versi 0.5.69 atau lebih baru untuk instans lingkungan pengembangan pribadi, lakukan One-click Upgrade melalui prompt upgrade yang muncul.
T: Mengapa koneksi saya ke mesin Spark gagal?
A: Periksa hal-hal berikut:
Pemeriksaan umum: Buka daftar sumber daya komputasi untuk ruang kerja Anda. Konfirmasi bahwa sumber daya komputasi yang sesuai (MaxCompute, EMR, atau ADB) telah dikaitkan dengan benar ke ruang kerja saat ini dan akun Anda memiliki izin yang diperlukan.
EMR Serverless Spark: Periksa apakah Livy Gateway telah dibuat dan dalam keadaan normal.
AnalyticDB for Spark: Fokus pada troubleshooting masalah jaringan. Konfirmasi bahwa
vswitchIddansecurityGroupIddikonfigurasi dengan benar dan lingkungan pengembangan pribadi dapat terhubung ke instans ADB Spark. Periksa aturan Security Group untuk memastikan port yang diperlukan diizinkan untuk berkomunikasi.