All Products
Search
Document Center

E-MapReduce:Gunakan label node

Last Updated:Sep 22, 2026

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-type dalam file yarn-site.xml Anda diatur ke centralized.

  • 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 centralized, properti ini menentukan path penyimpanan untuk informasi label node. Anda dapat menyesuaikan path ini.

Catatan
  • Topik ini mencakup mode centralized untuk menjelaskan prinsip kerja pemetaan label node. Versi EMR 5.11.1 ke atas dan 3.45.1 ke atas secara default menggunakan yarn.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, dan DEMO. 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>.capacity adalah 0. Oleh karena itu, Anda harus mengonfigurasi yarn.scheduler.capacity.root.accessible-node-labels.<label>.capacity=100 agar 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>.capacity diatur ke nilai lebih besar dari 0, aturan yang sama berlaku seperti pada properti yarn.scheduler.capacity.<queue-path>.capacity biasa: jumlah nilai capacity untuk 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.

Penting

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.