HBase adalah database yang fleksibel, tetapi kinerjanya bergantung pada konfigurasi dan penggunaan yang tepat. Topik ini menjelaskan beberapa metode untuk mengoptimalkan kinerja baca. Di lingkungan produksi, Anda mungkin mengalami masalah seperti Full GC, error out-of-memory (OOM), masalah Region-In-Transition (RIT), dan latensi baca yang tinggi. Meskipun perangkat keras yang lebih baik dapat mengurangi masalah ini, optimisasi yang tepat tetap penting untuk mencapai kinerja terbaik.
Optimisasi dapat dibagi ke dalam kategori berikut:
optimisasi sisi client, optimisasi sisi server, dan optimisasi platform (ApsaraDB for HBase)
Optimisasi sisi client
Permintaan batch get
Permintaan batch secara signifikan mengurangi panggilan RPC antara client dan server, sehingga meningkatkan throughput secara nyata.
Result[] re= table.get(List<Get> gets)
Tetapkan ukuran cache untuk pemindaian besar
Saat memindai sejumlah besar data, client mengirim satu permintaan, dan server mengembalikan data secara bertahap. Desain ini mencegah transfer data besar sekaligus yang dapat membebani client atau server. Secara default, data dimuat ke cache lokal yang menampung 100 baris. Untuk pemindaian besar, hal ini dapat menghasilkan ratusan hingga puluhan ribu panggilan RPC. Tingkatkan ukuran cache untuk operasi semacam ini.
scan.setCaching(int caching) // Untuk pemindaian besar, Anda dapat mengatur nilai ini menjadi 1000.
Tentukan keluarga kolom atau kualifikasi
HBase adalah database berorientasi keluarga kolom. Data dalam satu keluarga kolom disimpan bersama, terpisah dari keluarga lainnya. Untuk mengurangi I/O, selalu tentukan keluarga kolom yang diperlukan atau kualifikasi kolom spesifik dalam permintaan Anda.
Nonaktifkan cache untuk tugas offline
Saat mengakses HBase untuk komputasi offline, data biasanya hanya dibaca sekali. Untuk menghindari cache blockcache terisi oleh data yang tidak akan digunakan kembali, nonaktifkan blockcache untuk pemindaian jenis ini.
scan.setBlockCache(false)
Optimisasi sisi server
Pastikan beban permintaan seimbang
Periksa apakah beban baca terkonsentrasi pada satu atau beberapa server saja, terutama selama jam sibuk. Anda dapat memantau hal ini melalui UI HBase di HBase Management Platform. Jika Anda mengidentifikasi hotspot yang signifikan, solusi jangka panjang terbaik adalah mendesain ulang rowkey Anda. Sebagai solusi jangka pendek, pertimbangkan untuk melakukan pemisahan (split) pada region yang panas tersebut.
Konfigurasikan ukuran blockcache
Blockcache adalah cache baca yang sangat penting bagi kinerja baca. Untuk workload yang dominan membaca, gunakan instans dengan rasio vCPU-memori 1:4, seperti 8 vCPU/32 GiB atau 16 vCPU/64 GiB. Anda dapat meningkatkan kinerja baca dengan memperbesar ukuran blockcache dan memperkecil ukuran Memstore.
Di Konsol ApsaraDB for HBase, atur hfile.block.cache.size menjadi 0,5 dan hbase.regionserver.global.memstore.size menjadi 0,3, lalu restart layanan.
Juga, ubah hbase.regionserver.global.memstore.lowerLimit menjadi 0,24.
Kelola jumlah HFile
Operasi baca memerlukan pembukaan HFile. Semakin banyak HFile, semakin banyak operasi I/O dan semakin tinggi latensi baca. Untuk mengatasinya, jalankan major compaction secara berkala. Jika workload Anda ringan pada malam hari, jadwalkan major compaction agar berjalan selama jam sepi.
Pantau konsumsi resource dari compaction
Compaction menggabungkan HFile kecil menjadi HFile yang lebih besar, yang meningkatkan kinerja baca berikutnya tetapi juga mengonsumsi resource sistem secara signifikan. Compaction minor biasanya tidak menyebabkan penggunaan resource berat kecuali jika dikonfigurasi secara salah. Hindari menjalankan major compaction selama jam sibuk. Jadwalkan major compaction pada periode jam sepi.
Gunakan bloom filter dengan benar
Bloom filter membantu menentukan apakah suatu HFile mungkin berisi baris tertentu, sehingga menghindari operasi I/O yang tidak perlu dan meningkatkan kinerja baca. Saat membuat tabel, aktifkan bloom filter pada rowkey dengan mengatur BLOOMFILTER => 'ROW'.
Optimisasi platform
Tingkatkan lokalisasi data
Jika HFile disimpan di node yang sama dengan node yang melayani datanya, HBase dapat menggunakan Short-Circuit Local Read untuk akses yang lebih cepat. Platform telah dioptimalkan untuk mempertahankan lokalisasi data yang tinggi. Setelah event seperti restart atau ekspansi disk, platform secara otomatis memulihkan region ke node lokalnya. Major compaction rutin juga membantu meningkatkan lokalisasi data.
Short-Circuit Local Read (diaktifkan secara default)
Secara normal, operasi baca HDFS melewati DataNode. Dengan Short-Circuit Local Read diaktifkan, client dapat melewati DataNode dan membaca data langsung dari disk lokal.
Hedged Read (diaktifkan secara default)
Sistem pertama-tama mencoba membaca secara lokal menggunakan Short-Circuit Local Read. Namun, baca lokal kadang-kadang melambat karena gangguan sementara pada disk atau jaringan. Hedged Read mengatasi masalah ini. Saat client memulai baca lokal, ia menjalankan timer singkat. Jika baca tidak selesai sebelum timer habis, client mengirim permintaan baca kedua ke DataNode yang berbeda. Client menggunakan respons pertama yang diterima dan membuang permintaan lainnya.
Nonaktifkan swap space (dinonaktifkan secara default)
Swap space adalah bagian dari hard drive yang digunakan sebagai memori virtual ketika memori fisik tidak mencukupi. Penggunaan swap space menimbulkan latensi signifikan, sehingga dinonaktifkan secara default pada platform ApsaraDB for HBase. Namun, menonaktifkan swap space dapat menyebabkan anon-rss menjadi tinggi, dan page reclaim mungkin gagal membebaskan cukup halaman, yang dapat menyebabkan kernel hang. Platform menggunakan langkah isolasi untuk mencegah hal ini.