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.
Masuk ke node master kluster yang ingin Anda kelola. Untuk informasi lebih lanjut, lihat Masuk ke Kluster.
Jalankan perintah berikut untuk melihat kapasitas dan penggunaan ruang penyimpanan setiap DataNode:
hdfs dfsadmin -reportHasilnya 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:
|
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:
Masuk ke node kluster yang ingin Anda kelola. Untuk informasi lebih lanjut, lihat Masuk ke Kluster.
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 adalahhdfs 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.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 5Kluster Hadoop
su hdfs /usr/lib/hadoop-current/sbin/start-balancer.sh -threshold 5nullParameter
-thresholdmenentukan 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.
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.logKluster Hadoop
tail -f /var/log/hadoop-hdfs/hadoop-hdfs-balancer-emr-header-1.cluster-xxx.lognullhadoop-hdfs-balancer-master-1-1.c-xxx.logdanhadoop-hdfs-balancer-emr-header-xx.cluster-xxx.logdalam 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.
nullNilai 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 disksebagai 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%.