全部产品
Search
文档中心

E-MapReduce:HDFS balancer

更新时间:Jun 24, 2025

Anda dapat menggunakan Hadoop Distributed File System (HDFS) balancer untuk menganalisis distribusi blok data dan mendistribusikan ulang data yang disimpan di DataNodes. Topik ini menjelaskan cara menggunakan HDFS balancer serta mengonfigurasi parameter tuning balancer.

Informasi latar belakang

HDFS mengadopsi arsitektur master-slave. NameNode mengelola metadata sistem file, seperti nama file, informasi blok, dan lokasi file. Blok data aktual disimpan di beberapa DataNodes. Arsitektur master-slave memungkinkan data disimpan di berbagai lokasi, meningkatkan toleransi kesalahan sistem file.

Saat file ditambahkan, dihapus, atau dimodifikasi, distribusi data di antara DataNodes mungkin menjadi tidak merata. Ruang penyimpanan pada beberapa DataNodes hampir penuh, sementara ruang penyimpanan lainnya tetap menganggur. Ketidakseimbangan ini memengaruhi efisiensi penyimpanan sistem file dan meningkatkan risiko kehilangan data karena DataNodes dengan beban besar lebih rentan terhadap kegagalan perangkat keras.

Untuk menyelesaikan masalah ini, HDFS menyediakan alat balancer, yaitu utilitas baris perintah yang digunakan untuk menyeimbangkan kembali distribusi data di antara DataNodes. HDFS balancer memindahkan blok data antar DataNodes guna memastikan penggunaan sumber daya penyimpanan kluster secara efisien.

Lihat kapasitas dan penggunaan ruang penyimpanan DataNodes

Anda dapat melihat kapasitas dan penggunaan ruang penyimpanan DataNodes untuk mengetahui alokasi sumber daya penyimpanan, mengidentifikasi masalah penyimpanan yang tidak mencukupi sejak dini, serta memastikan bahwa data didistribusikan secara merata di antara node. Hal ini meningkatkan kinerja dan stabilitas keseluruhan sistem.

  1. Masuk ke node master kluster yang ingin Anda kelola. Untuk informasi lebih lanjut, lihat Masuk ke Kluster.

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

hdfs dfsadmin -report

Hasilnya mencakup informasi seperti kapasitas total, ruang penyimpanan yang digunakan, persentase penggunaan, dan ruang penyimpanan tersisa dari setiap DataNode. Informasi ini membantu Anda mengidentifikasi ketidakseimbangan dalam distribusi penyimpanan.

Jika distribusi data sangat tidak merata, Anda dapat memulai HDFS balancer. Misalnya, jika penggunaan ruang penyimpanan pada DataNodes tertentu jauh lebih tinggi dibandingkan dengan node lainnya dan selisihnya melebihi ambang batas keseimbangan default atau yang ditentukan (biasanya 10%), penyeimbangan diperlukan.

Gunakan HDFS balancer

Metode 1: Jalankan perintah hdfs balancer

Jalankan perintah berikut untuk mengonfigurasi HDFS balancer:

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 HDFS balancer.

Parameter

Deskripsi

threshold

Ambang batas perbedaan penggunaan disk, dalam persentase.

Nilai default: 10%. Nilai ini memastikan bahwa penggunaan disk pada setiap DataNode berbeda dari penggunaan disk keseluruhan kluster tidak lebih dari 10%.

Jika penggunaan disk keseluruhan kluster tinggi, atur parameter ini ke nilai yang lebih kecil.

Jika Anda menambahkan sejumlah besar node ke kluster, Anda dapat mengatur parameter ini ke nilai yang lebih besar untuk memindahkan data dari node dengan penggunaan tinggi ke node dengan penggunaan rendah.

policy

Kebijakan penyeimbangan. Nilai valid:

  • datanode: Jika data didistribusikan secara merata ke semua DataNodes, kluster Anda seimbang. Ini adalah nilai default.

  • blockpool: Jika semua block pool di setiap DataNode seimbang, kluster Anda seimbang.

