Gunakan node ODPS Spark untuk menjadwalkan dan menjalankan tugas Spark on MaxCompute di DataWorks. Tugas Spark on MaxCompute dapat dijalankan dalam mode lokal atau cluster. Topik ini menjelaskan cara menyiapkan kode, mengonfigurasi parameter node, dan menjalankan tugas dalam mode cluster di DataWorks.
Prasyarat
Sebelum memulai, pastikan Anda telah:
-
Membuat node ODPS Spark di DataWorks. Untuk detailnya, lihat Buat dan kelola node ODPS.
Batasan
Jika Anda melakukan commit pada node ODPS Spark yang menggunakan Spark 3.x dan muncul error, submit a ticket untuk menghubungi dukungan teknis. Tim dukungan akan memperbarui versi exclusive resource group for scheduling yang digunakan untuk menjalankan node tersebut.
Siapkan kode Anda
Pilih bahasa pemrograman untuk tugas Spark on MaxCompute Anda. Langkah-langkah persiapan berbeda tergantung pada apakah Anda menggunakan Java/Scala atau Python.
Java atau Scala
Lengkapi langkah-langkah berikut di mesin lokal Anda sebelum mengonfigurasi node:
-
Siapkan lingkungan pengembangan. Siapkan lingkungan pengembangan sesuai sistem operasi Anda:
-
Kembangkan kode Anda. Tulis kode aplikasi Spark on MaxCompute Anda. Mulailah dari templat proyek contoh untuk mendapatkan struktur proyek yang telah dikonfigurasi dengan dependensi Spark dan MaxCompute yang tepat.
-
Paket dan unggah file JAR. Paket kode Anda sebagai file JAR dan unggah ke DataWorks sebagai resource MaxCompute. Untuk detailnya, lihat Buat dan gunakan resource MaxCompute.
Python (lingkungan default)
Tulis kode PySpark Anda langsung di DataWorks sebagai resource Python, lalu lakukan commit. Tidak diperlukan penyiapan lokal. Untuk contoh dan instruksi, lihat Buat dan gunakan resource MaxCompute dan Kembangkan aplikasi Spark on MaxCompute menggunakan PySpark.
Jika lingkungan Python default tidak menyertakan paket pihak ketiga yang dibutuhkan oleh tugas Anda, siapkan lingkungan Python kustom (lihat di bawah), atau gunakan node PyODPS 2 atau node PyODPS 3, yang mendukung kumpulan library Python yang lebih luas.
Python (lingkungan kustom)
Jika lingkungan Python default tidak memenuhi kebutuhan Anda:
-
Siapkan lingkungan Python kustom di mesin lokal Anda. Rujuk ke Versi Python PySpark dan dependensi yang didukung untuk mengonfigurasi lingkungan berdasarkan kebutuhan dependensi Anda.
-
Paket dan unggah lingkungan tersebut. Paket lingkungan Python sebagai file ZIP dan unggah ke DataWorks sebagai resource MaxCompute. Untuk detailnya, lihat Buat dan gunakan resource MaxCompute.
Konfigurasi node
Dalam mode cluster, node menjalankan aplikasi Anda dengan memanggil metode Main sebagai titik masuk. Tugas dianggap selesai ketika Main mencapai status Success atau Fail.
Jangan unggah filespark-defaults.conf. Sebagai gantinya, tambahkan setiap item konfigurasi darispark-defaults.confsatu per satu di bidang Configuration items node.
Tabel berikut menjelaskan setiap parameter. Parameter yang ditandai sebagai auto-configured telah diisi sebelumnya berdasarkan pengaturan proyek MaxCompute Anda — timpa nilai tersebut di Configuration items hanya jika tugas Anda memerlukan nilai yang berbeda.
| Parameter | Wajib | Deskripsi | Opsi spark-submit yang setara |
|---|---|---|---|
| Spark version | Ya | Versi Spark yang akan digunakan. Opsi: Spark1.x, Spark2.x, Spark3.x. | — |
| Language | Ya | Bahasa pemrograman. Opsi: Java/Scala, Python. | — |
| Main JAR resource | Ya | File JAR utama (Java/Scala) atau skrip Python yang diunggah sebagai resource MaxCompute. Unggah dan commit resource sebelum mengonfigurasi bidang ini. Lihat Buat dan gunakan resource MaxCompute. | app jar atau file Python |
| Configuration items | Bersyarat | Properti konfigurasi Spark yang ditambahkan satu per baris — setara dengan --conf dalam spark-submit. Tambahkan item seperti jumlah executor, ukuran memori, dan spark.hadoop.odps.runtime.end.point sesuai kebutuhan. |
--conf PROP=VALUE |
| Main class | Hanya Java/Scala | Nama lengkap kelas utama. Tidak diperlukan untuk tugas Python. | --class CLASS_NAME |
| Parameters | Tidak | Argumen yang diteruskan ke aplikasi Anda, dipisahkan dengan spasi. Gunakan format ${Nama variabel} untuk parameter penjadwalan, lalu tetapkan nilainya di bagian Scheduling parameter pada tab Properties. Untuk format yang didukung, lihat Format parameter penjadwalan yang didukung. |
[app arguments] |
| Other resources | Tidak | File resource tambahan yang dibutuhkan oleh tugas. Jenis yang didukung dan bahasa yang berlaku: resource Jar (hanya Java/Scala), resource Python (hanya Python), resource File (semua), resource Archive (semua, hanya file terkompresi). Unggah dan commit resource terlebih dahulu. | --jars, --py-files, --files, --archives |
Item yang dikonfigurasi otomatis — properti konfigurasi berikut diatur secara otomatis agar sesuai dengan nilai proyek MaxCompute Anda. Timpa nilai tersebut di Configuration items hanya jika tugas Anda memerlukan nilai yang berbeda:
-
spark.hadoop.odps.access.id -
spark.hadoop.odps.access.key -
spark.hadoop.odps.end.point
Contoh: menjalankan pemeriksaan string-ke-angka
Contoh ini membuat tugas PySpark yang memeriksa apakah string dapat dikonversi menjadi angka.
Langkah 1: Buat dan commit resource Python
-
Di Konsol DataWorks, buka DataStudio dan buat resource Python bernama spark_is_number.py. Untuk detail cara membuat resource, lihat Buat dan gunakan resource MaxCompute. Tempel kode berikut ke dalam resource:
# -*- coding: utf-8 -*- import sys from pyspark.sql import SparkSession try: # Hanya untuk Python 2 reload(sys) sys.setdefaultencoding('utf8') except: # Python 3 tidak memerlukan ini pass if __name__ == '__main__': spark = SparkSession.builder\ .appName("spark sql")\ .config("spark.sql.broadcastTimeout", 20 * 60)\ .config("spark.sql.crossJoin.enabled", True)\ .config("odps.exec.dynamic.partition.mode", "nonstrict")\ .config("spark.sql.catalogImplementation", "odps")\ .getOrCreate() def is_number(s): try: float(s) return True except ValueError: pass try: import unicodedata unicodedata.numeric(s) return True except (TypeError, ValueError): pass return False print(is_number('foo')) print(is_number('1')) print(is_number('1.3')) print(is_number('-1.37')) print(is_number('1e3')) -
Simpan dan commit resource tersebut.
Langkah 2: Konfigurasi node ODPS Spark
Di node ODPS Spark, atur parameter berikut:
| Parameter | Nilai |
|---|---|
| Spark version | Spark2.x |
| Language | Python |
| Main Python resource | spark_is_number.py (resource yang Anda buat) |
Simpan dan commit node tersebut.
Langkah 3: Jalankan node di Operation Center
Node ODPS Spark tidak dapat dijalankan dari DataStudio. Buka Operation Center di lingkungan pengembangan untuk menjalankan node tersebut.
Di Operation Center, picu pengisian ulang data untuk node ODPS Spark. Untuk detailnya, lihat Pengisian ulang data dan tampilkan instans pengisian ulang data (versi baru).
Langkah 4: Lihat hasilnya
Setelah instans pengisian ulang selesai dengan sukses, klik tracking URL di log eksekusi untuk melihat output:
False
True
True
True
True
Contoh lainnya
Untuk skenario pengembangan Spark on MaxCompute tambahan:
Langkah selanjutnya
Setelah mengembangkan dan menjalankan tugas Spark on MaxCompute Anda, Anda dapat:
-
Konfigurasi properti penjadwalan: Atur penjadwalan periodik untuk node, termasuk pengaturan pengulangan eksekusi dan dependensi penjadwalan, sehingga sistem menjalankan tugas secara otomatis. Lihat Ikhtisar.
-
Debug node: Uji kode node untuk memverifikasi logika berjalan sesuai harapan sebelum masuk ke produksi. Lihat Prosedur debugging.
-
Deploy node: Deploy node agar aktif untuk penjadwalan. Setelah deployment, sistem akan menjadwalkan dan menjalankan node secara otomatis berdasarkan properti penjadwalan yang telah Anda konfigurasi. Lihat Deploy nodes.
-
Diagnosis masalah tugas: Gunakan tool Logview dan Spark Web UI untuk memeriksa log dan memverifikasi bahwa tugas diajukan dan dijalankan sesuai harapan. Lihat Aktifkan sistem untuk mendiagnosis tugas Spark.