Ketika beberapa pekerjaan bersaing untuk sumber daya komputasi yang sama, MaxCompute menggunakan prioritas pekerjaan untuk menentukan pekerjaan mana yang mendapatkan sumber daya terlebih dahulu. Pekerjaan dengan prioritas lebih tinggi menerima sumber daya komputasi sebelum pekerjaan dengan prioritas lebih rendah dan dapat merebut kembali sumber daya dari pekerjaan berprioritas rendah yang sedang berjalan. Gunakan prioritas pekerjaan untuk melindungi alur kerja yang kritis terhadap waktu—misalnya, pekerjaan ETL yang harus selesai sebelum pukul 06.00—ketika kluster sedang sibuk menangani beban kerja yang kurang mendesak.
Cara kerja
Setiap pekerjaan MaxCompute memiliki nilai prioritas dari 0 hingga 9. Angka yang lebih kecil berarti prioritas lebih tinggi: prioritas 0 adalah yang tertinggi, dan prioritas 9 adalah yang terendah.
Ketika sumber daya komputasi terbatas, MaxCompute menjadwalkan pekerjaan berdasarkan urutan prioritas. Jika pekerjaan berprioritas tinggi tiba saat sumber daya sedang sepenuhnya digunakan oleh pekerjaan berprioritas rendah, pekerjaan tersebut akan merebut kembali sumber daya tersebut untuk mengklaim sumber daya yang dibutuhkannya.
Perilaku default saat fitur prioritas dinonaktifkan:
Semua pekerjaan: prioritas 9 (terendah)
Pekerjaan algoritma PAI: prioritas 1 (hampir tertinggi)
Prioritas NULL dalam hasil kueri biasanya menunjukkan tugas DDL, yang dapat Anda abaikan.
Prasyarat
Sebelum mengaktifkan prioritas pekerjaan, pastikan Anda telah memiliki:
Peran pemilik Proyek atau
Super_Administratordi proyek MaxCompute(Untuk pengaktifan di tingkat kuota) Templat kuota dan rencana kuota yang telah dikonfigurasi. Lihat Konfigurasi kuota
Aktifkan prioritas pekerjaan
Sebelum mengaktifkan prioritas pekerjaan, lakukan audit terhadap prioritas pekerjaan yang ada menggunakan Information Schema dan atur ulang semua nilai selain 9 menjadi 9. Melewatkan langkah ini dapat menyebabkan pekerjaan dengan pengaturan prioritas tinggi yang sudah ada langsung masuk antrian secara tidak terduga.
Periksa prioritas pekerjaan yang ada
Jalankan kueri berikut di Information Schema untuk melihat distribusi prioritas di seluruh pekerjaan dalam partisi tanggal tertentu:
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}' -- Ganti dengan partisi tanggal, misalnya 20200517.
GROUP BY get_json_object(
REPLACE(settings, '.', '_'),
'$.odps_instance_priority'
),
task_type
ORDER BY cnt DESC
LIMIT 100;Contoh output:
+----------+-----------+-----+
| priority | task_type | cnt |
+----------+-----------+-----+
| 9 | SQL | 4 |
| NULL | SQL | 1 |
| 2 | SQL | 1 |
+----------+-----------+-----+Pekerjaan dengan prioritas NULL adalah tugas DDL — abaikan saja. Untuk pekerjaan apa pun dengan nilai prioritas selain 9 (seperti 2 pada contoh ini), identifikasi pemiliknya dan atur ulang prioritasnya sebelum mengaktifkan fitur tersebut.
Untuk menemukan detail pekerjaan dengan nilai prioritas tertentu:
SELECT inst_id,
owner_name,
task_name,
task_type,
settings
FROM information_schema.tasks_history
WHERE ds = '${bizdate}' -- Ganti dengan partisi tanggal, misalnya 20200517.
AND get_json_object(
REPLACE(settings, '.', '_'),
'$.odps_instance_priority'
) = '${priority}' -- Ganti dengan nilai prioritas yang ingin difilter, misalnya 2.
LIMIT 100;Bidang utama dalam output:
Field | Description |
| ID node penjadwalan DataWorks. Tidak tersedia jika pekerjaan tidak diajukan melalui DataWorks. |
| Tersedia jika pekerjaan merupakan pekerjaan periodik. |
| Pemilik pekerjaan. Gunakan ini untuk melacak pekerjaan non-DataWorks. |
Setelah mengidentifikasi pekerjaan dengan prioritas bukan 9:
Pekerjaan DataWorks: Periksa apakah garis dasar terkait masuk akal. Jika tidak, hapus garis dasar tersebut. Lihat Manajemen garis dasar.
Pekerjaan non-DataWorks: Hubungi pemilik menggunakan
owner_namedanuser_agent. Hapus pengaturan prioritas dari kode pekerjaan untuk mengembalikan prioritas default menjadi 9.
Aktifkan prioritas di tingkat proyek
Hanya pemilik proyek atau pengguna dengan peran Super_Administrator yang dapat mengaktifkan prioritas. Jalankan perintah berikut di klien MaxCompute:
setproject odps.instance.priority.enable=true;Prioritas langsung berlaku untuk semua pekerjaan dalam proyek tersebut.
Aktifkan prioritas di tingkat kuota
Mengaktifkan prioritas di tingkat kuota menerapkan penjadwalan berbasis prioritas untuk semua pekerjaan yang berjalan di bawah kuota tersebut.
Masuk ke Konsol MaxCompute dan pilih wilayah.Konsol MaxCompute
Di panel navigasi, pilih Manage Configurations > Quotas.
Temukan kuota target dan klik Quota Configuration di kolom Actions.
Di tab Basic Configurations, klik Edit Basic Configurations.
Pilih opsi Enable Priority untuk kuota level-2 target.
Jika Type kuota level-2 adalah Interactive, opsi Enable Priority tidak tersedia secara default.
Klik OK.
Tetapkan prioritas pekerjaan
Pilih metode yang sesuai dengan alur kerja Anda:
Method | Best for |
MaxCompute client (perintah SET) | Kueri ad hoc |
MaxCompute client (flag CLI) | Kueri ad hoc melalui skrip |
Java SDK | Aplikasi dengan logika prioritas kustom |
Manajemen garis dasar DataWorks | Alur kerja periodik dengan persyaratan SLA |
Pengaturan node DataWorks | Kueri ad hoc di DataWorks |
Metode 1: Klien MaxCompute — perintah SET
Jalankan perintah ini sebelum pernyataan SQL Anda di klien MaxCompute:
SET odps.instance.priority = <value>;
-- <value> adalah bilangan bulat dari 0 (prioritas tertinggi) hingga 9 (prioritas terendah).Metode 2: Klien MaxCompute — flag CLI
Teruskan prioritas sebagai flag saat mengirimkan pernyataan SQL:
bin/odpscmd --config=<config-file> --project=<project-name> --instance-priority=<value> -e "<sql>"Metode 3: Java SDK
Gunakan metode odps.instances().create(task, priority) untuk menetapkan prioritas saat mengirimkan pekerjaan:
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 {
// Muat kredensial dari variabel lingkungan.
// Jangan pernah menyematkan kredensial AccessKey secara langsung di kode Anda.
Account account = new AliyunAccount(
System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
);
Odps odps = new Odps(account);
odps.setEndpoint("http://service.odps.aliyun.com/api");
odps.setDefaultProject("<your-project-name>");
SQLTask task = new SQLTask();
task.setName("adhoc_sql_task_1");
task.setQuery("select count(*) from aa;");
// Kirim pekerjaan dengan prioritas 5.
// Nilai prioritas: 0 (tertinggi) hingga 9 (terendah).
Instance instance = odps.instances().create(task, 5);
// Cetak URL LogView untuk memantau status pekerjaan (opsional).
LogView logView = new LogView(odps);
System.out.println(logView.generateLogView(instance, 24));
// Tunggu hingga pekerjaan selesai (opsional).
instance.waitForSuccess();
}
}Untuk detail lebih lanjut, lihat Ikhtisar Java SDK.
Metode 4: Manajemen garis dasar DataWorks
Gunakan metode ini ketika Anda memerlukan alur kerja periodik dan semua pekerjaan hulu-nya selesai dalam jendela SLA. Manajemen garis dasar menetapkan prioritas untuk semua pekerjaan dalam satu alur kerja sekaligus — tidak perlu mengonfigurasi setiap pekerjaan satu per satu.
Prioritas garis dasar DataWorks dan padanannya di MaxCompute:
DataWorks baseline priority | MaxCompute job priority | Notes |
8 (tertinggi di DataWorks) | 1 | Prioritas praktis tertinggi |
7 | 2 | |
5 | 4 | |
3 | 6 | |
1 (default) | 8 | Default untuk alur kerja DataWorks |
No baseline (ad hoc) | 9 | Default untuk kueri ad hoc DataWorks |
Rumus konversi: Prioritas MaxCompute = 9 − prioritas garis dasar DataWorks
Untuk detail lebih lanjut, lihat Manajemen garis dasar.
Kueri ad hoc DataWorks tidak memiliki garis dasar secara default, sehingga pekerjaan MaxCompute yang diajukannya menggunakan prioritas terendah (9). Alur kerja DataWorks memiliki prioritas garis dasar default 1, sehingga pekerjaannya menggunakan prioritas 8.
Metode 5: Pengaturan node DataWorks
Tetapkan prioritas langsung di node DataWorks untuk kueri ad hoc:
set odps.instance.priority = <value>;
-- <value> adalah nilai prioritas dari 0 (tertinggi) hingga 9 (terendah).Lihat prioritas pekerjaan
Untuk memeriksa prioritas pekerjaan tertentu, buka pekerjaan tersebut di Logview 2.0, buka tab Json Summary, lalu cari parameter odps.instance.priority.

Prioritas yang ditampilkan dalam XML pada halaman Logview tidak akurat. Untuk proyek dengan prioritas dinonaktifkan, sistem mengonversi semua nilai prioritas selain 9 menjadi 9 dalam XML untuk mencegah loncatan antrian yang tidak disengaja. Selalu gunakan tab Json Summary untuk informasi prioritas yang akurat.