exclude

Mengecualikan DataNodes tertentu.

include

Menentukan DataNodes tempat Anda ingin melakukan operasi penyeimbangan.

source

DataNode yang berfungsi sebagai node sumber.

blockpools

Block pools tempat Anda ingin menjalankan HDFS balancer.

idleiterations

Jumlah maksimum loop idle yang diizinkan. Nilai default: 5.

Metode 2: Gunakan alat start-balancer.sh

Anda dapat menggunakan alat start-balancer.sh dengan menjalankan perintah hdfs daemon start balancer. Untuk menggunakan alat ini, ikuti langkah-langkah berikut:

  1. Masuk ke node kluster yang ingin Anda kelola. Untuk informasi lebih lanjut, lihat Masuk ke Kluster.

  2. Opsional. Jalankan perintah berikut untuk memodifikasi bandwidth maksimum HDFS balancer:

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

    <bandwidth in bytes per second> menentukan bandwidth maksimum per detik. Misalnya, jika Anda ingin mengonfigurasi bandwidth maksimum 200 MB/s, atur <bandwidth in bytes per second> menjadi 209715200, dalam byte, yang dihitung berdasarkan rumus berikut: 200 × 1024 × 1024. Perintah lengkapnya adalah hdfs dfsadmin -setBalancerBandwidth 209715200. Untuk memanfaatkan sepenuhnya sumber daya jaringan dan memastikan kelangsungan bisnis inti, kami sarankan Anda menentukan nilai kecil untuk bandwidth maksimum jika kluster memiliki beban berat. Misalnya, Anda dapat mengatur nilainya menjadi 20971520, yang menunjukkan 20 MB/s. Untuk mempercepat proses penyeimbangan data, kami sarankan Anda menentukan nilai besar untuk bandwidth maksimum jika kluster menganggur. Misalnya, Anda dapat mengatur nilainya menjadi 1073741824, yang menunjukkan 1 GB/s.

  3. Jalankan perintah berikut untuk beralih ke pengguna hdfs dan menjalankan HDFS balancer:

    • Kluster DataLake

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

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

      Parameter -threshold menentukan ambang batas untuk penyeimbangan data. Jika Anda mengatur ambang batas menjadi 5%, HDFS balancer menganggap bahwa data didistribusikan secara merata dan tidak lagi memindahkan blok data dari atau ke DataNode ketika selisih antara kapasitas penyimpanan data DataNode dan kapasitas penyimpanan rata-rata kluster kurang dari atau sama dengan 5%. Anda dapat mengonfigurasi parameter ini berdasarkan kebutuhan bisnis Anda untuk mencapai efek keseimbangan yang diharapkan.

  4. Jalankan perintah berikut untuk memeriksa status HDFS balancer:

    • Kluster DataLake

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

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

      hadoop-hdfs-balancer-master-1-1.c-xxx.log dan hadoop-hdfs-balancer-emr-header-xx.cluster-xxx.log dalam perintah adalah nama log yang diperoleh pada langkah sebelumnya.

    Jika output perintah mencakup Successfully, HDFS balancer berjalan sesuai harapan.

Parameter tuning HDFS balancer

