Topik ini menjelaskan fitur prioritas pekerjaan untuk sumber daya langganan MaxCompute serta cara mengaktifkan, mengatur, dan melihat prioritas pekerjaan.
Latar Belakang
Karena sumber daya komputasi langganan MaxCompute terbatas, sistem harus memprioritaskan alokasi sumber daya tersebut untuk pekerjaan penting selama pengembangan data. Misalnya, jika data tertentu harus dihasilkan sebelum pukul 06.00, alur kerja yang menghasilkan data tersebut harus dapat merebut sumber daya komputasi pada waktu proses.
Persyaratan ini dapat dipenuhi dengan mengatur prioritas pekerjaan untuk proyek yang menggunakan sumber daya komputasi subscription. Pengaturan ini memastikan bahwa pekerjaan berprioritas tinggi menerima sumber daya komputasi terlebih dahulu dan dapat merebut sumber daya dari pekerjaan berprioritas rendah saat dimulai.
Ikhtisar Prioritas
Setiap pekerjaan di MaxCompute memiliki prioritas dengan nilai antara 0 hingga 9. Nilai yang lebih kecil menunjukkan prioritas yang lebih tinggi. Pekerjaan berprioritas tinggi mendapatkan sumber daya komputasi sebelum pekerjaan berprioritas rendah.
Catatan:
MaxCompute hanya mendukung pengaturan prioritas pekerjaan untuk proyek yang menggunakan sumber daya komputasi subscription.
Jika fitur prioritas pekerjaan tidak diaktifkan untuk suatu proyek, prioritas default pekerjaan adalah 9. Untuk pekerjaan algoritma PAI, prioritas default-nya adalah 1.
Aktifkan Prioritas
Aktifkan Prioritas di Tingkat Proyek
Hanya Pemilik proyek atau pengguna dengan peran Super_Administrator yang dapat mengaktifkan fitur prioritas dengan menjalankan perintah berikut.
setproject odps.instance.priority.enable=true;Setelah fitur prioritas diaktifkan, prioritas semua pekerjaan dalam proyek yang menggunakan sumber daya komputasi subscription akan langsung berlaku. Namun, pengaturan prioritas yang tidak wajar dapat menyebabkan antrian pekerjaan menjadi tidak teratur.
Periksa prioritas pekerjaan yang ada di Information Schema. Jika perlu, atur ulang prioritas menjadi 9 untuk pekerjaan apa pun yang tidak memiliki prioritas 9, lalu aktifkan fitur prioritas.
Aktifkan Prioritas di Tingkat Kuota
Setelah fitur prioritas diaktifkan, prioritas pekerjaan yang berjalan pada kuota ini akan berlaku—setara dengan mengaktifkan prioritas di tingkat proyek.
Prasyarat
Anda telah membeli kuota langganan Edisi Standar.
Anda telah membuat templat kuota dan rencana kuota. Untuk informasi selengkapnya, lihat Konfigurasi kuota.
Prosedur
Masuk ke Konsol MaxCompute dan pilih Wilayah di pojok kiri atas.
Di panel navigasi sebelah kiri, pilih .
Pada halaman Quotas, temukan kuota target dan klik Quota Configuration di kolom Actions.
Pada halaman Quota Configuration, pilih tab Basic Configurations dan klik Edit Basic Configurations.
Pilih opsi Enable Priority untuk kuota level-2 target.
CatatanJika Type untuk kuota level-2 diatur ke Interactive, parameter Enable Priority tidak tersedia secara default.
Klik OK.
Periksa Prioritas Pekerjaan
Lihat distribusi prioritas pekerjaan.
Contoh perintah:
SELECT get_json_object( REPLACE(settings, '.', '_') ,'$.odps_instance_priority' ) AS priority ,task_type ,COUNT(1) AS cnt FROM information_schema.tasks_history WHERE ds = '${bizdate}' -- bizdate adalah partisi tanggal. GROUP BY get_json_object( REPLACE(settings, '.', '_') ,'$.odps_instance_priority' ) ,task_type ORDER BY cnt DESC LIMIT 100 ;Hasil berikut dikembalikan:
+----------+-----------+------------+ | priority | task_type | cnt | +----------+-----------+------------+ | 9 | SQL | 4 | | NULL | SQL | 1 | | 2 | SQL | 1 | +----------+-----------+------------+Hasil contoh menunjukkan tiga nilai prioritas: NULL, 2, dan 9. Temukan pekerjaan dengan prioritas 2 atau NULL. Nilai NULL biasanya menunjukkan tugas Data Definition Language (DDL), yang dapat Anda abaikan.
Temukan pekerjaan yang prioritasnya bukan 9.
Contoh perintah:
SELECT inst_id ,owner_name ,task_name ,task_type ,settings FROM information_schema.tasks_history WHERE ds = '${bizdate}' AND get_json_object(REPLACE(settings, '.', '_'), '$.odps_instance_priority') = '${priority}' LIMIT 100 ;bizdate: Partisi tanggal. Misalnya, 20200517.
priority: Nilai prioritas selain 9. Misalnya, 2.
Hasil berikut dikembalikan:
+---------+------------+-----------+-----------+----------+ | inst_id | owner_name | task_name | task_type | settings | +---------+------------+-----------+-----------+----------+ | 20200517160200907g4jm**** | ALIYUN$odps_dev_****@prod.trusteeship.aliyunid.com | console_query_task_158973132**** | SQL | {"SKYNET_ID": "21000041****", "odps.instance.priority": "2", "SKYNET_ONDUTY": "113058643178****", "user_agent": "JavaSDK Revision:33acd11 Version:0.30.9 JavaVersion:1.8.0_112 CLT(0.30.2 : 9da012b); Linux(/)", "biz_id": "210000416174_20200517_211843317416_210033365461_1_habai_test_1130586431784115_39419845061****", "SKYNET_NODENAME": "test_priority"} | +---------+------------+-----------+-----------+----------+SKYNET_ID: ID node penjadwalan di DataWorks. Jika bidang ini tidak dikembalikan, pekerjaan tersebut tidak dikirim melalui DataWorks. Dalam kasus ini, periksa bidang owner_name dan user_agent.
SKYNET_ONDUTY: Menunjukkan pekerjaan periodik.
Selesaikan masalah terkait prioritas pekerjaan.
Untuk pekerjaan yang dikirim melalui DataWorks: Jika garis dasar ditetapkan untuk suatu pekerjaan, periksa apakah garis dasar tersebut wajar. Jika tidak, hapus garis dasar tersebut. Untuk informasi selengkapnya, lihat Manajemen garis dasar.
Untuk pekerjaan yang tidak dikirim melalui DataWorks: Gunakan hasil yang dikembalikan untuk menemukan pemilik dan kode. Hapus pengaturan prioritas dari kode untuk mengembalikan prioritas default menjadi 9.
Atur Prioritas
Anda dapat mengatur prioritas pekerjaan dengan cara-cara berikut:
Metode 1: Jalankan client MaxCompute, masuk ke ruang proyek, lalu atur prioritas pekerjaan.
Metode ini sering digunakan untuk mengatur prioritas pekerjaan kueri temporary. Contoh perintah:
SET odps.instance.priority=values; -- Nilai values berkisar dari 0 hingga 9.Metode 2: Jalankan client MaxCompute, masuk ke ruang proyek, lalu teruskan pernyataan SQL sebagai parameter untuk mengatur prioritas pekerjaan.
Metode ini sering digunakan untuk mengatur prioritas pekerjaan kueri temporary. Contoh perintah:
bin/odpscmd --config=xxx --project=xxx --instance-priority=x -e "<sql>"Metode 3: Atur prioritas pekerjaan menggunakan Java SDK.
Anda dapat menggunakan metode ini untuk menerapkan pengaturan prioritas kustom. Untuk informasi selengkapnya, lihat Ikhtisar Java SDK. Contoh perintah:
import com.aliyun.odps.Instance; import com.aliyun.odps.LogView; import com.aliyun.odps.Odps; import com.aliyun.odps.OdpsException; import com.aliyun.odps.account.Account; import com.aliyun.odps.account.AliyunAccount; import com.aliyun.odps.task.SQLTask; public class OdpsPriorityDemo { public static void main(String args[]) throws OdpsException { // AccessKey Akun Alibaba Cloud memiliki izin untuk mengakses semua API, yang menimbulkan risiko keamanan tinggi. // Buat dan gunakan Pengguna RAM untuk panggilan API atau O&M rutin. Masuk ke Konsol RAM untuk membuat Pengguna RAM. // Contoh ini menunjukkan cara menyimpan ID AccessKey dan Rahasia AccessKey dalam Variabel lingkungan. Anda juga dapat menyimpannya dalam file konfigurasi sesuai kebutuhan. // Jangan hard-code ID AccessKey dan Rahasia AccessKey dalam kode Anda. Hal ini dapat menimbulkan risiko keamanan. Account account = new AliyunAccount(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")); Odps odps = new Odps(account); // URL cloud publik. String odpsUrl = "http://service.odps.aliyun.com/api"; odps.setEndpoint(odpsUrl); odps.setDefaultProject("xxxxxxxxxx"); SQLTask task = new SQLTask(); task.setName("adhoc_sql_task_1"); task.setQuery("select count(*) from aa;"); // 5 adalah prioritas pekerjaan. Instance instance = odps.instances().create(task, 5); LogView logView = new LogView(odps); // Cetak Logview untuk memeriksa status eksekusi instans. Langkah ini opsional. System.out.println(logView.generateLogView(instance, 24)); // Tunggu hingga instans selesai. Langkah ini opsional. instance.waitForSuccess(); } }Metode 4: Atur prioritas pekerjaan menggunakan fitur manajemen garis dasar DataWorks.
Metode ini sering digunakan untuk memastikan pekerjaan periodik dan pekerjaan hulu-nya diprioritaskan saat menghasilkan data. Anda dapat menggunakan fitur manajemen garis dasar untuk mengatur prioritas semua pekerjaan dalam tautan data secara terpusat, tanpa harus menangani setiap pekerjaan satu per satu. Untuk informasi selengkapnya tentang fitur manajemen garis dasar DataWorks, lihat Manajemen garis dasar.
Prioritas garis dasar di DataWorks dapat bernilai 1, 3, 5, 7, atau 8. Nilai yang lebih besar menunjukkan prioritas yang lebih tinggi. Saat Anda menggunakan fitur manajemen garis dasar DataWorks untuk mengatur prioritas pekerjaan MaxCompute, prioritas pekerjaan MaxCompute dihitung sebagai: 9 – prioritas garis dasar DataWorks.
CatatanUntuk kueri temporary di DataWorks, garis dasar tidak diatur secara default. Pekerjaan MaxCompute yang diinisiasi memiliki prioritas terendah, yaitu 9.
Untuk alur kerja DataWorks, prioritas garis dasar default-nya adalah 1. Pekerjaan MaxCompute yang diinisiasi memiliki prioritas 8.
Metode 5: Atur prioritas pekerjaan langsung pada node DataWorks.
Metode ini sering digunakan untuk mengatur prioritas pekerjaan kueri temporary. Contoh perintah:
set odps.instance.priority=x; -- x adalah nilai prioritas.
Lihat Prioritas
Pada halaman Logview 2.0, klik tab Json Summary. Anda dapat melihat prioritas pekerjaan pada parameter odps.instance.priority. Untuk informasi selengkapnya tentang operasi Logview 2.0, lihat Gunakan Logview 2.0 untuk melihat informasi eksekusi pekerjaan.
Prioritas yang ditampilkan dalam format XML pada halaman Logview tidak akurat. Untuk proyek yang menggunakan metode penagihan bayar sesuai pemakaian, sistem mengubah prioritas pekerjaan menjadi 9. Perubahan yang sama berlaku untuk proyek yang menggunakan sumber daya komputasi subscription tetapi tidak mengaktifkan fitur prioritas. Hal ini terjadi meskipun nilai prioritas yang diatur dalam XML bukan 9. Perubahan ini mencegah antrian yang tidak adil.