All Products
Search
Document Center

E-MapReduce:HDFS balancer

Last Updated:Jul 18, 2026

HDFS balancer menganalisis distribusi blok dan mendistribusikan ulang data di antara DataNode untuk menjaga pemanfaatan penyimpanan yang merata di seluruh kluster Anda.

Latar Belakang

HDFS menggunakan arsitektur master-slave. NameNode mengelola metadata sistem file, seperti nama file dan lokasi blok data, sedangkan beberapa DataNode menyimpan blok data aktual. Arsitektur ini memungkinkan redundansi data dan meningkatkan toleransi kesalahan sistem.

Seiring waktu, operasi seperti penambahan, penghapusan, dan modifikasi file dapat menyebabkan distribusi data yang tidak merata di antara DataNode. Beberapa node mungkin mendekati kapasitas penyimpanannya, sementara yang lain memiliki ruang kosong yang cukup. Ketidakseimbangan ini memengaruhi efisiensi penyimpanan dan meningkatkan risiko kehilangan data karena node yang terlalu penuh lebih rentan terhadap kegagalan perangkat keras.

Untuk mengatasi masalah ini, HDFS menyediakan HDFS balancer, yaitu utilitas command line yang memindahkan blok data di antara DataNode guna mengurangi ketidakseimbangan penyimpanan dan meningkatkan pemanfaatan resource.

View kapasitas dan penggunaan DataNode

Periksa kapasitas dan penggunaan DataNode untuk mengidentifikasi ketidakseimbangan penyimpanan dan menentukan apakah diperlukan penyeimbangan ulang.

  1. Sambungkan ke node master kluster target. Untuk informasi lebih lanjut, lihat Connect to a cluster.

  2. Jalankan perintah berikut untuk melihat kapasitas dan penggunaan setiap DataNode.

hdfs dfsadmin -report

Output menampilkan kapasitas total, ruang yang digunakan, persentase penggunaan, dan ruang tersisa setiap DataNode.

Jalankan HDFS balancer ketika perbedaan penggunaan penyimpanan antar DataNode melebihi ambang batas yang dikonfigurasi (secara default 10%).

Jalankan HDFS balancer

Metode 1: Gunakan perintah hdfs balancer

Sintaks perintah hdfs balancer adalah sebagai berikut:

hdfs balancer
[-threshold <threshold>]
[-policy <policy>]
[-exclude [-f <hosts-file> | <comma-separated list of hosts>]]
[-include [-f <hosts-file> | <comma-separated list of hosts>]]
[-source [-f <hosts-file> | <comma-separated list of hosts>]]
[-blockpools <comma-separated list of blockpool ids>]
[-idleiterations <idleiterations>]

Tabel berikut menjelaskan parameter utama untuk balancer.

Parameter

Description

threshold

Persentase deviasi yang diizinkan dari rata-rata penggunaan disk di seluruh kluster.

Nilai default-nya adalah 10%, artinya penggunaan setiap DataNode harus berada dalam kisaran ±10% dari rata-rata kluster.

Ketika penggunaan keseluruhan kluster tinggi, Anda sebaiknya menurunkan nilai ini agar balancer tidak gagal menemukan blok yang dapat dipindahkan.

Ketika Anda menambahkan banyak node baru ke kluster, Anda dapat meningkatkan nilai ini untuk mempercepat perpindahan data dari node dengan penggunaan tinggi ke node dengan penggunaan rendah.

policy

Kebijakan penyeimbangan. Kebijakan berikut didukung:

  • datanode (default): Kluster dianggap seimbang jika penggunaan setiap DataNode berada dalam ambang batas.

  • blockpool: Kluster dianggap seimbang jika pool blok pada setiap DataNode memenuhi kriteria penyeimbangan.

exclude

Mengecualikan DataNode tertentu dari operasi penyeimbangan.

include

Hanya menyertakan DataNode tertentu dalam operasi penyeimbangan.

source

Menentukan DataNode mana yang dapat menjadi sumber perpindahan data.

blockpools

Menjalankan balancer hanya pada block pool yang ditentukan.

idleiterations

Jumlah maksimum iterasi idle sebelum balancer keluar. Nilai ini menggantikan nilai default 5.

Metode 2: Gunakan tool start-balancer.sh

