Bisakah saya meningkatkan kinerja HBase dengan mengurangi ukuran blok hdfs?

Saya memiliki sekitar 2500 tabel yang terlibat dalam perhitungan. Di lingkungan pengembang saya, saya memiliki sangat sedikit data dalam tabel ini, 10 - 10.000 baris dengan sebagian besar tabel berada di ujung bawah kisaran ini. Perhitungan saya akan memindai semua tabel ini berkali-kali. Meskipun seluruh kumpulan data akan muat dalam memori, pengaksesannya melalui HBase sangatlah lambat, dengan aktivitas disk yang sangat besar.

Apakah menurut Anda ini akan membantu mengurangi ukuran blok hdfs? Alasan saya adalah jika setiap tabel berada di bloknya sendiri maka sejumlah besar memori akan terbuang percuma, sehingga mencegah seluruh kumpulan data berada di RAM. Ukuran blok yang sangat berkurang akan memungkinkan sistem menyimpan sebagian besar, jika tidak seluruh, data dalam RAM. Saat ini ukuran bloknya adalah 64MB.

Sistem terakhir akan digunakan dalam cluster yang lebih besar dengan memori dan node yang jauh lebih banyak, ini murni untuk mempercepat lingkungan pengembangan saya.


person user1098798    schedule 14.12.2011    source sumber


Jawaban (2)


HBase menyimpan datanya di HFiles (yang kemudian disimpan di dalam file Hadoop) berikut kutipannya dari dokumen:

Ukuran blok minimum. Kami merekomendasikan pengaturan ukuran blok minimum antara 8KB hingga 1MB untuk penggunaan umum. Ukuran blok yang lebih besar lebih disukai jika file terutama untuk akses berurutan. Namun, hal ini akan menyebabkan akses acak yang tidak efisien (karena ada lebih banyak data yang harus didekompresi). Blok yang lebih kecil bagus untuk akses acak, namun membutuhkan lebih banyak memori untuk menyimpan indeks blok, dan mungkin lebih lambat untuk dibuat (karena kita harus membuang aliran kompresor di akhir setiap blok data, yang akan menyebabkan FS I/O flush) . Selanjutnya, karena adanya cache internal dalam codec Kompresi, ukuran blok sekecil mungkin adalah sekitar 20KB-30KB.

terlepas dari ukuran blok Anda mungkin ingin mengatur kelompok kolom tabel menjadi benar dalam memori yang membuat hbase lebih memilih menyimpannya di cache.

Terakhir, situasi Anda tampaknya lebih cocok untuk cache seperti redis/memcache daripada Hbase, tapi mungkin saya tidak punya cukup konteks

person Arnon Rotem-Gal-Oz    schedule 14.12.2011
comment
Fantastis! Terima kasih balasannya. Pada akhirnya tabel akan menjadi jauh lebih besar, lebih dari satu juta baris dan perlu dipertahankan. Bisakah redis/memcache digunakan dalam skenario itu? - person user1098798; 15.12.2011
comment
lihat groups.google.com/group/redis-db/browse_thread/thread / untuk batas ukuran Redis. Sekali lagi saya tidak cukup tahu tentang persyaratan Anda. jadi teknologi terkait lainnya yang mungkin ingin Anda pertimbangkan mencakup solusi jaringan data seperti Gridgain, Hazelcast, Gigaspaces, atau Infinispan - person Arnon Rotem-Gal-Oz; 15.12.2011
comment
Perlu diingat bahwa ukuran blok HDFS dan ukuran blok HBase adalah hal yang berbeda. - person Dave L.; 13.03.2013

jika ukuran blok Anda terlalu kecil maka Anda memerlukan lebih banyak memori untuk menyimpan indeks blok. jika ukuran blok terlalu besar maka HBase harus memindai lebih banyak baris untuk mendeteksi kunci yang dicari ada di blok HBase atau tidak. Jika pasangan KV Anda berukuran 100 byte maka 640 KV masuk ke dalam satu blok yang merupakan nilai yang baik.

person ozhang    schedule 04.08.2014