All Products
Search
Document Center

E-MapReduce:Penjadwal YARN

Last Updated:Aug 04, 2026

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

PenjadwalBawaanDukungan multi-penyewaLabel / atribut / batasan penempatan nodeKapan digunakan
FIFO Scheduler—TidakTidakSkenario sederhana dengan satu penyewa. Jarang digunakan di lingkungan produksi.
Fair SchedulerCDH (Cloudera Distributed Hadoop)YaTidakKluster CDH lama. Tidak direkomendasikan untuk penerapan baru.
Capacity SchedulerApache Hadoop, HDP, CDPYaYaKluster 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:

ModeCara kerjaPaling cocok untuk
Berdasarkan heartbeat nodeMainScheduler 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 asinkronSebuah 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 globalSebuah 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.2

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.3

MainScheduler mengalokasikan kontainer dalam enam langkah:

  1. Pilih partisi (label node). Kluster dapat memiliki satu atau lebih partisi. MainScheduler mengalokasikan kontainer ke partisi secara bergiliran.

  2. 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).

  3. 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

  4. Pilih permintaan. MainScheduler memilih permintaan dalam aplikasi yang dipilih berdasarkan prioritas.

  5. 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.

  6. 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 preemptionKondisi pemicu
Preemption antar-antrianSumber 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 PreemptionAplikasi 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 dicadangkanTugas 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 konfigurasiItem konfigurasiNilai yang direkomendasikanDeskripsi
yarn-site.xmlyarn.resourcemanager.scheduler.classBiarkan kosongKelas penjadwal. Default: org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler.
capacity-scheduler.xmlyarn.scheduler.capacity.maximum-applicationsBiarkan kosongMaksimum aplikasi konkuren di kluster. Default: 10000.
yarn.scheduler.capacity.global-queue-max-applicationBiarkan kosongMaksimum 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-percent0.25Persentase 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-calculatororg.apache.hadoop.yarn.util.resource.DominantResourceCalculatorKalkulator 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-1Jumlah 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 konfigurasiItem konfigurasiNilai yang direkomendasikanDeskripsi
capacity-scheduler.xmlyarn.scheduler.capacity.per-node-heartbeat.multiple-assignments-enabledfalseApakah 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-assignmentsBiarkan kosongMaksimum kontainer yang dapat dialokasikan per heartbeat. Default: 100. Efektif hanya jika multiple-assignments-enabled bernilai true.
yarn.scheduler.capacity.per-node-heartbeat.maximum-offswitch-assignmentsBiarkan kosongMaksimum kontainer off-switch yang dapat dialokasikan per heartbeat. Efektif hanya jika multiple-assignments-enabled bernilai true.

Penjadwalan asinkron

