Topik ini menjelaskan label node YARN, penggunaannya, dan masalah umum.
Latar Belakang
Label node YARN mempartisi node NodeManager YARN. Karena satu node hanya dapat ditetapkan ke satu label node, Anda dapat menggunakan label node untuk membagi kluster YARN menjadi himpunan node yang saling terpisah. Secara default, node termasuk dalam partisi DEFAULT (partition="", string kosong).
Partisi dapat dikonfigurasi sebagai salah satu dari dua tipe berikut:
-
exclusive partition: Hanya kontainer yang meminta partisi ini yang dapat dijadwalkan ke nodenya.
-
non-exclusive partition: Kontainer yang meminta partisi ini, partisi DEFAULT, atau tidak meminta partisi apa pun dapat dijadwalkan ke nodenya jika tersedia resource idle.
Capacity Scheduler adalah satu-satunya penjadwal yang mendukung penjadwalan berbasis partisi dengan label node. Anda dapat mengonfigurasi penjadwal tersebut atau menggunakan parameter node-label-expression pada compute engine untuk menetapkan kontainer antrean ke partisi yang dapat diakses.
Untuk informasi lebih lanjut tentang label node, lihat YARN Node Labels.
Batasan
-
Topik ini berlaku untuk versi EMR sebelum EMR-5.11.1 dan EMR-3.45.1, asalkan parameter
yarn.node-labels.configuration-typedalam fileyarn-site.xmlAnda diatur kecentralized. -
Versi EMR 5.11.1 ke atas dan 3.45.1 ke atas mendukung pengelolaan partisi YARN melalui Konsol EMR. Untuk informasi lebih lanjut, lihat Kelola partisi YARN di Konsol EMR.
Prosedur
Aktifkan label node di konsol
Di Konsol EMR, buka halaman konfigurasi layanan YARN. Pada tab yarn-site.xml, tambahkan properti berikut. Lalu, simpan konfigurasi dan restart ResourceManager untuk menerapkan perubahan.
|
Key |
Value |
Description |
|
yarn.node-labels.enabled |
true |
Mengaktifkan fitur label node. |
|
yarn.node-labels.fs-store.root-dir |
/tmp/node-labels |
Dalam mode konfigurasi |
-
Topik ini mencakup mode
centralizeduntuk menjelaskan prinsip kerja pemetaan label node. Versi EMR 5.11.1 ke atas dan 3.45.1 ke atas secara default menggunakanyarn.node-labels.configuration-type=distributed. Pada versi tersebut, Anda dapat mengelola partisi YARN di Konsol EMR tanpa menggunakan perintah manual yang dijelaskan dalam topik ini. Untuk informasi lebih lanjut, lihat Kelola partisi YARN di Konsol EMR. Untuk kebutuhan lainnya, rujuk dokumentasi resmi komunitas Hadoop. -
Jika Anda menetapkan properti yarn.node-labels.fs-store.root-dir ke path tanpa skema (bukan URL lengkap), YARN akan menggunakan sistem file default yang ditentukan oleh
fs.defaultFS. Konfigurasi tersebut kemudian setara dengan${fs.defaultFS}/tmp/node-labels. Di EMR, sistem file default biasanya HDFS.
Tambahkan label node dan petakan node menggunakan perintah
Untuk secara otomatis menetapkan partisi ke node NodeManager dalam grup node elastis selama scale-out, tambahkan perintah replaceLabelsOnNode ke skrip bootstrap untuk grup node tersebut setelah Anda membuat partisi. Skrip tersebut dijalankan setelah komponen node dimulai.
Contoh perintah:
# Jalankan perintah sebagai administrator YARN default: hadoop
sudo su - hadoop
# Tambahkan partisi
yarn rmadmin -addToClusterNodeLabels "DEMO"
yarn rmadmin -addToClusterNodeLabels "CORE"
# Daftar node YARN
yarn node -list
# Petakan node tertentu ke partisi
yarn rmadmin -replaceLabelsOnNode "core-1-1.c-XXX.cn-hangzhou.emr.aliyuncs.com=DEMO"
yarn rmadmin -replaceLabelsOnNode "core-1-2.c-XXX.cn-hangzhou.emr.aliyuncs.com=DEMO"
Setelah perintah berhasil, verifikasi hasilnya di UI web ResourceManager.
-
Pada halaman Nodes ResourceManager, kolom Node Labels untuk dua node core (core-1-1 dan core-1-2) menampilkan DEMO, dan status Node State-nya adalah RUNNING. Hal ini menunjukkan bahwa pemetaan node ke label sudah aktif.
-
Pada halaman Node Labels, tabel menampilkan tiga label node yang telah ditambahkan:
<DEFAULT_PARTITION>,CORE, danDEMO. Jenis Label Type-nya adalah Exclusive Partition.
Konfigurasi partisi antrean
Untuk menggunakan Capacity Scheduler, pastikan properti yarn.resourcemanager.scheduler.class dalam file yarn-site.xml diatur ke org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler.
Dalam file capacity-scheduler.xml, gunakan properti berikut untuk mengonfigurasi partisi yang dapat diakses oleh antrean dan kapasitasnya. Ganti <queue-path> dengan path antrean dan <label> dengan nama partisi. Untuk partisi DEFAULT, Anda dapat menggunakan properti capacity atau maximum-capacity biasa.
|
Parameter |
Nilai |
Deskripsi |
|
yarn.scheduler.capacity.<queue-path>.accessible-node-labels |
Daftar partisi yang dipisahkan koma. |
Menentukan daftar partisi yang dapat diakses oleh antrean. |
|
yarn.scheduler.capacity.<queue-path>.accessible-node-labels.<label>.capacity |
Untuk aturan nilai, lihat yarn.scheduler.capacity.<queue-path>.capacity. |
Menentukan kapasitas resource untuk antrean dalam partisi yang dapat diakses yang ditentukan. Penting
Agar berlaku, Anda juga harus mengonfigurasi kapasitas untuk semua antrean leluhur. |
|
yarn.scheduler.capacity.<queue-path>.accessible-node-labels.<label>.maximum-capacity |
Untuk aturan nilai, lihat yarn.scheduler.capacity.<queue-path>.maximum-capacity. Nilai default-nya adalah 100. |
Menentukan kapasitas resource maksimum yang dapat digunakan antrean dalam partisi yang dapat diakses yang ditentukan. |
|
yarn.scheduler.capacity.<queue-path>.default-node-label-expression |
Nama partisi. Default-nya adalah string kosong, yang merepresentasikan partisi DEFAULT. |
Menentukan partisi default untuk permintaan kontainer dalam pekerjaan yang dikirimkan ke antrean ini tanpa partisi yang ditentukan. |
-
Agar antrean tertentu memiliki kapasitas resource aktual lebih besar dari 0, Anda harus mengonfigurasi kapasitas untuk partisi yang sama pada semua antrean leluhurnya. Hal ini karena nilai default parameter
yarn.scheduler.capacity.<queue-path>.accessible-node-labels.<label>.capacityadalah 0. Oleh karena itu, Anda harus mengonfigurasiyarn.scheduler.capacity.root.accessible-node-labels.<label>.capacity=100agar antrean anaknya dapat memiliki kapasitas non-nol pada partisi tersebut. (Secara teoretis, nilai apa pun yang lebih besar dari 0 sudah cukup, tetapi mengonfigurasi nilai kurang dari 100 mengurangi kapasitas aktual yang dihitung untuk antrean anak dan tidak banyak berguna). Jika konfigurasi kapasitas untuk antrean leluhur tidak ada dan default-nya 0, maka kapasitas aktual yang dihitung untuk antrean target pada partisi ini juga akan menjadi 0. -
Setelah
yarn.scheduler.capacity.root.accessible-node-labels.<label>.capacitydiatur ke nilai lebih besar dari 0, aturan yang sama berlaku seperti pada propertiyarn.scheduler.capacity.<queue-path>.capacitybiasa: jumlah nilaicapacityuntuk partisi yang sama di semua antrean anak langsung harus 100.Contoh konfigurasi:
<configuration> <!-- Tambahkan properti label node dalam XML --> <property> <!-- Izinkan antrean default mengakses partisi DEMO (wajib) --> <name>yarn.scheduler.capacity.root.default.accessible-node-labels</name> <value>DEMO</value> </property> <property> <!-- Tetapkan kapasitas partisi DEMO pada semua antrean leluhur antrean default (wajib) --> <name>yarn.scheduler.capacity.root.accessible-node-labels.DEMO.capacity</name> <value>100</value> </property> <property> <!-- Tetapkan kapasitas partisi DEMO untuk antrean default (wajib) --> <name>yarn.scheduler.capacity.root.default.accessible-node-labels.DEMO.capacity</name> <value>100</value> </property> <property> <!-- Opsional: tetapkan kapasitas maksimum untuk antrean default di partisi DEMO. Default-nya adalah 100. --> <name>yarn.scheduler.capacity.root.default.accessible-node-labels.DEMO.maximum-capacity</name> <value>100</value> </property> <property> <!-- Opsional: tetapkan partisi default untuk permintaan kontainer pekerjaan yang dikirimkan ke antrean default. Default-nya adalah partisi DEFAULT "" --> <name>yarn.scheduler.capacity.root.default.default-node-label-expression</name> <value>DEMO</value> </property> <configuration>
Setelah mengedit dan menyimpan konfigurasi, gunakan operasi ResourceManager refreshQueues pada tab Status di halaman layanan YARN untuk melakukan hot-update konfigurasi scheduler. Lalu, verifikasi apakah pekerjaan berjalan sesuai harapan. Setelah pekerjaan berhasil, verifikasi hasilnya di UI web ResourceManager. Setelah konfigurasi diterapkan, pada halaman Scheduler ResourceManager, Anda dapat melihat bahwa Partition: DEMO telah mengalokasikan resource (memory:26214, vCores:16). Struktur antreannya adalah Queue: root > Queue: default. Hal ini menunjukkan bahwa pengaturan partisi DEMO dan kapasitas antreannya telah diterapkan.
Sebagian besar compute engine (kecuali Tez) juga mendukung label node melalui parameter pengiriman pekerjaan, yang tidak dibahas dalam topik ini.
|
Engine |
Parameter |
Description |
|
MapReduce |
mapreduce.job.node-label-expression |
Partisi default yang digunakan oleh semua kontainer dalam pekerjaan. |
|
mapreduce.job.am.node-label-expression |
Partisi yang digunakan oleh ApplicationMaster. |
|
|
mapreduce.map.node-label-expression |
Partisi yang digunakan oleh tugas map. |
|
|
mapreduce.reduce.node-label-expression |
Partisi yang digunakan oleh tugas reduce. |
|
|
Spark |
spark.yarn.am.nodeLabelExpression |
Partisi yang digunakan oleh ApplicationMaster. |
|
spark.yarn.executor.nodeLabelExpression |
Partisi yang digunakan oleh Executor. |
|
|
Flink |
yarn.application.node-label |
Partisi default yang digunakan oleh semua kontainer dalam pekerjaan. |
|
yarn.taskmanager.node-label |
Partisi yang digunakan oleh TaskManager. Didukung di Flink 1.15.0 ke atas, yang sesuai dengan EMR-3.44.0 (3.x) dan EMR-5.10.0 (5.x). |
FAQ
Penyimpanan data label node di kluster HA
Ya. Di kluster high availability (HA), ResourceManager dideploy pada beberapa node. Secara default, Hadoop open-source menyimpan data label node di direktori lokal, seperti file:///tmp/hadoop-yarn-${user}/node-labels/. Setelah failover, ResourceManager aktif baru tidak dapat membaca data label node yang disimpan secara lokal di node sebelumnya. Oleh karena itu, Anda harus menetapkan yarn.node-labels.fs-store.root-dir ke path penyimpanan terdistribusi, seperti /tmp/node-labels atau ${fs.defaultFS}/tmp/node-labels. Di EMR, sistem file default adalah HDFS. Untuk detailnya, lihat Prosedur.
Untuk path terdistribusi kustom, pastikan layanan sistem file dalam kondisi sehat dan pengguna hadoop memiliki akses baca dan tulis. Jika tidak, ResourceManager gagal memulai.
Menentukan port NodeManager
Di kluster EMR, setiap node menjalankan paling banyak satu proses NodeManager, sehingga menentukan port tidak diperlukan. Jika Anda menentukan port yang salah atau acak, perintah replaceLabelsOnNode akan gagal memetakan node ke partisi. Anda dapat menjalankan yarn node -list -showDetails untuk melihat partisi saat ini dari suatu node.
Kasus penggunaan label node
Dalam kebanyakan kasus, label node tidak diperlukan di kluster EMR. Banyak metrik di YARN Hadoop open-source tidak memperhitungkan partisi dan hanya melaporkan status untuk partisi DEFAULT, yang meningkatkan kompleksitas operasional. Penjadwalan berbasis partisi juga dapat mengurangi pemanfaatan resource secara keseluruhan dan menyebabkan pemborosan resource. Kasus penggunaan khas meliputi mengisolasi pekerjaan batch dan pekerjaan streaming berdasarkan partisi, menempelkan pekerjaan kritis ke node non-elastis, serta menampung tipe instans berbeda pada partisi terpisah untuk mencegah ketidakseimbangan resource.
Dokumentasi terkait
Untuk mengelola node kluster berdasarkan partisi, lihat Gunakan label node untuk mempartisi node.