Ketika beberapa tim berbagi kluster Hadoop, konflik sumber daya menyebabkan kinerja job yang tidak dapat diprediksi dan alokasi biaya yang sulit. Penjadwal YARN mengatasi hal ini dengan menerapkan jaminan sumber daya per penyewa, kebijakan keadilan multi-penyewa, serta optimalisasi pemanfaatan node untuk mencegah hotspots.
Capacity Scheduler direkomendasikan untuk YARN E-MapReduce (EMR). Dokumen ini menjelaskan cara kerja dan konfigurasi Capacity Scheduler. Untuk jenis penjadwal lainnya, lihat dokumentasi Apache Hadoop YARN.
Pilih penjadwal
| Penjadwal | Bawaan | Dukungan multi-penyewa | Label / atribut / batasan penempatan node | Kapan digunakan |
|---|---|---|---|---|
| FIFO Scheduler | — | Tidak | Tidak | Skenario sederhana dengan satu penyewa. Jarang digunakan di lingkungan produksi. |
| Fair Scheduler | CDH (Cloudera Distributed Hadoop) | Ya | Tidak | Kluster CDH lama. Tidak direkomendasikan untuk penerapan baru. |
| Capacity Scheduler | Apache Hadoop, HDP, CDP | Ya | Ya | Kluster produksi multi-penyewa dengan persyaratan kinerja dan isolasi sumber daya. Direkomendasikan untuk EMR YARN. |
Capacity Scheduler menyediakan kemampuan lengkap untuk manajemen multi-penyewa dan penjadwalan sumber daya, termasuk penjadwalan global, label node, atribut node, serta batasan penempatan. Sisa dokumen ini membahas Capacity Scheduler secara mendetail.
Cara kerja Capacity Scheduler
Mode penjadwalan
MainScheduler pada Capacity Scheduler mendukung tiga mode pemicu:
| Mode | Cara kerja | Paling cocok untuk |
|---|---|---|
| Berdasarkan heartbeat node | MainScheduler dipicu saat sebuah node mengirim heartbeat. Penjadwalan bersifat lokal terhadap node tersebut dan bergantung pada interval heartbeat, yang dapat menyebabkan efisiensi penjadwalan rendah ketika banyak node memiliki sumber daya tidak mencukupi. | Kluster dengan persyaratan rendah terhadap kinerja dan fitur penjadwalan. |
| Penjadwalan asinkron | Sebuah thread asinkron memilih node secara acak dari daftar node untuk penjadwalan. Ini meningkatkan throughput tanpa memerlukan status global. | Kluster dengan persyaratan tinggi terhadap kinerja tetapi persyaratan fitur rendah. |
| Penjadwalan global | Sebuah thread global memilih aplikasi berdasarkan keadilan multi-penyewa dan prioritas, lalu memilih node berdasarkan ukuran sumber daya, batasan penempatan, dan distribusi sumber daya di seluruh kluster. Ini menghasilkan keputusan penjadwalan optimal. | Kluster dengan persyaratan tinggi baik terhadap kinerja maupun fitur penjadwalan. |
Penjadwalan global memerlukan semua konfigurasi penjadwalan asinkron selain pengaturannya sendiri. Lihat Penjadwalan global untuk detailnya.
Arsitektur (penjadwalan global)
Gambar berikut menunjukkan arsitektur penjadwalan global berdasarkan YARN 3.2 atau versi lebih baru.
MainScheduler berjalan sebagai framework multi-threaded asinkron:
Thread alokasi mengidentifikasi permintaan sumber daya dengan prioritas tertinggi, memilih node kandidat berdasarkan ukuran sumber daya dan batasan penempatan, menghasilkan proposal alokasi, lalu menempatkannya dalam antrean sementara.
Thread pengiriman mengambil proposal alokasi, memeriksa ulang batasan penempatan dan persyaratan aplikasi/node, lalu melakukan commit atau membuang setiap proposal serta memperbarui status penjadwal.
ReScheduler berjalan secara periodik sebagai framework pemantauan sumber daya dinamis. Komponen ini menerapkan kebijakan preemption antar-antrian, intra-antrian, dan preemption sumber daya yang dicadangkan.
Node Sorting Manager dan Placement Constraint Manager adalah plugin penjadwalan global untuk MainScheduler. Keduanya menangani load balancing dan manajemen batasan penempatan kompleks.
Proses alokasi Kontainer
Gambar berikut menunjukkan proses penjadwalan global Capacity Scheduler.
MainScheduler mengalokasikan kontainer dalam enam langkah:
Pilih partisi (label node). Kluster dapat memiliki satu atau lebih partisi. MainScheduler mengalokasikan kontainer ke partisi secara bergiliran.
Pilih antrian leaf. Dengan menelusuri dari antrian root ke bawah, antrian anak di setiap level dikunjungi dalam urutan naik berdasarkan persentase sumber daya terjamin mereka. Antrian dengan utilisasi lebih rendah (ditampilkan hijau pada gambar di atas) menerima sumber daya sebelum antrian dengan utilisasi lebih tinggi (ditampilkan merah).
Pilih aplikasi. Di dalam suatu antrian, MainScheduler memilih aplikasi berdasarkan kebijakan pengurutan antrian tersebut:
Kebijakan fair: urutan naik berdasarkan sumber daya memori yang dialokasikan
Kebijakan FIFO: urutan turun berdasarkan prioritas, lalu urutan naik berdasarkan ID aplikasi
Pilih permintaan. MainScheduler memilih permintaan dalam aplikasi yang dipilih berdasarkan prioritas.
Pilih node kandidat yang telah diurutkan. MainScheduler mencari semua node yang telah diurutkan untuk menemukan kandidat yang memenuhi persyaratan sumber daya dan batasan penempatan permintaan tersebut.
Alokasikan sebuah kontainer. Untuk setiap node kandidat, MainScheduler memeriksa sumber daya yang dialokasikan, sedang digunakan, dan belum dikonfirmasi milik antrian dan node tersebut. Jika pemeriksaan lolos, sistem menghasilkan proposal alokasi dan menempatkannya dalam antrean proposal.
Setelah alokasi, thread pengiriman memverifikasi setiap proposal terhadap persyaratan aplikasi, node, dan batasan penempatan. Proposal yang gagal diverifikasi akan dibuang; proposal yang disetujui diterapkan dan memperbarui akuntansi sumber daya untuk aplikasi dan node tersebut.
Preemption
ReScheduler memantau sumber daya kluster dan memicu preemption ketika total sumber daya tersedia turun di bawah ambang batas tertentu dan aplikasi tertentu kekurangan sumber daya.
| Jenis preemption | Kondisi pemicu |
|---|---|
| Preemption antar-antrian | Sumber daya terjamin suatu antrian telah sepenuhnya digunakan, tetapi antrian lain yang berhak atas sumber daya tersebut tidak bisa mendapatkannya karena kluster tidak memiliki kapasitas idle. Sumber daya dalam kapasitas antrian dijamin; sumber daya di atas kapasitas tetapi di bawah kapasitas maksimum dibagi bersama. |
| Intra-Queue Preemption | Aplikasi berprioritas tinggi dalam suatu antrian membutuhkan sumber daya, tetapi alokasi total antrian tersebut telah habis. ReScheduler menyeimbangkan kembali berdasarkan kebijakan FIFO atau fair. |
| Preemption sumber daya yang dicadangkan | Tugas yang mencadangkan sumber daya memenuhi kondisi rilis, seperti timeout. Tugas tersebut beserta sumber daya yang dicadangkannya dilepas. |
Fitur utama
Manajemen antrian multi-level: Kuota sumber daya antrian induk membatasi total penggunaan semua antrian anaknya. Tidak ada satu pun antrian anak yang dapat melebihi kuota induknya. Hal ini memberikan isolasi multi-penyewa yang terkendali untuk struktur organisasi kompleks.
Kuota sumber daya: Tetapkan kapasitas terjamin dan kapasitas maksimum per antrian, batasi jumlah aplikasi konkuren, batasi pangsa sumber daya ApplicationMaster (AM), dan kendalikan rasio sumber daya per pengguna.
Berbagi sumber daya elastis: Ketika kluster dan antrian induk memiliki sumber daya idle, antrian anak dapat meminjam sumber daya terjamin yang tidak digunakan dari antrian saudara. Kapasitas elastis = kapasitas maksimum antrian − kapasitas antrian.
Kontrol akses berbasis Access Control List (ACL): Tetapkan izin submit dan manage per antrian kepada pengguna atau kelompok tertentu. Satu pengguna dapat mengelola beberapa antrian, atau beberapa pengguna dapat berbagi akses submit ke antrian yang sama.
Penjadwalan antrian antar-penyewa: Pada level antrian yang sama, antrian dijadwalkan dalam urutan naik berdasarkan persentase sumber daya terjamin mereka, sehingga antrian dengan alokasi lebih kecil dilayani terlebih dahulu. Saat prioritas dikonfigurasi, antrian dibagi menjadi dua kelompok — yang berada pada atau di bawah kapasitas dan yang di atasnya — serta antrian pada atau di bawah kapasitas dilayani terlebih dahulu dalam setiap kelompok.
Penjadwalan aplikasi intra-penyewa: Di dalam suatu antrian, aplikasi dijadwalkan berdasarkan kebijakan pengurutan antrian tersebut. Dengan kebijakan FIFO: prioritas turun, lalu waktu submit naik. Dengan kebijakan fair: persentase sumber daya yang digunakan naik, lalu waktu submit naik.
Preemption: Menjaga keseimbangan penggunaan sumber daya antrian dan aplikasi saat sumber daya kluster berubah. Lihat Preemption untuk tiga jenis preemption tersebut.
Konfigurasi Capacity Scheduler
Konfigurasi global
Konfigurasikan pengaturan berikut di yarn-site.xml dan capacity-scheduler.xml.
| File konfigurasi | Item konfigurasi | Nilai yang direkomendasikan | Deskripsi |
|---|---|---|---|
yarn-site.xml | yarn.resourcemanager.scheduler.class | Biarkan kosong | Kelas penjadwal. Default: org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler. |
capacity-scheduler.xml | yarn.scheduler.capacity.maximum-applications | Biarkan kosong | Maksimum aplikasi konkuren di kluster. Default: 10000. |
yarn.scheduler.capacity.global-queue-max-application | Biarkan kosong | Maksimum aplikasi konkuren per antrian. Jika tidak diatur, batas per antrian dihitung sebagai: Kapasitas antrian / Sumber daya kluster × maximum-applications. Konfigurasikan ini hanya untuk antrian dengan kebutuhan khusus, seperti antrian berkapasitas rendah yang perlu menjalankan banyak aplikasi. | |
yarn.scheduler.capacity.maximum-am-resource-percent | 0.25 | Persentase maksimum sumber daya antrian yang dapat digunakan oleh kontainer ApplicationMaster (AM), dibatasi pada: nilai ini × kapasitas maksimum antrian. Default: 0.1. Tingkatkan nilai ini jika suatu antrian menjalankan banyak aplikasi kecil dengan rasio kontainer AM yang tinggi. | |
yarn.scheduler.capacity.resource-calculator | org.apache.hadoop.yarn.util.resource.DominantResourceCalculator | Kalkulator sumber daya untuk antrian, node, dan aplikasi. Default (DefaultResourceCalculator) hanya mempertimbangkan memori. DominantResourceCalculator mempertimbangkan semua jenis sumber daya yang dikonfigurasi (memori, CPU, dan lainnya) dan menggunakan sumber daya yang paling banyak dikonsumsi sebagai sumber daya utama. Catatan Perubahan pada item ini memerlukan restart ResourceManager (atau alih bencana primary/secondary jika Ketersediaan tinggi (HA) diaktifkan). Operasi refresh saja tidak cukup. | |
yarn.scheduler.capacity.node-locality-delay | -1 | Jumlah siklus penjadwalan yang dilewati sebelum melonggarkan lokalitas node. Default: 40. Atur ke -1 untuk menonaktifkan penundaan lokalitas dan meningkatkan kinerja penjadwalan. Dengan jaringan dan penyimpanan modern, penjadwalan lokal jarang menjadi bottleneck. |
Konfigurasi heartbeat node
| File konfigurasi | Item konfigurasi | Nilai yang direkomendasikan | Deskripsi |
|---|---|---|---|
capacity-scheduler.xml | yarn.scheduler.capacity.per-node-heartbeat.multiple-assignments-enabled | false | Apakah akan mengalokasikan beberapa kontainer per heartbeat. Default: true. Mengaktifkan ini dapat memengaruhi load balancing dan menyebabkan hotspots. |
yarn.scheduler.capacity.per-node-heartbeat.maximum-container-assignments | Biarkan kosong | Maksimum kontainer yang dapat dialokasikan per heartbeat. Default: 100. Efektif hanya jika multiple-assignments-enabled bernilai true. | |
yarn.scheduler.capacity.per-node-heartbeat.maximum-offswitch-assignments | Biarkan kosong | Maksimum kontainer off-switch yang dapat dialokasikan per heartbeat. Efektif hanya jika multiple-assignments-enabled bernilai true. |
Penjadwalan asinkron
| File konfigurasi | Item konfigurasi | Nilai yang direkomendasikan | Deskripsi |
|---|---|---|---|
capacity-scheduler.xml | yarn.scheduler.capacity.schedule-asynchronously.enable | true | Apakah akan mengaktifkan penjadwalan asinkron. Default: false. Aktifkan ini untuk meningkatkan kinerja penjadwalan. |
yarn.scheduler.capacity.schedule-asynchronously.maximum-threads | 1 atau biarkan kosong | Maksimum thread untuk penjadwalan asinkron. Default: 1. Beberapa thread dapat menghasilkan proposal duplikat; satu thread sudah cukup dalam kebanyakan kasus. | |
yarn.scheduler.capacity.schedule-asynchronously.maximum-pending-backlogs | Biarkan kosong | Maksimum proposal alokasi tertunda dalam antrean. Default: 100. Tingkatkan nilai ini untuk kluster besar. |
Penjadwalan global
Penjadwalan global memerlukan semua konfigurasi penjadwalan asinkron yang tercantum dalam tabel sebelumnya.
| File konfigurasi | Item konfigurasi | Nilai yang direkomendasikan | Deskripsi |
|---|---|---|---|
capacity-scheduler.xml | yarn.scheduler.capacity.multi-node-placement-enabled | true | Apakah akan mengaktifkan penjadwalan global. Default: false. Aktifkan untuk kluster dengan persyaratan tinggi baik terhadap kinerja maupun fitur penjadwalan. |
yarn.scheduler.capacity.multi-node-sorting.policy | default | Nama kebijakan penjadwalan global aktif. | |
yarn.scheduler.capacity.multi-node-sorting.policy.names | default | Daftar nama kebijakan penjadwalan global yang dipisahkan koma. | |
yarn.scheduler.capacity.multi-node-sorting.policy.default.class | org.apache.hadoop.yarn.server.resourcemanager.scheduler.placement.ResourceUsageMultiNodeLookupPolicy | Kelas implementasi untuk kebijakan default. Mengurutkan node dalam urutan naik berdasarkan sumber daya absolut yang dialokasikan. | |
yarn.scheduler.capacity.multi-node-sorting.policy.default.sorting-interval.ms | 0 (kluster kecil) / 1000 (kluster dengan lebih dari 1.000 node) | Interval refresh cache untuk pengurutan node. Default: 1000 ms. Atur ke 0 untuk pengurutan sinkron (tanpa cache). Untuk kluster besar, atur ke 1000 untuk mengaktifkan caching node dan meningkatkan kinerja. Catatan Dengan caching node diaktifkan, kontainer dapat berkonsentrasi pada node dengan peringkat tertinggi. Uji dampaknya sebelum mengaktifkan ini di lingkungan produksi. |
Konfigurasi partisi node
Untuk konfigurasi partisi node (label node), lihat Label Node.
Konfigurasi antrian
Konfigurasi dasar antrian
Konfigurasi dasar antrian menentukan hierarki antrian, kapasitas terjamin, dan kapasitas maksimum. Contoh berikut menunjukkan antrian root dengan empat antrian anak yang dibagikan di antara departemen organisasi.
Struktur antrian contoh:
| Antrian | Sumber daya terjamin | Sumber daya maksimum | Antrian anak |
|---|---|---|---|
root | 100% | 100% | dev, test, support, default |
root.dev | 50% | 100% | training, services |
root.dev.training | 40% dari dev | 100% pengembangan | — |
root.dev.services | 60% dari dev | 100% dari dev | — |
root.test | 30% | 50% | — |
root.support | 10% | 30% | — |
root.default | 10% | 100% | — |
Contoh capacity-scheduler.xml berikut mengonfigurasi struktur ini. Salin dan sesuaikan agar sesuai dengan tata letak antrian organisasi Anda.
<configuration>
<!-- Antrian anak level root -->
<property>
<name>yarn.scheduler.capacity.root.queues</name>
<value>dev,test,support,default</value>
</property>
<!-- Antrian dev: 50% terjamin, 100% maks -->
<property>
<name>yarn.scheduler.capacity.root.dev.capacity</name>
<value>50</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.dev.maximum-capacity</name>
<value>100</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.dev.queues</name>
<value>training,services</value>
</property>
<!-- dev.training: 40% dari dev terjamin, 100% dari dev maks -->
<property>
<name>yarn.scheduler.capacity.root.dev.training.capacity</name>
<value>40</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.dev.training.maximum-capacity</name>
<value>100</value>
</property>
<!-- dev.services: 60% dari dev terjamin, 100% dari dev maks -->
<property>
<name>yarn.scheduler.capacity.root.dev.services.capacity</name>
<value>60</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.dev.services.maximum-capacity</name>
<value>100</value>
</property>
<!-- Antrian test: 30% terjamin, 50% maks -->
<property>
<name>yarn.scheduler.capacity.root.test.capacity</name>
<value>30</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.test.maximum-capacity</name>
<value>50</value>
</property>
<!-- Antrian support: 10% terjamin, 30% maks -->
<property>
<name>yarn.scheduler.capacity.root.support.capacity</name>
<value>10</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.support.maximum-capacity</name>
<value>30</value>
</property>
<!-- Antrian default: 10% terjamin, 100% maks -->
<property>
<name>yarn.scheduler.capacity.root.default.capacity</name>
<value>10</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.default.maximum-capacity</name>
<value>100</value>
</property>
</configuration>Di halaman Application Queues YARN ResourceManager, Anda dapat memverifikasi bahwa konfigurasi antrian telah diterapkan. Pohon hierarki antrian menampilkan antrian berikut di bawah root: default, test, support, dev, dan di bawah dev terdapat sub-antrian training dan services. Perluas antrian dev.services untuk melihat detail status berjalannya:
Status Antrian: RUNNING
Kapasitas Efektif:
memory:7864, vCores:4(60,0%)Kapasitas Maks Efektif:
memory:26214, vCores:16(100,0%)Kapasitas Terkonfigurasi Absolut: 30,0%
Maks Aplikasi: 3000
Kebijakan Pengurutan: FifoOrderingPolicy
Preemption: disabled
Tabel berikut menjelaskan parameter capacity-scheduler.xml untuk struktur ini.
| File konfigurasi | Item konfigurasi | Nilai contoh | Deskripsi |
|---|---|---|---|
capacity-scheduler.xml | yarn.scheduler.capacity.root.queues | dev,test,support,default | Antrian anak dari antrian root. Pisahkan beberapa antrian dengan koma. |
yarn.scheduler.capacity.root.dev.capacity | 50 | Persentase sumber daya terjamin untuk antrian dev relatif terhadap total sumber daya kluster. | |
yarn.scheduler.capacity.root.dev.maximum-capacity | 100 | Persentase sumber daya maksimum untuk antrian dev relatif terhadap total sumber daya kluster. | |
yarn.scheduler.capacity.root.dev.queues | training,services | Antrian anak dari antrian dev. | |
yarn.scheduler.capacity.root.dev.training.capacity | 40 | Persentase sumber daya terjamin untuk training relatif terhadap sumber daya terjamin dev. | |
yarn.scheduler.capacity.root.dev.training.maximum-capacity | 100 | Persentase sumber daya maksimum untuk training relatif terhadap sumber daya maksimum dev. | |
yarn.scheduler.capacity.root.dev.services.capacity | 60 | Persentase sumber daya terjamin untuk services relatif terhadap sumber daya terjamin dev. | |
yarn.scheduler.capacity.root.dev.services.maximum-capacity | 100 | Persentase sumber daya maksimum untuk services relatif terhadap sumber daya maksimum dev. | |
yarn.scheduler.capacity.root.test.capacity | 30 | Persentase sumber daya terjamin untuk test relatif terhadap total sumber daya kluster. | |
yarn.scheduler.capacity.root.test.maximum-capacity | 50 | Persentase sumber daya maksimum untuk test relatif terhadap total sumber daya kluster. | |
yarn.scheduler.capacity.root.support.capacity | 10 | Persentase sumber daya terjamin untuk support relatif terhadap total sumber daya kluster. | |
yarn.scheduler.capacity.root.support.maximum-capacity | 30 | Persentase sumber daya maksimum untuk support relatif terhadap total sumber daya kluster. | |
yarn.scheduler.capacity.root.default.capacity | 10 | Persentase sumber daya terjamin untuk default relatif terhadap total sumber daya kluster. | |
yarn.scheduler.capacity.root.default.maximum-capacity | 100 | Persentase sumber daya maksimum untuk default relatif terhadap total sumber daya kluster. |
Konfigurasi lanjutan antrian
| File konfigurasi | Item konfigurasi | Nilai yang direkomendasikan | Deskripsi |
|---|---|---|---|
capacity-scheduler.xml | yarn.scheduler.capacity.<queue_path>.ordering-policy | fair | Kebijakan pengurutan aplikasi di dalam suatu antrian. fifo (default): prioritas turun, lalu waktu submit naik. fair: persentase sumber daya yang digunakan naik, lalu waktu submit naik. Atur ke fair untuk sebagian besar antrian produksi. |
yarn.scheduler.capacity.<queue_path>.ordering-policy.fair.enable-size-based-weight | Biarkan kosong | Apakah akan menggunakan penjadwalan fair berbasis bobot. Default: false (jadwalkan berdasarkan sumber daya yang digunakan). Saat true, penjadwalan didasarkan pada Sumber daya yang Digunakan / Sumber daya yang Dibutuhkan, yang membantu mencegah aplikasi besar kelaparan selama konflik sumber daya. | |
yarn.scheduler.capacity.<queue_path>.state | Biarkan kosong | Status antrian. Default: RUNNING. Atur ke STOPPED hanya saat menghapus antrian. Antrian tersebut akan dihapus setelah semua aplikasinya selesai. | |
yarn.scheduler.capacity.<queue_path>.maximum-am-resource-percent | Biarkan kosong | Batas sumber daya AM per antrian. Default: mewarisi dari yarn.scheduler.capacity.maximum-am-resource-percent. | |
yarn.scheduler.capacity.<queue_path>.user-limit-factor | Biarkan kosong | Faktor batas atas untuk satu pengguna. Sumber daya maksimum yang dapat digunakan pengguna: min(sumber daya maksimum antrian, sumber daya terjamin antrian × userLimitFactor). Default: 1.0. | |
yarn.scheduler.capacity.<queue_path>.minimum-user-limit-percent | Biarkan kosong | Persentase minimum sumber daya terjamin yang dapat digunakan satu pengguna. Dihitung sebagai: max(sumber daya terjamin / jumlah pengguna, sumber daya terjamin × min(userLimitFactor) / 100). Default: 100. | |
yarn.scheduler.capacity.<queue_path>.maximum-applications | Biarkan kosong | Maksimum aplikasi konkuren di antrian ini. Default: persentase sumber daya terjamin × yarn.scheduler.capacity.maximum-applications. | |
yarn.scheduler.capacity.<queue_path>.acl_submit_applications | Biarkan kosong | ACL submit untuk antrian ini. Mewarisi dari antrian induk jika tidak diatur. | |
yarn.scheduler.capacity.<queue_path>.acl_administer_queue | Biarkan kosong | ACL manajemen untuk antrian ini. Mewarisi dari antrian induk jika tidak diatur. |
Konfigurasi ACL
ACL dinonaktifkan secara default. Aktifkan hanya jika organisasi Anda memerlukan kontrol akses terhadap submit dan manajemen antrian.
| File konfigurasi | Item konfigurasi | Nilai yang direkomendasikan | Deskripsi |
|---|---|---|---|
yarn-site.xml | yarn.acl.enabled | Biarkan kosong | Apakah akan mengaktifkan ACL. Default: false. |
capacity-scheduler.xml | yarn.scheduler.capacity.<queue_path>.acl_submit_applications | Biarkan kosong | ACL submit. Mewarisi dari antrian induk jika tidak diatur. Secara default, antrian root mengizinkan semua pengguna untuk mengirim aplikasi. |
yarn.scheduler.capacity.<queue_path>.acl_administer_queue | Biarkan kosong | ACL manajemen. Mewarisi dari antrian induk jika tidak diatur. Secara default, antrian root mengizinkan semua pengguna untuk mengelola antrian. |
ACL antrian induk berlaku untuk semua antrian anaknya. Jika antrian root mengizinkan semua pengguna (default), pembatasan ACL antrian anak tidak efektif. Untuk menerapkan ACL antrian anak, pertama-tama batasi antrian root dengan mengatur:
yarn.scheduler.capacity.root.acl_submit_applications=<space>yarn.scheduler.capacity.root.acl_administer_queue=<space>
Untuk memberikan izin submit dan manage kepada pengguna atau kelompok pada suatu antrian, konfigurasikan kedua parameter acl_submit_applications dan acl_administer_queue untuk antrian tersebut.
Konfigurasi preemption
Preemption memastikan distribusi sumber daya yang adil di antara penyewa dan menghormati prioritas aplikasi. Aktifkan untuk kluster dengan persyaratan penjadwalan ketat. Preemption memerlukan YARN V2.8.0 atau versi lebih baru.
| File konfigurasi | Item konfigurasi | Nilai yang direkomendasikan | Deskripsi |
|---|---|---|---|
yarn-site.xml | yarn.resourcemanager.scheduler.monitor.enable | true | Aktifkan preemption. |
capacity-scheduler.xml | yarn.resourcemanager.monitor.capacity.preemption.intra-queue-preemption.enabled | true | Aktifkan preemption intra-antrian. Preemption antar-antrian diaktifkan secara default dan tidak dapat dinonaktifkan. |
yarn.resourcemanager.monitor.capacity.preemption.intra-queue-preemption.preemption-order-policy | priority_first | Kebijakan urutan preemption intra-antrian. Default: userlimit_first. | |
yarn.scheduler.capacity.<queue-path>.disable_preemption | true | Apakah akan melindungi antrian ini dari preemption. Mewarisi dari induk jika tidak diatur. Mengatur ini ke true pada antrian root melindungi semua antrian. Default di level root: false (antrian dapat dipreempt). | |
yarn.scheduler.capacity.<queue-path>.intra-queue-preemption.disable_preemption | true | Apakah akan menonaktifkan preemption intra-antrian untuk antrian ini. Mewarisi dari induk jika tidak diatur. |
Kelola konfigurasi antrian dengan RESTful API
Mulai dari YARN V3.2.0, Anda dapat menggunakan RESTful API untuk menerapkan pembaruan konfigurasi inkremental dan melihat semua pengaturan aktif saat ini di capacity-scheduler.xml. Versi sebelumnya hanya mendukung pembaruan penuh melalui operasi RefreshQueues, tanpa cara untuk memeriksa konfigurasi aktif.
Untuk mengaktifkan manajemen antrian RESTful API, tambahkan pengaturan berikut ke yarn-site.xml:
| Item konfigurasi | Nilai yang direkomendasikan | Deskripsi |
|---|---|---|
yarn.scheduler.configuration.store.class | fs | Jenis penyimpanan untuk konfigurasi penjadwal. |
yarn.scheduler.configuration.max.version | 100 | Maksimum jumlah versi konfigurasi yang disimpan di sistem file. Versi lama dihapus secara otomatis. |
yarn.scheduler.configuration.fs.path | /yarn/<cluster-name>/scheduler/conf | Path tempat capacity-scheduler.xml disimpan. Path ini dibuat otomatis jika belum ada. Ganti <cluster-name> dengan nama kluster aktual Anda. Beberapa kluster tempat layanan YARN diterapkan dapat menggunakan penyimpanan terdistribusi yang sama. |
Lihat konfigurasi aktif:
RESTful API:
http://<rm-address>/ws/v1/cluster/scheduler-confHDFS:
${yarn.scheduler.configuration.fs.path}/capacity-scheduler.xml.<timestamp>— file dengan timestamp terbesar adalah versi terbaru.
Perbarui konfigurasi secara inkremental:
Contoh berikut mengubah yarn.scheduler.capacity.maximum-am-resource-percent menjadi 0,2 dan menghapus parameter yarn.scheduler.capacity.xxx. Untuk menghapus parameter, hilangkan field value.
curl -X PUT -H "Content-type: application/json" 'http://<rm-address>/ws/v1/cluster/scheduler-conf' -d '
{
"global-updates": [
{
"entry": [{
"key": "yarn.scheduler.capacity.maximum-am-resource-percent",
"value": "0.2"
},{
"key": "yarn.scheduler.capacity.xxx"
}]
}
]
}'Batas sumber daya per kontainer
Sumber daya maksimum untuk satu kontainer ditentukan oleh pengaturan berikut. Jika permintaan kontainer melebihi batas, penjadwal mencatat error InvalidResourceRequestException: Invalid resource request....
| File konfigurasi | Item konfigurasi | Deskripsi | Default |
|---|---|---|---|
yarn-site.xml | yarn.scheduler.maximum-allocation-mb | Maksimum memori per kontainer di level kluster. Satuan: MiB. | Nilai yarn.nodemanager.resource.memory-mb dari grup node dengan memori terbesar. Diatur saat kluster dibuat. |
yarn.scheduler.maximum-allocation-vcores | Maksimum CPU per kontainer di level kluster. Satuan: vCore. | 32 | |
capacity-scheduler.xml | yarn.scheduler.capacity.<queue-path>.maximum-allocation-mb | Maksimum memori per kontainer di level antrian. Menggantikan pengaturan level kluster hanya untuk antrian ini. | Biarkan kosong (mewarisi pengaturan level kluster) |
yarn.scheduler.capacity.<queue-path>.maximum-allocation-vcores | Maksimum CPU per kontainer di level antrian. Menggantikan pengaturan level kluster hanya untuk antrian ini. | Biarkan kosong (mewarisi pengaturan level kluster) |