DataWorks menyediakan tipe node PyODPS 2 untuk mengembangkan tugas PyODPS menggunakan sintaks PyODPS. Sebagai SDK Python untuk MaxCompute, PyODPS memungkinkan Anda menulis dan mengedit kode Python pada node PyODPS 2 guna berinteraksi langsung dengan MaxCompute.
Ikhtisar
PyODPS adalah SDK Python untuk MaxCompute yang menyediakan antarmuka pemrograman ringkas, memungkinkan Anda menggunakan Python untuk menulis pekerjaan, melakukan kueri terhadap tabel dan tampilan, serta mengelola resource MaxCompute. Untuk informasi selengkapnya, lihat Ikhtisar PyODPS. Di DataWorks, Anda dapat menggunakan node PyODPS untuk menjadwalkan dan menjalankan tugas Python serta mengintegrasikannya dengan pekerjaan lain.
Catatan
-
Jika kode Anda memerlukan paket pihak ketiga saat menjalankan node PyODPS pada kelompok sumber daya DataWorks, gunakan serverless resource group dan custom image untuk menginstal paket tersebut.
CatatanMetode ini tidak didukung jika kode Anda menggunakan UDF yang mereferensikan paket pihak ketiga. Untuk informasi tentang cara menangani skenario ini, lihat Contoh UDF: Gunakan paket pihak ketiga dalam UDF Python.
-
Jika tugas PyODPS Anda perlu mengakses lingkungan jaringan tertentu, seperti sumber data atau layanan di VPC atau pusat data lokal, gunakan serverless resource group dan merujuk ke Solusi konektivitas jaringan untuk membuat koneksi jaringan yang diperlukan.
-
Untuk informasi selengkapnya tentang sintaks PyODPS, lihat Dokumentasi PyODPS.
-
Node PyODPS tersedia dalam dua tipe: PyODPS 2 dan PyODPS 3. Keduanya berbeda dalam versi Python yang mendasarinya. Node PyODPS 2 menggunakan Python 2, sedangkan node PyODPS 3 menggunakan Python 3. Pilih tipe node yang sesuai dengan versi Python yang Anda gunakan.
-
Jika eksekusi SQL pada node PyODPS gagal menghasilkan alur data sehingga alur data tidak ditampilkan di Peta Data, Anda dapat mengatasi masalah ini dengan mengatur parameter penjadwalan DataWorks secara manual dalam kode tugas. Untuk melihat alur data, lihat Lihat alur data. Untuk informasi tentang pengaturan parameter, lihat Atur petunjuk parameter waktu proses. Anda dapat memperoleh parameter waktu proses yang diperlukan menggunakan contoh kode berikut.
import os # ... # get DataWorks sheduler runtime parameters skynet_hints = {} for k, v in os.environ.items(): if k.startswith('SKYNET_'): skynet_hints[k] = v # ... # setting hints while submiting a task o.execute_sql('INSERT OVERWRITE TABLE XXXX SELECT * FROM YYYY WHERE ***', hints=skynet_hints) # ... -
Log output untuk node PyODPS mendukung ukuran maksimum 4 MB. Hindari mencetak volume data besar secara langsung ke log. Sebagai gantinya, catat hanya peringatan penting dan pembaruan progres.
Batasan
-
Saat menjalankan node PyODPS pada grup sumber daya eksklusif untuk penjadwalan, kami menyarankan agar data yang diproses secara lokal dalam node tidak melebihi 50 MB. Operasi ini dibatasi oleh spesifikasi grup sumber daya eksklusif untuk penjadwalan. Memproses terlalu banyak data lokal yang melebihi ambang batas sistem operasi dapat menyebabkan error OOM (got killed). Hindari menulis terlalu banyak kode pemrosesan data dalam node PyODPS.
-
Saat menjalankan node PyODPS pada serverless resource group, Anda dapat mengonfigurasi alokasi CU untuk node PyODPS berdasarkan volume data yang akan diproses.
CatatanSaat menjalankan tugas ini pada serverless resource group, konfigurasi maksimum untuk satu tugas adalah
64CU, tetapi kami menyarankan agar Anda tidak melebihi16CUuntuk menghindari kekurangan sumber daya akibat alokasi CU berlebihan, yang dapat memengaruhi startup tugas. -
Jika Anda mengalami error Got Killed, hal ini menunjukkan bahwa penggunaan memori melebihi batas dan proses dihentikan. Oleh karena itu, hindari operasi data lokal sebisa mungkin. Tugas SQL dan DataFrame yang dimulai melalui PyODPS (kecuali to_pandas) tidak terkena batasan ini.
-
Kode non-UDF dapat menggunakan paket NumPy dan Pandas yang telah dipra-instal. Paket pihak ketiga lain yang berisi kode biner tidak didukung.
-
Karena alasan kompatibilitas, di DataWorks, options.tunnel.use_instance_tunnel diatur ke False secara default. Jika Anda perlu mengaktifkan instance tunnel secara global, Anda harus mengatur nilai ini ke True secara manual.
-
Versi Python yang mendasari node PyODPS 2 adalah 2.7.
-
Menjalankan beberapa tugas Python secara konkuren dalam satu node PyODPS tidak didukung.
-
Untuk mencetak log dalam node PyODPS, gunakan
print. Penggunaanlogger.infotidak didukung.
Prasyarat
Kaitkan mesin komputasi MaxCompute dengan ruang kerja DataWorks Anda.
Prosedur
-
Pada halaman pengeditan node PyODPS 2, lakukan operasi pengembangan berikut.
Contoh kode PyODPS 2
Setelah membuat node PyODPS, Anda dapat mengedit dan menjalankan kode. Untuk informasi selengkapnya tentang sintaks PyODPS, lihat Dokumentasi PyODPS. Topik ini menjelaskan lima contoh kode berikut. Anda dapat memilih contoh berdasarkan kebutuhan bisnis Anda.
Entri ODPS
Di node PyODPS DataWorks, variabel global
odpsatauodisertakan sebagai entri ODPS. Anda tidak perlu mendefinisikan entri ODPS secara manual.print(odps.exist_table('PyODPS_iris'))Eksekusi SQL
Anda dapat mengeksekusi SQL dalam node PyODPS. Untuk informasi selengkapnya, lihat Eksekusi pernyataan SQL.
-
Secara default,
instance tunneltidak diaktifkan di DataWorks, artinyainstance.open_readermenggunakan antarmuka Result secara default (maksimal 10.000 record). Anda dapat menggunakanreader.countuntuk mendapatkan jumlah record. Jika Anda perlu melakukan iterasi terhadap semua data, Anda harus menonaktifkan pembatasanlimit. Anda dapat menggunakan pernyataan berikut untuk mengaktifkanInstance Tunnelsecara global dan menonaktifkan pembatasanlimit.options.tunnel.use_instance_tunnel = True options.tunnel.limit_instance_tunnel = False # Nonaktifkan pembatasan limit, baca semua data. with instance.open_reader() as reader: # Gunakan Instance Tunnel untuk membaca semua data. -
Anda juga dapat menambahkan
tunnel=Truekeopen_readeruntuk mengaktifkaninstance tunnelhanya untuk pemanggilanopen_readersaat ini. Anda juga dapat menambahkanlimit=Falseuntuk menonaktifkan pembatasanlimithanya untuk pemanggilan saat ini.# open_reader menggunakan antarmuka Instance Tunnel untuk membaca semua data. with instance.open_reader(tunnel=True, limit=False) as reader:
Atur parameter waktu proses
-
Anda dapat mengatur parameter waktu proses dengan mengonfigurasi parameter
hints, yang bertipedict. Untuk informasi selengkapnya tentang parameter hints, lihat Operasi SET.o.execute_sql('select * from PyODPS_iris', hints={'odps.sql.mapper.split.size': 16}) -
Setelah Anda mengonfigurasi
sql.settingssecara global, Anda perlu menambahkan parameter waktu proses terkait setiap kali menjalankan tugas.from odps import options options.sql.settings = {'odps.sql.mapper.split.size': 16} o.execute_sql('select * from PyODPS_iris') # Tambahkan hints berdasarkan konfigurasi global.
Baca hasil eksekusi
Instans yang menjalankan SQL dapat langsung melakukan operasi
open_reader. Berikut dua skenario yang mungkin terjadi:-
Pernyataan SQL mengembalikan data terstruktur.
with o.execute_sql('select * from dual').open_reader() as reader: for record in reader: # Proses setiap record. -
Pernyataan SQL mungkin berupa pernyataan seperti desc. Anda dapat menggunakan properti
reader.rawuntuk mendapatkan hasil eksekusi SQL mentah.with o.execute_sql('desc dual').open_reader() as reader: print(reader.raw)CatatanJika Anda menggunakan parameter penjadwalan kustom, Anda harus menuliskan nilai waktu secara eksplisit saat memicu langsung node PyODPS 2 pada halaman karena node PyODPS tidak dapat langsung mengganti parameter tersebut.
DataFrame
Anda juga dapat menggunakan DataFrame untuk memproses data.
-
Eksekusi
Di lingkungan DataWorks, eksekusi DataFrame memerlukan pemanggilan eksplisit terhadap metode yang memicu eksekusi segera.
from odps.df import DataFrame iris = DataFrame(o.get_table('pyodps_iris')) for record in iris[iris.sepal_width < 3].execute(): # Eksekusi segera dan proses setiap Record.Jika Anda ingin memicu eksekusi segera saat menggunakan Print, Anda perlu mengaktifkan
options.interactive.from odps import options from odps.df import DataFrame options.interactive = True # Aktifkan sakelar di awal. iris = DataFrame(o.get_table('pyodps_iris')) print(iris.sepal_width.sum()) # Eksekusi segera saat print. -
Cetak informasi detail
Anda dapat mengonfigurasi opsi
options.verbose. Di DataWorks, opsi ini diaktifkan secara default, dan informasi detail seperti URL Logview dicetak selama eksekusi.
Pengembangan kode PyODPS 2
Contoh sederhana berikut menunjukkan cara menggunakan node PyODPS:
-
Siapkan set data dan buat tabel sampel pyodps_iris. Untuk informasi selengkapnya, lihat Membuat DataFrame.
-
Buat DataFrame. Untuk informasi selengkapnya, lihat Buat DataFrame.
-
Masukkan kode berikut ke dalam node PyODPS.
from odps.df import DataFrame # Buat DataFrame dari tabel ODPS untuk membuat DataFrame. iris = DataFrame(o.get_table('pyodps_iris')) print(iris.sepallength.head(5))
Jalankan tugas PyODPS
-
Dalam Run Configuration, konfigurasikan Compute Resource, Compute Resource and Quota, dan DataWorks Resource Group.
Catatan-
Untuk mengakses sumber data di lingkungan jaringan publik atau jaringan VPC, gunakan kelompok sumber daya penjadwalan yang telah lulus uji konektivitas untuk sumber data tersebut. Untuk informasi selengkapnya, lihat Solusi konektivitas jaringan.
-
Anda dapat mengonfigurasi informasi Image berdasarkan kebutuhan tugas.
-
-
Pada bilah alat, klik Run untuk menjalankan tugas PyODPS.
-
-
Jika Anda perlu menjalankan tugas node secara berkala, konfigurasikan pengaturan jadwal sesuai kebutuhan bisnis Anda. Untuk informasi selengkapnya, lihat Konfigurasi pengaturan jadwal.
Berbeda dengan node SQL di DataWorks, node PyODPS tidak mengganti string seperti ${param_name} dalam kode untuk menghindari dampak terhadap kode. Sebagai gantinya, sebelum mengeksekusi kode, sebuah dict bernama
argsditambahkan ke variabel global, dari mana parameter penjadwalan dapat diambil. Misalnya, jika Anda mengaturds=${yyyymmdd}di Parameter, Anda dapat mengambil parameter tersebut dalam kode sebagai berikut.print('ds=' + args['ds']) ds=20240930CatatanJika Anda perlu mendapatkan partisi bernama
ds, Anda dapat menggunakan metode berikut.o.get_table('table_name').get_partition('ds=' + args['ds']) -
Setelah menyelesaikan konfigurasi tugas node, Anda perlu menerapkan node tersebut. Untuk informasi selengkapnya, lihat Terapkan node.
-
Setelah menerapkan tugas, Anda dapat melihat status berjalan tugas terjadwal di Operation Center. Untuk informasi selengkapnya, lihat Lihat tugas terjadwal.
Jalankan node menggunakan role terkait
Anda dapat mengaitkan peran RAM untuk menjalankan node, yang memungkinkan Anda menjalankan tugas node dengan peran RAM tertentu untuk kontrol izin detail halus dan manajemen keamanan.
Langkah berikutnya
FAQ PyODPS: Anda dapat mempelajari isu umum selama eksekusi PyODPS untuk troubleshooting cepat.