Skrip start-balancer.sh merupakan wrapper yang memanggil perintah hdfs daemon start balancer. Untuk menggunakan skrip ini, ikuti langkah-langkah berikut:

  1. Sambungkan ke salah satu node dalam kluster target. Untuk informasi lebih lanjut, lihat Connect to a cluster.

  2. Opsional: Jalankan perintah berikut untuk mengatur bandwidth maksimum balancer.

    hdfs dfsadmin -setBalancerBandwidth <bandwidth in bytes per second>
    Catatan

    Parameter <bandwidth in bytes per second> menentukan bandwidth maksimum. Misalnya, untuk mengatur bandwidth menjadi 200 MB/detik, nilainya adalah 209.715.200 (200 × 1024 × 1024 byte). Perintah lengkapnya adalah hdfs dfsadmin -setBalancerBandwidth 209715200. Untuk mengoptimalkan penggunaan jaringan dan melindungi layanan kritis selama periode beban tinggi, kami merekomendasikan mengurangi bandwidth penyeimbangan, misalnya menjadi 20.971.520 (20 MB/detik). Selama jam sepi, Anda dapat meningkatkan bandwidth, misalnya menjadi 1.073.741.824 (1 GB/detik), untuk mempercepat proses penyeimbangan.

  3. Jalankan perintah berikut untuk beralih ke pengguna hdfs dan mengeksekusi skrip balancer.

    • DataLake cluster

      su hdfs
      /opt/apps/HDFS/hdfs-current/sbin/start-balancer.sh -threshold 5
    • Hadoop cluster

      su hdfs
      /usr/lib/hadoop-current/sbin/start-balancer.sh -threshold 5
      Catatan

      Parameter -threshold 5 mengatur ambang batas penyeimbangan. Ambang batas 5% berarti balancer menganggap DataNode seimbang jika penggunaan penyimpanannya berada dalam kisaran ±5% dari rata-rata penggunaan kluster. Balancer tidak akan memindahkan blok data ke atau dari node tersebut. Anda dapat menyesuaikan nilai ini untuk mencapai keseimbangan yang diinginkan di lingkungan Anda.

  4. Jalankan perintah berikut untuk memantau progres balancer.

    • DataLake cluster

      tail -f /var/log/emr/hadoop-hdfs/hadoop-hdfs-balancer-master-1-1.c-xxx.log
    • Hadoop cluster

      tail -f /var/log/hadoop-hdfs/hadoop-hdfs-balancer-emr-header-1.cluster-xxx.log
      Catatan

      Nama file log hadoop-hdfs-balancer-master-1-1.c-xxx.log dan hadoop-hdfs-balancer-emr-header-xx.cluster-xxx.log hanyalah contoh. Gunakan nama file log aktual dari kluster Anda.

    Jika output berisi kata Successfully, operasi berhasil.

Menyesuaikan parameter balancer

Balancer mengonsumsi resource sistem, sehingga sebaiknya dijalankan selama jam sepi. Secara default, tidak diperlukan penyesuaian parameter. Jika diperlukan penyesuaian, buka halaman layanan HDFS di Konsol E-MapReduce, pilih Configure > hdfs-site.xml, lalu sesuaikan konfigurasi berikut.

  • Konfigurasi klien

    Parameter

    Description

    dfs.balancer.dispatcherThreads

    Sebelum memindahkan blok data, balancer mengambil daftar blok pada setiap iterasi dan mendistribusikannya ke thread mover.

    Catatan

    Parameter dispatcherThreads menentukan jumlah thread untuk tugas distribusi ini. Nilai default-nya adalah 200.

    dfs.balancer.rpc.per.sec

    Jumlah RPC yang dikirim per detik. Nilai default-nya adalah 20.

    Thread dispatcher melakukan banyak panggilan RPC getBlocks ke NameNode. Untuk mencegah beban berlebihan pada NameNode, Anda dapat mengontrol laju RPC ini.

    Misalnya, pada kluster dengan beban tinggi, Anda dapat mengurangi nilai ini menjadi 10 atau 5. Hal ini memiliki dampak minimal terhadap progres keseluruhan perpindahan data.

    dfs.balancer.getBlocks.size

    Pada setiap iterasi, balancer mengambil daftar blok untuk thread mover. Parameter ini mengatur ukuran total blok dalam daftar tersebut, dengan nilai default 2 GB. Karena proses getBlocks mengunci NameNode, Anda dapat menyesuaikan nilai ini berdasarkan beban saat ini pada NameNode.

    dfs.balancer.moverThreads

    Jumlah thread yang memindahkan blok data. Setiap thread menangani satu perpindahan blok.

    Nilai default-nya adalah 1000.

  • Konfigurasi DataNode

    Parameter

    Description

    dfs.datanode.balance.bandwidthPerSec

    Menentukan bandwidth yang dapat digunakan oleh DataNode untuk penyeimbangan. Pengaturan yang direkomendasikan adalah 100 MB/detik. Anda juga dapat menyesuaikan nilai ini secara dinamis dengan perintah dfsadmin -setBalancerBandwidth tanpa harus me-restart DataNode.

    Misalnya, tingkatkan bandwidth selama periode beban rendah dan kurangi selama periode beban tinggi.

    dfs.datanode.balance.max.concurrent.moves

    Jumlah maksimum blok yang dapat dipindahkan secara bersamaan oleh DataNode. Nilai default-nya adalah 5.

    Biasanya, nilai ini harus sesuai dengan jumlah disk. Kami menyarankan untuk menetapkan batas atas 4 * <number disks="" id="37b28fc25e9tt" of=""></number> di sisi DataNode, lalu menyetelnya menggunakan balancer.

    Misalnya, jika DataNode memiliki 28 disk, Anda dapat mengatur nilainya menjadi 28 di sisi balancer dan menjadi 28 * 4 di sisi DataNode. Sesuaikan nilai-nilai tersebut berdasarkan beban kluster. Tingkatkan jumlah perpindahan konkuren saat beban rendah, dan kurangi saat beban tinggi.

FAQ

Q: Mengapa perbedaan penggunaan antar node masih sekitar 20% setelah penyeimbangan, meskipun ambang batas diatur ke 10%?

A: Parameter threshold memastikan bahwa penggunaan setiap DataNode tidak menyimpang lebih dari persentase yang ditentukan dari penggunaan rata-rata kluster. Oleh karena itu, setelah penyeimbangan, selisih penggunaan antara node dengan pemanfaatan tertinggi dan terendah dapat mencapai dua kali lipat ambang batas. Misalnya, satu node mungkin 10% di atas rata-rata, sementara yang lain 10% di bawah, sehingga menghasilkan selisih 20% di antara keduanya. Untuk mengurangi selisih ini, coba atur threshold ke nilai yang lebih kecil, seperti 5%.