HDFS balancer mengonsumsi sumber daya sistem. Kami sarankan Anda menjalankan HDFS balancer selama jam-jam sepi. Secara default, Anda tidak perlu memodifikasi parameter HDFS balancer. Namun, jika diperlukan, buka tab Configure halaman layanan HDFS di konsol E-MapReduce (EMR) dan klik hdfs-site.xml. Pada tab hdfs-site.xml, sesuaikan konfigurasi klien dan DataNodes sesuai kebutuhan bisnis Anda.

  • Konfigurasi Klien

    Parameter

    Deskripsi

    dfs.balancer.dispatcherThreads

    Jumlah thread dispatcher yang digunakan oleh HDFS balancer untuk menentukan blok yang perlu dipindahkan. Sebelum HDFS balancer memindahkan jumlah data tertentu di antara dua DataNodes, balancer berulang kali mengambil daftar blok untuk memindahkan blok sampai jumlah data yang diperlukan dijadwalkan.

    null

    Nilai default adalah 200.

    dfs.balancer.rpc.per.sec

    Jumlah panggilan prosedur jarak jauh (RPC) yang dikirim oleh thread dispatcher per detik. Nilai default: 20.

    Sebelum HDFS balancer memindahkan data di antara dua DataNodes, balancer menggunakan thread dispatcher untuk berulang kali mengirim RPC getBlocks() ke NameNode. Hal ini menghasilkan beban berat pada NameNode. Untuk mencegah masalah ini dan menyeimbangkan beban kluster, kami sarankan Anda mengonfigurasi parameter ini untuk membatasi jumlah RPC yang dikirim per detik.

    Misalnya, Anda dapat mengurangi nilai parameter sebesar 10 atau 5 untuk kluster yang memiliki beban tinggi untuk meminimalkan dampak pada kemajuan pemindahan keseluruhan.

    dfs.balancer.getBlocks.size

    Ukuran data total blok yang dipindahkan setiap kali. Sebelum HDFS balancer memindahkan data di antara dua DataNodes, balancer berulang kali mengambil daftar blok untuk memindahkan blok sampai jumlah data yang diperlukan dijadwalkan. Secara default, ukuran blok di setiap daftar blok adalah 2 GB. Saat NameNode menerima RPC getBlocks(), NameNode terkunci. Jika RPC meminta sejumlah besar blok, NameNode terkunci untuk waktu yang lama. Hal ini memperlambat penulisan data. Untuk mencegah masalah ini, kami sarankan Anda mengonfigurasi parameter ini berdasarkan beban NameNode.

    dfs.balancer.moverThreads

    Jumlah total thread yang digunakan untuk memindahkan blok. Setiap pemindahan blok memerlukan satu thread. Nilai default: 1000.

  • Konfigurasi DataNode

    Parameter

    Deskripsi

    dfs.datanode.balance.bandwidthPerSec

    Bandwidth setiap DataNode yang digunakan untuk menyeimbangkan beban kerja kluster. Kami sarankan Anda mengatur bandwidth menjadi 100 MB/s. Anda juga dapat mengonfigurasi parameter dfsadmin -setBalancerBandwidth untuk menyesuaikan bandwidth. Anda tidak perlu memulai ulang DataNodes.

    Misalnya, Anda dapat meningkatkan bandwidth saat beban kluster rendah dan mengurangi bandwidth saat beban kluster tinggi.

    dfs.datanode.balance.max.concurrent.moves

    Jumlah maksimum pemindahan blok bersamaan yang diizinkan di DataNode. Nilai default: 5. Anda dapat mengonfigurasi parameter ini berdasarkan jumlah disk. Kami sarankan Anda mengatur parameter ini ke 4 × Jumlah disk sebagai batas atas untuk DataNode.

    Misalnya, jika DataNode memiliki 28 disk, atur parameter ini menjadi 28 pada HDFS balancer dan 112 pada DataNode. Anda dapat menyesuaikan nilai berdasarkan beban kluster. Anda dapat meningkatkan nilai saat beban kluster rendah dan mengurangi nilai saat beban kluster tinggi.

FAQ

T: Mengapa perbedaan sekitar 20% tetap ada setelah operasi penyeimbangan dilakukan meskipun parameter ambang batas diatur ke 10%?

J: Parameter ambang batas digunakan untuk mencegah penggunaan setiap DataNode menjadi jauh lebih tinggi atau lebih rendah dari penggunaan rata-rata kluster. Akibatnya, perbedaan antara DataNodes dengan penggunaan tertinggi dan terendah mungkin mencapai 20% setelah operasi penyeimbangan dilakukan. Untuk mengurangi perbedaan, Anda dapat mengatur parameter ambang batas menjadi 5%.