Topik ini menjelaskan Penjadwal YARN.
Ikhtisar
ResourceManager adalah komponen inti dari Hadoop YARN. Komponen ini digunakan untuk mengelola dan menjadwalkan sumber daya kluster. Penjadwal merupakan inti dari ResourceManager, yang bertanggung jawab untuk mengelola sumber daya kluster serta mengalokasikan sumber daya ke aplikasi. Penjadwal mengoptimalkan tata letak sumber daya kluster guna memaksimalkan penggunaan sumber daya kluster dan mencegah masalah seperti isu hotspot yang dapat memengaruhi aplikasi. Penjadwal juga mengoordinasikan berbagai aplikasi yang berjalan di kluster dan menyelesaikan masalah persaingan sumber daya berdasarkan kebijakan seperti keadilan multi-penyewa dan prioritas aplikasi. Penjadwal dapat memenuhi kebutuhan aplikasi tertentu dalam hal ketergantungan node dan kebijakan penempatan.
Penjadwal YARN adalah plugin yang dapat diganti. YARN menyediakan beberapa jenis penjadwal berikut: Penjadwal First-In-First-Out (FIFO), Fair Scheduler, dan Capacity Scheduler.
FIFO Scheduler adalah penjadwal paling sederhana. Penjadwal ini tidak mendukung pengiriman aplikasi oleh beberapa penyewa untuk penjadwalan. Semua aplikasi dikirimkan ke antrian default tanpa alokasi sumber daya kluster. Aplikasi dijadwalkan berdasarkan kebijakan FIFO tanpa kontrol atau konfigurasi tambahan. FIFO Scheduler hanya cocok untuk skenario sederhana dan jarang digunakan dalam lingkungan produksi.
Fair Scheduler adalah penjadwal default yang digunakan oleh Cloudera Distributed Hadoop (CDH). Setelah CDH digabungkan dengan Hortonworks Data Platform (HDP), Cloudera Data Platform (CDP) menggunakan Capacity Scheduler sebagai pengganti Fair Scheduler. Jika Anda menggunakan Apache Hadoop, Capacity Scheduler juga direkomendasikan. Fair Scheduler menyediakan kemampuan manajemen multi-penyewa dan penjadwalan sumber daya, termasuk manajemen antrian multi-level, manajemen kuota, kontrol berbasis daftar kontrol akses (ACL), pembagian sumber daya, penjadwalan adil antar penyewa, penjadwalan aplikasi dalam penyewa, reservasi dan preemption sumber daya, serta penjadwalan asinkron. Namun, perkembangan Fair Scheduler tidak seaktif Capacity Scheduler di Apache Hadoop. Fair Scheduler tidak mempertimbangkan tata letak sumber daya kluster dan tidak mendukung fitur penjadwalan seperti label node, atribut node, dan kendala penempatan.
Capacity Scheduler adalah penjadwal default yang digunakan oleh Apache Hadoop, HDP, dan CDP. Capacity Scheduler menyediakan kemampuan manajemen multi-penyewa dan penjadwalan sumber daya lengkap, mencakup semua kemampuan Fair Scheduler. Capacity Scheduler dapat mengoptimalkan tata letak sumber daya kluster berdasarkan penjadwalan global, mengurangi risiko masalah hotspot, dan memaksimalkan penggunaan sumber daya kluster. Capacity Scheduler juga mendukung fitur penjadwalan seperti label node, atribut node, dan kendala penempatan.
Kami merekomendasikan penggunaan Capacity Scheduler untuk E-MapReduce (EMR) YARN. Bagian berikut menjelaskan Capacity Scheduler secara rinci. Untuk informasi lebih lanjut tentang penjadwal lainnya, lihat dokumentasi yang disediakan oleh Apache Hadoop YARN.
Arsitektur dan proses inti
MainScheduler dari Capacity Scheduler dapat dipicu melalui salah satu metode berikut:
Penggerak denyut node: Ketika penjadwal kapasitas menerima denyut node, MainScheduler dipicu untuk memilih aplikasi yang dapat dijadwalkan untuk node tersebut. Jenis penjadwalan ini adalah penjadwalan lokal node. MainScheduler bergantung pada interval denyut dan mirip dengan penjadwalan acak. Akibatnya, sejumlah besar node mungkin tidak terjangkau karena sumber daya yang tidak mencukupi dan persyaratan penjadwalan yang tidak terpenuhi. Hal ini menyebabkan efisiensi penjadwalan rendah. Metode ini cocok untuk kluster yang tidak memiliki persyaratan tinggi pada kinerja penjadwalan dan fitur penjadwalan.
Penjadwalan asinkron: MainScheduler dipicu oleh thread asinkron atau beberapa thread paralel. Node acak dipilih dari daftar node untuk penjadwalan. Hal ini meningkatkan kinerja penjadwalan. Metode ini cocok untuk kluster yang memiliki persyaratan tinggi pada kinerja penjadwalan tetapi persyaratan rendah pada fitur penjadwalan.
Penjadwalan global: MainScheduler dipicu oleh thread global. Jenis penjadwalan ini adalah penjadwalan global aplikasi. Aplikasi dipilih untuk penjadwalan berdasarkan faktor-faktor seperti keadilan multi-penyewa dan prioritas aplikasi. Kemudian, node dipilih untuk penjadwalan berdasarkan faktor-faktor seperti ukuran sumber daya, persyaratan penjadwalan, dan distribusi sumber daya aplikasi. Dengan cara ini, keputusan penjadwalan optimal dapat dibuat. Metode ini cocok untuk kluster yang memiliki persyaratan tinggi pada kinerja penjadwalan dan fitur penjadwalan.
Gambar berikut menunjukkan arsitektur penjadwalan global berdasarkan YARN 3.2 atau yang lebih baru.
MainScheduler adalah kerangka pemrosesan multithreading asinkron berbasis permintaan sumber daya. MainScheduler berisi thread alokasi dan pengiriman. Satu atau lebih thread alokasi digunakan untuk menemukan permintaan sumber daya dengan prioritas tertinggi, memilih node kandidat yang sesuai berdasarkan ukuran sumber daya dan kendala penempatan, menghasilkan proposal alokasi, dan mengatur proposal alokasi dalam antrian perantara. Thread pengiriman digunakan untuk mengonsumsi proposal alokasi, memeriksa ulang berbagai kendala penempatan, lalu mengirimkan atau menolak proposal alokasi. Thread pengiriman juga dapat digunakan untuk memperbarui status penjadwal kapasitas.
ReScheduler adalah kerangka pemantauan sumber daya dinamis yang berjalan secara berkala. ReScheduler berisi beberapa kebijakan pemantauan sumber daya, seperti kebijakan yang terkait dengan preemption antar-antrian, preemption intra-antrian, dan preemption sumber daya yang dipesan.
Node Sorting Manager dan Placement Constraint Manager adalah plugin penjadwalan global dari MainScheduler. Plugin-plugin ini digunakan untuk load balancing dan manajemen kendala penempatan yang kompleks.
Gambar berikut menunjukkan proses penjadwalan global dari Capacity Scheduler.
Proses alokasi kontainer MainScheduler:
Pilih partisi (label node). Kluster mungkin memiliki satu atau lebih partisi. MainScheduler mengalokasikan kontainer ke partisi secara bergantian.
Pilih antrian daun. MainScheduler melintasi antrian dari antrian root. Antrian anak pada level yang sama dilintasi dalam urutan menaik persentase sumber daya yang dijamin yang dialokasikan ke antrian hingga antrian daun ditemukan. Pada gambar di atas, antrian merah menunjukkan bahwa penggunaan sumber daya tinggi, dan antrian hijau menunjukkan bahwa penggunaan sumber daya rendah. Sumber daya diprioritaskan untuk dialokasikan ke antrian hijau.
Pilih aplikasi. MainScheduler memilih aplikasi dalam antrian berdasarkan kebijakan adil atau FIFO. Jika kebijakan adil digunakan, aplikasi dipilih dalam urutan menaik jumlah sumber daya memori yang dialokasikan ke aplikasi. Jika kebijakan FIFO digunakan, aplikasi dipilih dalam urutan menurun prioritas dan urutan menaik ID aplikasi.
Pilih permintaan. MainScheduler memilih permintaan berdasarkan prioritas.
Pilih node kandidat yang diurutkan. MainScheduler mencari node kandidat yang memenuhi persyaratan sumber daya tertentu dari semua node yang diurutkan berdasarkan kendala penempatan permintaan.
Lalui node kandidat dan alokasikan kontainer ke setiap node kandidat. Selama proses alokasi, MainScheduler memeriksa sumber daya yang dialokasikan, digunakan, atau belum dikonfirmasi dari antrian atau node. Setelah pemeriksaan berhasil, proposal alokasi dihasilkan dan dimasukkan ke dalam antrian proposal.
Proses pengiriman kontainer MainScheduler: Thread pengiriman memeriksa proposal alokasi dalam antrian proposal. Dalam hal ini, thread pengiriman memeriksa apakah persyaratan pada aplikasi, node, dan kendala penempatan terpenuhi. Jika persyaratan tidak terpenuhi, proposal alokasi dibuang. Jika persyaratan terpenuhi, kontainer yang dialokasikan mulai berlaku, dan sumber daya aplikasi atau node diperbarui.
Proses preemption sumber daya ReScheduler: Jika jumlah total sumber daya yang tersedia dari kluster kurang dari ambang batas sumber daya tertentu dan sumber daya yang dialokasikan ke aplikasi tertentu tidak mencukupi, ReScheduler dapat memicu preemption sumber daya dengan menggunakan metode yang berbeda.
Preemption antar-antrian: YARN mengizinkan sumber daya yang dijamin tidak digunakan oleh suatu antrian untuk dibagikan oleh antrian lain. Ketika aplikasi dalam antrian yang sumber dayanya tidak cukup memerlukan lebih banyak sumber daya, tetapi kluster tidak memiliki sumber daya idle, preemption antar-antrian dipicu. Sumber daya dalam kapasitas antrian adalah sumber daya yang dijamin, dan sumber daya yang melebihi kapasitas antrian tetapi kurang dari kapasitas maksimum antrian adalah sumber daya yang dibagi.
Preemption intra-antrian: ReScheduler memantau dan menyesuaikan sumber daya aplikasi berdasarkan kebijakan FIFO atau adil dari antrian. Ketika aplikasi dengan prioritas tinggi memerlukan sumber daya tetapi sumber daya yang dialokasikan ke antrian habis, preemption intra-antrian dipicu.
Preemption sumber daya yang dipesan: Ketika tugas memenuhi kondisi tertentu, tugas tersebut dan sumber daya yang dipesan untuk tugas tersebut dilepaskan. Misalnya, jika sumber daya tidak dialokasikan ke tugas dalam periode timeout, tugas tersebut dan sumber daya yang dipesan untuk tugas tersebut dilepaskan.
Fitur
Capacity Scheduler menyediakan fitur-fitur berikut:
Manajemen antrian multi-level: Capacity Scheduler memungkinkan Anda mengelola beberapa level antrian di beberapa penyewa. Kuota sumber daya antrian induk membatasi penggunaan sumber daya semua antrian anaknya, dan kuota sumber daya antrian anak tunggal tidak dapat melebihi kuota sumber daya antrian induk. Hal ini memastikan manajemen multi-penyewa yang terkendali dan memenuhi kebutuhan berbagai skenario aplikasi kompleks.
Kuota sumber daya: Capacity Scheduler memungkinkan Anda mengonfigurasi sumber daya yang dijamin untuk antrian dan jumlah maksimum sumber daya yang dapat digunakan oleh antrian. Anda juga dapat mengonfigurasi jumlah maksimum aplikasi yang dapat berjalan di antrian, jumlah maksimum sumber daya yang dapat digunakan oleh ApplicationMaster, dan rasio sumber daya yang digunakan pengguna terhadap sumber daya yang dikonfigurasi. Dengan cara ini, Anda dapat mengontrol antrian dari berbagai dimensi, seperti aplikasi, jenis tugas, dan pengguna.
Berbagi sumber daya elastis: Jumlah sumber daya elastis dalam antrian dapat dihitung menggunakan rumus berikut: Kapasitas maksimum antrian - Kapasitas antrian. Ketika kluster dan antrian induk memiliki sumber daya idle, antrian anak dapat menggunakan sumber daya yang dijamin tidak digunakan oleh antrian lain. Hal ini memastikan penggunaan kembali sumber daya berbasis jadwal di antrian yang berbeda dan meningkatkan pemanfaatan sumber daya kluster.
Kontrol berbasis ACL: Capacity Scheduler memungkinkan Anda mengelola izin pada antrian. Anda dapat menentukan beberapa pengguna untuk mengirimkan dan mengelola tugas, atau menentukan pengguna yang sama untuk mengelola beberapa antrian.
Penjadwalan antrian antar-penyewa: Antrian pada level yang sama dijadwalkan dalam urutan menaik persentase sumber daya yang dijamin dari antrian. Hal ini memastikan bahwa antrian yang memerlukan lebih sedikit sumber daya yang dijamin dijadwalkan terlebih dahulu. Jika Anda mengonfigurasi prioritas antrian, antrian pada level yang sama dibagi menjadi dua kelompok: antrian yang sumber daya yang digunakan kurang dari atau sama dengan sumber daya yang dijamin dan antrian yang sumber daya yang digunakan lebih dari sumber daya yang dijamin. Sumber daya pertama kali dialokasikan ke antrian yang sumber daya yang digunakan kurang dari atau sama dengan sumber daya yang dijamin. Kemudian, semua antrian dalam dua kelompok diurutkan dalam urutan menurun prioritas dan dalam urutan menaik persentase sumber daya yang dijamin.
Penjadwalan aplikasi intra-penyewa: Aplikasi dalam penyewa dijadwalkan berdasarkan kebijakan FIFO atau adil. Jika aplikasi dijadwalkan berdasarkan kebijakan FIFO, semua aplikasi dalam penyewa dijadwalkan dalam urutan menurun prioritas dan urutan menaik waktu pengiriman. Jika aplikasi dijadwalkan berdasarkan kebijakan adil, semua aplikasi dalam penyewa dijadwalkan dalam urutan menaik persentase sumber daya yang digunakan oleh aplikasi dan urutan menaik waktu pengiriman.
Preemption: Sumber daya kluster terus berubah. Untuk memenuhi kebutuhan berbagi sumber daya elastis, penjadwalan antrian adil intra-penyewa, dan penjadwalan aplikasi antar-penyewa, proses preemption digunakan untuk menyeimbangkan penggunaan sumber daya antrian dan aplikasi.
Konfigurasi dan catatan penggunaan
Konfigurasi global
File konfigurasi | Item konfigurasi | Nilai yang direkomendasikan | Deskripsi |
yarn-site.xml | yarn.resourcemanager.scheduler.class | Dibiarkan kosong | Kelas penjadwal. Nilai default: org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler. Nilai default menunjukkan CapacityScheduler. |
capacity-scheduler.xml | yarn.scheduler.capacity.maximum-applications | Dibiarkan kosong | Jumlah maksimum aplikasi bersamaan yang dapat berjalan di kluster. Nilai default: 10000. |
yarn.scheduler.capacity.global-queue-max-application | Dibiarkan kosong | Jumlah maksimum aplikasi bersamaan yang dapat berjalan di antrian. Jika Anda tidak mengonfigurasi parameter ini, aplikasi yang dapat berjalan bersamaan di kluster dialokasikan ke antrian secara proporsional. Jumlah maksimum aplikasi bersamaan yang dapat berjalan di setiap antrian dihitung menggunakan rumus berikut: Kapasitas antrian/Sumber daya kluster × ${yarn.scheduler.capacity.maximum-applications}. Jika beberapa antrian dengan persyaratan khusus ada, konfigurasikan parameter ini berdasarkan kebutuhan bisnis Anda. Misalnya, jika Anda ingin menjalankan sejumlah besar aplikasi di antrian dengan kapasitas rendah, Anda dapat mengubah nilai parameter ini berdasarkan kebutuhan bisnis Anda. | |
yarn.scheduler.capacity.maximum-am-resource-percent | 0.25 | Persentase jumlah maksimum sumber daya yang dapat digunakan oleh Application Master (AM) dari semua aplikasi di antrian. Jumlah maksimum sumber daya tidak dapat melebihi jumlah sumber daya yang dihitung menggunakan rumus berikut: Nilai parameter ini × Kapasitas maksimum antrian. Nilai default: 0.1. Jika antrian memiliki sejumlah besar aplikasi kecil, proporsi kontainer AM tinggi, dan jumlah aplikasi yang dapat berjalan di antrian terbatas. Anda dapat meningkatkan nilai parameter ini berdasarkan kebutuhan bisnis Anda. | |
yarn.scheduler.capacity.resource-calculator | org.apache.hadoop.yarn.util.resource.DominantResourceCalculator | Kalkulator yang digunakan untuk menghitung sumber daya komputasi yang diperlukan oleh antrian, node, dan aplikasi. Jika Anda mengatur parameter ini ke nilai default org.apache.hadoop.yarn.util.resource.DefaultResourceCalculator, hanya sumber daya memori yang diperlukan oleh antrian, node, dan aplikasi yang dihitung. Anda juga dapat mengatur parameter ini ke org.apache.hadoop.yarn.util.resource.DominantResourceCalculator. Ini menunjukkan bahwa semua jenis sumber daya yang dikonfigurasi, seperti memori, CPU, dan sumber daya lainnya, dihitung. Sumber daya yang paling banyak digunakan dianggap sebagai sumber daya utama. Catatan Modifikasi pada item konfigurasi ini berlaku setelah Anda memulai ulang ResourceManager atau melakukan pergantian antara node utama dan node sekunder jika HA diaktifkan. Operasi refresh tidak dapat membuat modifikasi pada item konfigurasi ini berlaku. | |
yarn.scheduler.capacity.node-locality-delay | -1 | Jumlah kali node ditunda untuk penjadwalan. Nilai default adalah 40. Parameter ini digunakan dalam skenario di mana penjadwalan Hadoop sangat bergantung pada penyimpanan lokal. Ini menunjukkan bahwa tugas dialokasikan ke node tempat data yang diperlukan oleh komputasi berada. Dengan perkembangan jaringan dan penyimpanan, disk dan jaringan bukan lagi hambatan utama. Oleh karena itu, Anda tidak perlu mempertimbangkan masalah lokalisasi. Kami merekomendasikan Anda mengatur parameter ini ke -1 untuk meningkatkan kinerja penjadwalan. |
Konfigurasi node
Mode denyut node
File konfigurasi | Item konfigurasi | Nilai yang direkomendasikan | Deskripsi |
capacity-scheduler.xml | yarn.scheduler.capacity.per-node-heartbeat.multiple-assignments-enabled | false | Menentukan apakah akan mengalokasikan beberapa kontainer dalam satu denyut sekaligus. Nilai default adalah true. Jika Anda mengatur parameter ini ke true, keseimbangan beban kluster terpengaruh, dan masalah hotspot mungkin terjadi. Kami merekomendasikan Anda tidak mengatur parameter ini ke true. |
yarn.scheduler.capacity.per-node-heartbeat.maximum-container-assignments | Dibiarkan kosong | Jumlah maksimum kontainer yang dapat ditetapkan dalam satu denyut. Nilai default: 100. Parameter ini hanya berlaku jika Anda mengatur parameter yarn.scheduler.capacity.per-node-heartbeat.multiple-assignments-enabled ke true. | |
yarn.scheduler.capacity.per-node-heartbeat.maximum-offswitch-assignments | Dibiarkan kosong | Jumlah maksimum kontainer off-switch yang dapat ditetapkan dalam satu denyut. Parameter ini hanya berlaku jika Anda mengatur parameter yarn.scheduler.capacity.per-node-heartbeat.multiple-assignments-enabled ke true. |
Penjadwalan asinkron
File konfigurasi | Item konfigurasi | Nilai yang direkomendasikan | Deskripsi |
capacity-scheduler.xml | yarn.scheduler.capacity.schedule-asynchronously.enable | true | Menentukan apakah akan mengaktifkan penjadwalan asinkron. Nilai default adalah false. Kami merekomendasikan Anda mengatur parameter ini ke true untuk meningkatkan kinerja penjadwalan. |
yarn.scheduler.capacity.schedule-asynchronously.maximum-threads | 1 atau dibiarkan kosong | Jumlah maksimum thread yang dapat dialokasikan untuk penjadwalan asinkron. Nilai default adalah 1. Beberapa thread mungkin menghasilkan sejumlah besar proposal duplikat. Dalam kebanyakan kasus, kinerja penjadwalan tinggi ketika satu thread dialokasikan. Kami merekomendasikan Anda tidak mengonfigurasi parameter ini. | |
yarn.scheduler.capacity.schedule-asynchronously.maximum-pending-backlogs | Dibiarkan kosong | Jumlah maksimum proposal alokasi yang harus diajukan dalam antrian untuk penjadwalan asinkron. Nilai default adalah 100. Jika ukuran kluster besar, Anda dapat meningkatkan nilai parameter ini berdasarkan kebutuhan bisnis Anda. |
Penjadwalan global
Semua item konfigurasi terkait penjadwalan asinkron diperlukan untuk penjadwalan global dan tidak disediakan dalam tabel berikut.
File konfigurasi | Item konfigurasi | Nilai yang direkomendasikan | Deskripsi |
capacity-scheduler.xml | yarn.scheduler.capacity.multi-node-placement-enabled | true | Menentukan apakah akan mengaktifkan penjadwalan global. Nilai default adalah false. Anda dapat mengaktifkan penjadwalan global untuk kluster yang memiliki persyaratan tinggi pada kinerja penjadwalan dan fitur penjadwalan. |
yarn.scheduler.capacity.multi-node-sorting.policy | default | Nama kebijakan penjadwalan global default. | |
yarn.scheduler.capacity.multi-node-sorting.policy.names | default | Nama kebijakan penjadwalan global. Pisahkan beberapa nama dengan koma (,). | |
yarn.scheduler.capacity.multi-node-sorting.policy.default.class | org.apache.hadoop.yarn.server.resourcemanager.scheduler.placement.ResourceUsageMultiNodeLookupPolicy | Implementasi unik dari kebijakan penjadwalan global default yang digunakan untuk mengurutkan node dalam urutan menaik nilai absolut sumber daya yang dialokasikan ke node. | |
yarn.scheduler.capacity.multi-node-sorting.policy.default.sorting-interval.ms |
| Interval pembaruan cache berdasarkan kebijakan penjadwalan global default. Anda dapat menentukan apakah akan mengaktifkan caching node berdasarkan ukuran kluster:
Nilai default: 1000. Nilai item konfigurasi ini harus lebih besar atau sama dengan 0. Nilai 0 menunjukkan bahwa pengurutan sinkron diimplementasikan. Untuk kluster skala besar, pengurutan sinkron memiliki dampak besar pada kinerja.) |
Konfigurasi partisi node
Untuk informasi lebih lanjut, lihat Label node.
Konfigurasi antrian dasar
Konfigurasi antrian dasar mencakup konfigurasi item berikut: hubungan hierarkis antrian, kapasitas antrian, dan kapasitas maksimum antrian. Jika kluster YARN digunakan bersama oleh beberapa departemen dan tim perusahaan, Anda dapat mengatur antrian YARN berdasarkan mode organisasi tertentu dan persentase sumber daya yang diharapkan. Antrian induk root memiliki empat antrian anak, seperti yang ditunjukkan pada gambar berikut: dev, test, support, dan default. Persentase sumber daya yang dijamin untuk antrian adalah 50%, 30%, 10%, dan 10%, dan persentase jumlah maksimum sumber daya untuk antrian adalah 100%, 50%, 30%, dan 100%. Antrian dev memiliki dua antrian anak: training dan services. Persentase sumber daya yang dijamin untuk antrian anak adalah 40% dan 60%, dan persentase jumlah maksimum sumber daya untuk antrian anak adalah 100% untuk keduanya.
Tabel berikut menjelaskan konfigurasi dasar antrian.
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 yang dijamin untuk antrian dev terhadap sumber daya kluster. | |
yarn.scheduler.capacity.root.dev.maximum-capacity | 100 | Persentase jumlah maksimum sumber daya untuk antrian dev terhadap 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 yang dijamin untuk antrian training terhadap sumber daya yang dijamin untuk antrian dev. | |
yarn.scheduler.capacity.root.dev.training.maximum-capacity | 100 | Persentase jumlah maksimum sumber daya untuk antrian training terhadap jumlah maksimum sumber daya untuk antrian dev. | |
yarn.scheduler.capacity.root.dev.services.capacity | 60 | Persentase sumber daya yang dijamin untuk antrian services terhadap sumber daya yang dijamin untuk antrian dev. | |
yarn.scheduler.capacity.root.dev.services.maximum-capacity | 100 | Persentase jumlah maksimum sumber daya untuk antrian services terhadap jumlah maksimum sumber daya untuk antrian dev. | |
yarn.scheduler.capacity.root.test.capacity | 30 | Persentase sumber daya yang dijamin untuk antrian test terhadap sumber daya kluster. | |
yarn.scheduler.capacity.root.test.maximum-capacity | 50 | Persentase jumlah maksimum sumber daya untuk antrian test terhadap sumber daya kluster. | |
yarn.scheduler.capacity.root.support.capacity | 10 | Persentase sumber daya yang dijamin untuk antrian support terhadap sumber daya kluster. | |
yarn.scheduler.capacity.root.support.maximum-capacity | 30 | Persentase jumlah maksimum sumber daya untuk antrian support terhadap sumber daya kluster. | |
yarn.scheduler.capacity.root.default.capacity | 10 | Persentase sumber daya yang dijamin untuk antrian default terhadap sumber daya kluster. | |
yarn.scheduler.capacity.root.default.maximum-capacity | 100 | Persentase jumlah maksimum sumber daya untuk antrian default terhadap sumber daya kluster. |
Daftar pada halaman Penjadwal YARN menampilkan hierarki antrian, persentase sumber daya yang dijamin, dan persentase jumlah maksimum sumber daya untuk antrian. Pada gambar berikut, kotak abu-abu solid menunjukkan persentase jumlah maksimum sumber daya setiap antrian, dan kotak putus-putus menunjukkan persentase sumber daya yang dijamin setiap antrian terhadap sumber daya kluster. Anda dapat memperluas antrian untuk melihat detail antrian, seperti status antrian, informasi sumber daya, informasi aplikasi, dan konfigurasi lainnya, seperti yang ditunjukkan pada gambar berikut.
Konfigurasi antrian lanjutan
File konfigurasi | Item konfigurasi | Nilai yang direkomendasikan | Deskripsi |
capacity-scheduler.xml | yarn.scheduler.capacity.<queue_path>.ordering-policy | fair | Menentukan kebijakan yang digunakan untuk menjadwalkan aplikasi dalam antrian. Aplikasi dalam antrian dijadwalkan berdasarkan kebijakan FIFO atau adil. Jika aplikasi dijadwalkan berdasarkan kebijakan FIFO, semua aplikasi dalam antrian dijadwalkan dalam urutan menurun prioritas dan urutan menaik waktu pengiriman. Jika aplikasi dijadwalkan berdasarkan kebijakan adil, semua aplikasi dalam antrian dijadwalkan dalam urutan menaik persentase sumber daya yang digunakan oleh aplikasi dan urutan menaik waktu pengiriman. Nilai default adalah fifo. Dalam kebanyakan kasus, kami merekomendasikan Anda mengatur parameter ini ke fair. |
yarn.scheduler.capacity.<queue-path>.ordering-policy.fair.enable-size-based-weight | Dibiarkan kosong | Menentukan apakah akan mengaktifkan kebijakan penjadwalan adil berbasis bobot. Anda dapat menentukan apakah akan mengaktifkan kebijakan penjadwalan adil berdasarkan sumber daya yang dialokasikan ke aplikasi. Nilai default adalah false. Nilai false menunjukkan bahwa aplikasi dijadwalkan dalam urutan menaik jumlah sumber daya yang digunakan oleh aplikasi. Nilai true menunjukkan bahwa aplikasi dijadwalkan dalam urutan menaik sumber daya yang dihitung menggunakan rumus berikut: Sumber daya yang digunakan/Sumber daya yang diperlukan. Ini membantu mencegah aplikasi besar kekurangan sumber daya selama persaingan sumber daya. | |
yarn.scheduler.capacity.<queue_path>.state | Dibiarkan kosong | Status antrian. Nilai default adalah RUNNING. Dalam kebanyakan kasus, Anda tidak perlu mengonfigurasi parameter ini. Anda hanya dapat mengatur parameter ini ke STOPPED ketika Anda perlu menghapus antrian. Setelah Anda mengubah status antrian menjadi STOPPED dan semua aplikasi dalam antrian selesai, antrian dihapus. | |
yarn.scheduler.capacity.<queue_path>.maximum-am-resource-percent | Dibiarkan kosong | Persentase jumlah maksimum sumber daya yang dapat digunakan oleh Application Master dari semua aplikasi dalam antrian. Jumlah maksimum sumber daya tidak dapat melebihi jumlah sumber daya yang dihitung menggunakan rumus berikut: Nilai parameter ini × Kapasitas maksimum antrian. Nilai default sama dengan nilai default dari parameter yarn.scheduler.capacity.maximum-am-resource-percent. | |
yarn.scheduler.capacity.<queue_path>.user-limit-factor | Dibiarkan kosong | Faktor batas atas untuk satu pengguna. Jumlah maksimum sumber daya yang dapat digunakan pengguna dihitung menggunakan rumus berikut: min (Sumber daya maksimum antrian, Sumber daya yang dijamin antrian × Nilai userLimitFactor). Nilai default: 1.0. | |
yarn.scheduler.capacity.<queue_path>.minimum-user-limit-percent | Dibiarkan kosong | Persentase minimum sumber daya yang dapat digunakan satu pengguna terhadap sumber daya yang dijamin antrian. Jumlah minimum sumber daya yang dapat digunakan pengguna dihitung menggunakan rumus berikut: max (Sumber daya yang dijamin antrian/Jumlah pengguna, Sumber daya yang dijamin antrian × Nilai minimum userLimitFactor/100). Nilai default: 100. | |
yarn.scheduler.capacity.<queue_path>.maximum-applications | Dibiarkan kosong | Jumlah maksimum aplikasi yang dapat berjalan di antrian. Jika Anda tidak mengonfigurasi parameter ini, nilai yang dihitung menggunakan rumus berikut digunakan: Persentase sumber daya yang dijamin antrian × Nilai parameter yarn.scheduler.capacity.maximum-applications. | |
yarn.scheduler.capacity.<queue_path>.acl_submit_applications | Dibiarkan kosong | ACL pengiriman aplikasi. Jika Anda tidak mengonfigurasi parameter ini untuk antrian, antrian mewarisi konfigurasi antrian induknya. Secara default, antrian root mengizinkan semua pengguna untuk mengirimkan aplikasi ke antrian. | |
yarn.scheduler.capacity.<queue_path>.acl_administer_queue | Dibiarkan kosong | ACL manajemen antrian. Jika Anda tidak mengonfigurasi parameter ini untuk antrian, antrian mewarisi konfigurasi antrian induknya. Secara default, antrian root mengizinkan semua pengguna untuk mengelola antrian. |
Konfigurasi ACL antrian
Tabel berikut menjelaskan konfigurasi ACL antrian. Dalam kebanyakan kasus, Anda dapat menonaktifkan ACL. Anda dapat mengaktifkan ACL berdasarkan kebutuhan bisnis Anda.
File konfigurasi | Item konfigurasi | Nilai yang direkomendasikan | Deskripsi |
yarn-site.xml | yarn.acl.enabled | Dibiarkan kosong | Menentukan apakah akan mengaktifkan ACL. Nilai default: false. |
capacity-scheduler.xml | yarn.scheduler.capacity.<queue_path>.acl_submit_applications | Dibiarkan kosong | ACL pengiriman aplikasi. Jika Anda tidak mengonfigurasi parameter ini untuk antrian, antrian mewarisi konfigurasi antrian induknya. Secara default, antrian root mengizinkan semua pengguna untuk mengirimkan aplikasi ke antrian. |
yarn.scheduler.capacity.<queue_path>.acl_administer_queue | Dibiarkan kosong | ACL manajemen antrian. Jika Anda tidak mengonfigurasi parameter ini untuk antrian, antrian mewarisi konfigurasi antrian induknya. Secara default, antrian root mengizinkan semua pengguna untuk mengelola antrian. |
Konfigurasi ACL antrian induk berlaku untuk semua antrian anak. Misalnya, antrian default dari root hanya mengizinkan pengguna Hadoop untuk mengirimkan pekerjaan. Namun, pengguna lain juga dapat mengirimkan aplikasi ke antrian default dari root karena antrian root mengizinkan semua pengguna untuk mengirimkan dan mengelola antrian. Untuk menggunakan fitur ACL antrian anak, Anda harus mengonfigurasi parameter yarn.scheduler.capacity.root.acl_submit_applications=<space> dan yarn.scheduler.capacity.root.acl_administer_queue=<space>.
Untuk memberikan izin ACL kepada grup pengguna atau pengguna untuk mengirimkan dan mentransfer aplikasi, Anda harus mengonfigurasi parameter yarn.scheduler.capacity.<queue_path>.acl_submit_applications dan yarn.scheduler.capacity.<queue_path>.acl_administer_queue.
Konfigurasi preemption
Preemption digunakan untuk memastikan keadilan penjadwalan antrian di antara beberapa penyewa dan prioritas aplikasi. Untuk kluster yang memiliki persyaratan penjadwalan tinggi, Anda dapat mengaktifkan preemption. YARN V2.8.0 atau yang lebih baru mendukung fitur preemption. Tabel berikut menjelaskan konfigurasi terkait.
File konfigurasi | Item konfigurasi | Nilai yang direkomendasikan | Deskripsi |
yarn-site.xml | yarn.resourcemanager.scheduler.monitor.enable | true | Menentukan apakah akan mengaktifkan preemption. |
capacity-scheduler.xml | yarn.resourcemanager.monitor.capacity.preemption.intra-queue-preemption.enabled | true | Menentukan apakah akan mengaktifkan preemption sumber daya intra-antrian. Secara default, preemption sumber daya inter-antrian diaktifkan dan tidak dapat dinonaktifkan. |
yarn.resourcemanager.monitor.capacity.preemption.intra-queue-preemption.preemption-order-policy | priority_first | Kebijakan berdasarkan mana preemption sumber daya intra-antrian dilakukan. Nilai default: userlimit_first. | |
yarn.scheduler.capacity.<queue-path>.disable_preemption | true | Menentukan apakah mengizinkan antrian untuk dipreempt. Secara default, jika Anda tidak mengonfigurasi parameter ini, konfigurasi antrian induk digunakan. Misalnya, jika Anda mengatur parameter ini ke true untuk antrian root, semua antrian anak tidak dapat dipreempt. Jika Anda tidak mengonfigurasi parameter ini untuk antrian root, nilai default adalah false. Ini menunjukkan bahwa antrian dapat dipreempt. | |
yarn.scheduler.capacity.<queue-path>.intra-queue-preemption.disable_preemption | true | Menentukan apakah menonaktifkan preemption intra-antrian. Secara default, jika Anda tidak mengonfigurasi parameter ini, konfigurasi antrian induk digunakan. Misalnya, jika Anda mengatur parameter ini ke true untuk antrian root, preemption intra-antrian dinonaktifkan untuk semua antrian anak. |
Konfigurasi capacity-scheduler.xml menggunakan RESTful API
Pada versi sebelumnya YARN, Anda hanya dapat mengelola file capacity-scheduler.xml dengan memanggil operasi RefreshQueues. Setiap kali operasi RefreshQueues dipanggil, konfigurasi penuh dari file capacity-scheduler.xml diperbarui, tetapi item konfigurasi yang diperbarui tidak dapat diperoleh. Di YARN V3.2.0 dan yang lebih baru, Anda dapat memanggil API RESTful untuk melakukan pembaruan data inkremental dan melihat semua konfigurasi yang telah berlaku di file capacity-scheduler.xml. Hal ini secara signifikan meningkatkan efisiensi manajemen antrian.
Untuk mengaktifkan Capacity Scheduler, konfigurasikan item konfigurasi yang dijelaskan dalam tabel berikut.
File konfigurasi | Item konfigurasi | Nilai yang direkomendasikan | Deskripsi |
yarn-site.xml | yarn.scheduler.configuration.store.class | fs | Jenis penyimpanan. |
yarn.scheduler.configuration.max.version | 100 | Jumlah maksimum file konfigurasi yang dapat disimpan dalam sistem file. File konfigurasi yang berlebih akan dihapus secara otomatis ketika jumlah file konfigurasi melebihi nilai parameter ini. | |
yarn.scheduler.configuration.fs.path | /yarn/<Nama Kluster>/scheduler/conf | Path tempat file capacity-scheduler.xml disimpan. Jika path tidak ada, sistem akan membuat path. Jika tidak ada awalan yang ditentukan, path relatif dari sistem file default digunakan sebagai path penyimpanan. Penting Ganti <Nama Kluster> dengan nama kluster tertentu. Beberapa kluster tempat layanan YARN diterapkan dapat menggunakan penyimpanan terdistribusi yang sama. |
Metode untuk melihat file capacity-scheduler.xml:
RESTful API: Akses URL dalam format berikut: http://<rm-address>/ws/v1/cluster/scheduler-conf.
HDFS: Akses path konfigurasi ${yarn.scheduler.configuration.fs.path}/capacity-scheduler.xml.<timestamp> untuk melihat file capacity-scheduler.xml. <timestamp> menunjukkan waktu pembuatan file tersebut. File dengan nilai timestamp terbesar merupakan konfigurasi terbaru.
Contoh cara memperbarui item konfigurasi:
Anda dapat mengubah nilai parameter yarn.scheduler.capacity.maximum-am-resource-percent menjadi 0,2 dan menghapus parameter yarn.scheduler.capacity.xxx. Untuk menghapus parameter, cukup hapus nilai pada bidang parameter tersebut.
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 pada tugas atau kontainer tunggal
Batas sumber daya untuk tugas atau kontainer tunggal ditentukan oleh item konfigurasi yang dijelaskan dalam tabel berikut.
File konfigurasi | Item konfigurasi | Deskripsi | Nilai Default/Aturan |
yarn-site.xml | yarn.scheduler.maximum-allocation-mb | Sumber daya memori maksimum yang dapat dijadwalkan pada tingkat kluster. Unit: MiB. | Sumber daya memori yang tersedia dari node inti atau grup node tugas yang ukuran memorinya paling besar. Ukuran memori grup node ditentukan saat kluster dibuat. Nilainya sama dengan parameter yarn.nodemanager.resource.memory-mb dari grup node yang ukuran memorinya paling besar. |
yarn.scheduler.maximum-allocation-vcores | Sumber daya CPU maksimum yang dapat dijadwalkan pada tingkat kluster. Unit: VCore. | Nilai default adalah 32. | |
capacity-scheduler.xml | yarn.scheduler.capacity.<queue-path>.maximum-allocation-mb | Sumber daya memori maksimum yang dapat dijadwalkan untuk antrian yang ditentukan. Unit: MiB. | Secara default, parameter ini dibiarkan kosong. Jika Anda mengonfigurasi parameter ini, sistem akan menimpa pengaturan tingkat kluster. Parameter ini hanya berlaku untuk antrian yang ditentukan. |
yarn.scheduler.capacity.<queue-path>.maximum-allocation-vcores | Sumber daya CPU maksimum yang dapat dijadwalkan untuk antrian yang ditentukan. Unit: VCore. | Secara default, parameter ini dibiarkan kosong. Jika Anda mengonfigurasi parameter ini, sistem akan menimpa pengaturan tingkat kluster. Parameter ini hanya berlaku untuk antrian yang ditentukan. |
Jika sumber daya yang diminta melebihi batas maksimum yang tersedia untuk tugas atau kontainer tunggal, kesalahan berikut akan dicatat dalam log aplikasi: InvalidResourceRequestException: Invalid resource request….