File konfigurasiItem konfigurasiNilai yang direkomendasikanDeskripsi
capacity-scheduler.xmlyarn.scheduler.capacity.schedule-asynchronously.enabletrueApakah akan mengaktifkan penjadwalan asinkron. Default: false. Aktifkan ini untuk meningkatkan kinerja penjadwalan.
yarn.scheduler.capacity.schedule-asynchronously.maximum-threads1 atau biarkan kosongMaksimum 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-backlogsBiarkan kosongMaksimum 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 konfigurasiItem konfigurasiNilai yang direkomendasikanDeskripsi
capacity-scheduler.xmlyarn.scheduler.capacity.multi-node-placement-enabledtrueApakah akan mengaktifkan penjadwalan global. Default: false. Aktifkan untuk kluster dengan persyaratan tinggi baik terhadap kinerja maupun fitur penjadwalan.
yarn.scheduler.capacity.multi-node-sorting.policydefaultNama kebijakan penjadwalan global aktif.
yarn.scheduler.capacity.multi-node-sorting.policy.namesdefaultDaftar nama kebijakan penjadwalan global yang dipisahkan koma.
yarn.scheduler.capacity.multi-node-sorting.policy.default.classorg.apache.hadoop.yarn.server.resourcemanager.scheduler.placement.ResourceUsageMultiNodeLookupPolicyKelas 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.ms0 (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.

image

Struktur antrian contoh:

AntrianSumber daya terjaminSumber daya maksimumAntrian anak
root100%100%dev, test, support, default
root.dev50%100%training, services
root.dev.training40% dari dev100% pengembangan—
root.dev.services60% dari dev100% dari dev—
root.test30%50%—
root.support10%30%—
root.default10%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 konfigurasiItem konfigurasiNilai contohDeskripsi
capacity-scheduler.xmlyarn.scheduler.capacity.root.queuesdev,test,support,defaultAntrian anak dari antrian root. Pisahkan beberapa antrian dengan koma.
yarn.scheduler.capacity.root.dev.capacity50Persentase sumber daya terjamin untuk antrian dev relatif terhadap total sumber daya kluster.
yarn.scheduler.capacity.root.dev.maximum-capacity100Persentase sumber daya maksimum untuk antrian dev relatif terhadap total sumber daya kluster.
yarn.scheduler.capacity.root.dev.queuestraining,servicesAntrian anak dari antrian dev.
yarn.scheduler.capacity.root.dev.training.capacity40Persentase sumber daya terjamin untuk training relatif terhadap sumber daya terjamin dev.
yarn.scheduler.capacity.root.dev.training.maximum-capacity100Persentase sumber daya maksimum untuk training relatif terhadap sumber daya maksimum dev.
yarn.scheduler.capacity.root.dev.services.capacity60Persentase sumber daya terjamin untuk services relatif terhadap sumber daya terjamin dev.
yarn.scheduler.capacity.root.dev.services.maximum-capacity100Persentase sumber daya maksimum untuk services relatif terhadap sumber daya maksimum dev.
yarn.scheduler.capacity.root.test.capacity30Persentase sumber daya terjamin untuk test relatif terhadap total sumber daya kluster.
yarn.scheduler.capacity.root.test.maximum-capacity50Persentase sumber daya maksimum untuk test relatif terhadap total sumber daya kluster.
yarn.scheduler.capacity.root.support.capacity10Persentase sumber daya terjamin untuk support relatif terhadap total sumber daya kluster.
yarn.scheduler.capacity.root.support.maximum-capacity30Persentase sumber daya maksimum untuk support relatif terhadap total sumber daya kluster.
yarn.scheduler.capacity.root.default.capacity10Persentase sumber daya terjamin untuk default relatif terhadap total sumber daya kluster.
yarn.scheduler.capacity.root.default.maximum-capacity100Persentase sumber daya maksimum untuk default relatif terhadap total sumber daya kluster.

Konfigurasi lanjutan antrian

File konfigurasiItem konfigurasiNilai yang direkomendasikanDeskripsi
capacity-scheduler.xmlyarn.scheduler.capacity.<queue_path>.ordering-policyfairKebijakan 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-weightBiarkan kosongApakah 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>.stateBiarkan kosongStatus 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-percentBiarkan kosongBatas sumber daya AM per antrian. Default: mewarisi dari yarn.scheduler.capacity.maximum-am-resource-percent.
yarn.scheduler.capacity.<queue_path>.user-limit-factorBiarkan kosongFaktor 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-percentBiarkan kosongPersentase 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-applicationsBiarkan kosongMaksimum aplikasi konkuren di antrian ini. Default: persentase sumber daya terjamin × yarn.scheduler.capacity.maximum-applications.
yarn.scheduler.capacity.<queue_path>.acl_submit_applicationsBiarkan kosongACL submit untuk antrian ini. Mewarisi dari antrian induk jika tidak diatur.
yarn.scheduler.capacity.<queue_path>.acl_administer_queueBiarkan kosongACL 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 konfigurasiItem konfigurasiNilai yang direkomendasikanDeskripsi
yarn-site.xmlyarn.acl.enabledBiarkan kosongApakah akan mengaktifkan ACL. Default: false.
capacity-scheduler.xmlyarn.scheduler.capacity.<queue_path>.acl_submit_applicationsBiarkan kosongACL 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_queueBiarkan kosongACL manajemen. Mewarisi dari antrian induk jika tidak diatur. Secara default, antrian root mengizinkan semua pengguna untuk mengelola antrian.
Penting

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 konfigurasiItem konfigurasiNilai yang direkomendasikanDeskripsi
yarn-site.xmlyarn.resourcemanager.scheduler.monitor.enabletrueAktifkan preemption.
capacity-scheduler.xmlyarn.resourcemanager.monitor.capacity.preemption.intra-queue-preemption.enabledtrueAktifkan preemption intra-antrian. Preemption antar-antrian diaktifkan secara default dan tidak dapat dinonaktifkan.
yarn.resourcemanager.monitor.capacity.preemption.intra-queue-preemption.preemption-order-policypriority_firstKebijakan urutan preemption intra-antrian. Default: userlimit_first.
yarn.scheduler.capacity.<queue-path>.disable_preemptiontrueApakah 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_preemptiontrueApakah 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 konfigurasiNilai yang direkomendasikanDeskripsi
yarn.scheduler.configuration.store.classfsJenis penyimpanan untuk konfigurasi penjadwal.
yarn.scheduler.configuration.max.version100Maksimum jumlah versi konfigurasi yang disimpan di sistem file. Versi lama dihapus secara otomatis.
yarn.scheduler.configuration.fs.path/yarn/<cluster-name>/scheduler/confPath 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-conf

  • HDFS: ${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 konfigurasiItem konfigurasiDeskripsiDefault
yarn-site.xmlyarn.scheduler.maximum-allocation-mbMaksimum 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-vcoresMaksimum CPU per kontainer di level kluster. Satuan: vCore.32
capacity-scheduler.xmlyarn.scheduler.capacity.<queue-path>.maximum-allocation-mbMaksimum 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-vcoresMaksimum CPU per kontainer di level antrian. Menggantikan pengaturan level kluster hanya untuk antrian ini.Biarkan kosong (mewarisi pengaturan level kluster)