Ulasan: HBase sangat terukur - dan sangat kompleks

Apache HBase mendeskripsikan dirinya sebagai "database Hadoop," yang bisa sedikit membingungkan, karena Hadoop biasanya dipahami merujuk ke kerangka kerja pemrosesan MapReduce yang populer. Tapi Hadoop sebenarnya adalah nama payung untuk seluruh ekosistem teknologi, beberapa di antaranya digunakan HBase untuk membuat database terdistribusi dan berorientasi kolom yang dibangun berdasarkan prinsip yang sama dengan Bigtable Google. HBase tidak menggunakan kemampuan MapReduce Hadoop secara langsung, meskipun HBase dapat berintegrasi dengan Hadoop untuk berfungsi sebagai sumber atau tujuan pekerjaan MapReduce.

Keunggulan HBase adalah skalabilitas ekstrem, keandalan tinggi, dan fleksibilitas skema yang Anda dapatkan dari database berorientasi kolom. Meskipun kelompok tabel dan kolom harus ditentukan sebelumnya, Anda dapat menambahkan kolom baru dengan cepat. HBase juga menawarkan konsistensi tingkat baris yang kuat, versi bawaan, dan "koprosesor" yang menyediakan pemicu dan prosedur tersimpan yang setara.

[Juga di: Pertarungan data besar: Cassandra vs. HBase | Database mana yang harus saya gunakan? | Bossie Awards 2013: Alat big data open source terbaik | Pertikaian NoSQL: MongoDB vs. Couchbase | Dapatkan intisari dari cerita utama setiap hari di buletin Harian. ]

Dirancang untuk mendukung kueri kumpulan data besar, HBase dioptimalkan untuk kinerja baca. Untuk menulis, HBase berupaya menjaga konsistensi. Berbeda dengan Cassandra yang "akhirnya konsisten", HBase tidak menawarkan berbagai pengaturan tingkat konsistensi (untuk mengakui penulisan setelah satu node menulisnya atau kuorum node telah menulisnya). Jadi, harga konsistensi kuat HBase adalah bahwa penulisan bisa lebih lambat.

HDFS - Sistem File Terdistribusi Hadoop - adalah fondasi ekosistem Hadoop, dan itu adalah sistem file di atas tempat HBase berada. Didesain untuk berjalan pada perangkat keras komoditas dan mentolerir kegagalan node anggota, HDFS berfungsi paling baik untuk sistem pemrosesan batch yang lebih memilih akses streaming ke kumpulan data besar. Hal ini tampaknya membuatnya tidak sesuai untuk akses acak yang diharapkan dalam sistem database seperti HBase. Tapi HBase mengambil langkah untuk mengimbangi perilaku HDFS yang tidak sesuai.

Zookeeper, teknologi Hadoop lainnya (meskipun tidak lagi digunakan oleh versi mesin Hadoop MapReduce saat ini), adalah layanan komunikasi dan koordinasi terdistribusi. Zookeeper mempertahankan struktur data dalam memori yang tersinkronisasi yang dapat diakses oleh banyak klien. Struktur data diatur seperti sistem file, meskipun komponen struktur (znodes) dapat berupa wadah data, serta elemen dalam pohon hierarki. Bayangkan sebuah sistem file yang filenya juga bisa berupa direktori.

HBase menggunakan Zookeeper untuk mengoordinasikan aktivitas cluster dan memantau kesehatan node anggota. Saat Anda menjalankan cluster HBase, Anda juga harus menjalankan Zookeeper secara paralel. HBase akan menjalankan dan mengelola Zookeeper secara default, meskipun Anda dapat mengkonfigurasi HBase untuk menggunakan pengaturan Zookeeper yang dikelola secara terpisah. Anda bahkan dapat menjalankan proses server Zookeeper pada perangkat keras yang sama dengan proses HBase lainnya, tetapi itu tidak disarankan, terutama untuk kluster HBase volume tinggi.

Bagaimana HBase bekerja

Lebih tepatnya, baris adalah kumpulan pasangan kunci / nilai, kunci menjadi pengidentifikasi kolom dan nilai adalah konten sel yang ada di persimpangan baris dan kolom tertentu. Namun, karena HBase adalah database berorientasi kolom, tidak ada dua baris dalam tabel yang perlu memiliki kolom yang sama. Untuk memperumit masalah lebih lanjut, data diversi dalam HBase. Koordinat sebenarnya dari suatu nilai (sel) adalah tupel {row key, column key, timestamp}. Selain itu, kolom dapat dikelompokkan ke dalam keluarga kolom, yang memberikan desainer database kontrol lebih lanjut atas karakteristik akses, karena semua kolom dalam keluarga kolom akan disimpan berdekatan satu sama lain.

Operasi tulis di HBase pertama-tama mencatat data ke log komit ("log depan tulis"), lalu ke struktur memori internal yang disebut MemStore. Saat MemStore terisi, MemStore dipindahkan ke disk sebagai entitas yang disebut HFile. HFiles disimpan sebagai urutan blok data, dengan indeks ditambahkan ke akhir file. Indeks lain, disimpan dalam memori, mempercepat pencarian data di HFiles.

HFiles tidak dapat diubah setelah ditulis. Jika kunci dihapus, HBase merekam penanda "batu nisan" khusus untuk memperingati penghapusan tersebut. Batu nisan dihapus (seperti data yang dihapus) saat HFiles secara berkala dipadatkan.

HBase mencoba untuk memenuhi operasi baca terlebih dahulu melalui MemStore. Jika gagal, HBase memeriksa struktur dalam memori lainnya, BlockStore, yang merupakan cache baca yang dirancang untuk mengirimkan data yang sering dibaca dari memori, bukan dari HFiles berbasis disk.

HBase memecah baris menurut wilayah, yang ditentukan oleh berbagai tombol baris. Setiap wilayah dalam cluster HBase dikelola oleh proses RegionServer. Biasanya, ada satu proses RegionServer per node HBase. Saat jumlah data bertambah, HBase membagi wilayah dan memigrasikan data terkait ke node yang berbeda di cluster untuk tujuan penyeimbangan.

Arsitektur cluster HBase tidak sepenuhnya simetris. Misalnya, setiap cluster harus memiliki satu node master aktif. Beberapa node dapat (dan harus) ditetapkan sebagai node master, tetapi ketika cluster melakukan booting, calon master berkoordinasi sehingga hanya satu master akting. Merupakan tanggung jawab master untuk memantau server wilayah, menangani failover server wilayah, dan mengoordinasikan pembagian wilayah.

Jika node master mengalami error, cluster masih dapat beroperasi dalam mode steady-state - mengelola permintaan baca dan tulis - tetapi tidak dapat menjalankan operasi apa pun yang memerlukan koordinasi master (seperti penyeimbangan ulang). Inilah mengapa ide yang bagus untuk menentukan beberapa node master; jika dan ketika penguasa yang berkuasa gagal, itu akan segera diganti.

Anda dapat menjalankan HBase di atas sistem file asli untuk tujuan pengembangan, tetapi cluster HBase yang digunakan berjalan di HDFS, yang - seperti yang disebutkan sebelumnya - tampak seperti taman bermain yang buruk untuk HBase. Meskipun sistem file yang mendasari berorientasi streaming, HBase mencapai I / O acak cepat. Ini menyelesaikan keajaiban ini dengan kombinasi batching tulis dalam memori dan menyimpan data ke disk menggunakan pohon gabungan terstruktur log. Akibatnya, semua penulisan acak dilakukan dalam memori, dan saat data di-flush ke disk, data diurutkan terlebih dahulu, lalu ditulis secara berurutan dengan indeks yang menyertainya. Pembacaan acak pertama kali dilakukan dalam memori, seperti yang disebutkan di atas. Jika data yang diminta tidak ada dalam memori, pencarian disk selanjutnya akan lebih cepat karena data diurutkan dan diindeks.

Bekerja dengan HBase

Meskipun HBase tidak mendukung transaksi, tidak juga pada akhirnya konsisten; sebaliknya, HBase mendukung konsistensi yang kuat, setidaknya pada level satu baris. HBase tidak memiliki pengertian tentang tipe data; semuanya disimpan sebagai array byte. Namun, HBase tidak mendefinisikan tipe data "counter" khusus, yang menyediakan operasi kenaikan atom - berguna untuk menghitung tampilan halaman Web, misalnya. Anda dapat menambah jumlah penghitung dalam satu baris melalui satu panggilan, dan tanpa harus mengunci baris. Perhatikan bahwa penghitung akan disinkronkan untuk operasi tulis (banyak penulisan akan selalu menjalankan peningkatan yang konsisten) tetapi tidak harus untuk operasi baca.

Shell HBase sebenarnya adalah shell Ruby interaktif yang dimodifikasi yang berjalan di JRuby, dengan Ruby yang dijalankan di VM Java. Apa pun yang dapat Anda lakukan di shell Ruby interaktif dapat Anda lakukan di shell HBase, yang berarti shell HBase dapat menjadi lingkungan skrip yang kuat.

Versi terbaru shell menyediakan semacam antarmuka berorientasi objek untuk memanipulasi tabel HBase. Anda dapat, misalnya, menetapkan tabel ke variabel JRuby, lalu mengeluarkan metode pada objek tabel menggunakan notasi titik standar. Misalnya, jika Anda telah mendefinisikan tabel dan menetapkannya ke myTablevariabel, Anda dapat menulis (meletakkan) data ke tabel dengan sesuatu seperti:

            myTable.put '', '', ''

Ini akan menuliskan nilainya ke dalam baris di kolom .

Ada beberapa GUI manajemen pihak ketiga untuk HBase, seperti hbase-explorer. HBase sendiri menyertakan beberapa alat pemantauan berbasis Web built-in. Node master HBase melayani antarmuka Web pada port 60010. Jelajahi, dan Anda akan menemukan informasi tentang node master itu sendiri termasuk waktu mulai, port Zookeeper saat ini, daftar server wilayah, jumlah rata-rata wilayah per server wilayah , dan seterusnya. Daftar tabel juga tersedia. Klik pada tabel dan Anda akan melihat informasi seperti server wilayah yang menghosting komponen tabel. Halaman ini juga menyediakan kontrol untuk memulai pemadatan pada tabel atau memisahkan daerah tabel.

Selain itu, setiap node server wilayah menjalankan antarmuka Web pemantauan pada port 60030. Di sini Anda akan menemukan banyak metrik: latensi baca dan tulis, misalnya, dipecah menjadi berbagai persentil. Anda juga dapat melihat informasi tentang wilayah yang dikelola oleh server wilayah ini, dan Anda dapat membuat dump dari utas aktif di server.

Panduan referensi HBase mencakup panduan Memulai dan FAQ. Ini adalah dokumen langsung, jadi Anda akan menemukan komentar komunitas pengguna yang dilampirkan pada setiap entri. Situs web HBase juga menyediakan tautan ke HBase Java API, serta video dan sumber informasi HBase di luar situs. Informasi lebih lanjut dapat ditemukan di wiki HBase. Meskipun bagus, dokumentasi HBase tidak cukup setara dengan dokumentasi yang pernah saya lihat di situs produk database lain, seperti Cassandra dan MongoDB. Namun demikian, ada banyak materi di Internet, dan komunitas HBase cukup besar dan cukup aktif sehingga setiap pertanyaan tentang HBase tidak akan terjawab dalam waktu lama.

Salah satu tambahan terbaru HBase yang lebih menarik adalah dukungan untuk "koprosesor" - kode pengguna yang dijalankan sebagai bagian dari proses RegionServer dan Master HBase. Ada sekitar dua jenis koprosesor: pengamat dan titik akhir. Pengamat adalah kelas Java yang ditulis pengguna yang mendefinisikan metode yang akan dipanggil ketika peristiwa HBase tertentu terjadi. Pikirkan seorang pengamat sebagai mitra HBase untuk pemicu RDBMS. Salah satu pengamat, yang disebut RegionObserver, dapat menghubungkan titik-titik tertentu dalam aliran kontrol operasi manipulasi data seperti get, put, dan delete.

Koprosesor titik akhir HBase bekerja seperti prosedur tersimpan. Ketika dimuat itu dapat dipanggil dari pengamat, misalnya, dan dengan demikian memungkinkan menambahkan fitur baru ke HBase secara dinamis. Ada berbagai cara untuk memuat koprosesor ke dalam cluster HBase, termasuk melalui shell HBase.

Mengonfigurasi cluster HBase yang besar bisa jadi sulit. Kluster HBase mencakup node master, proses RegionServer, proses HDFS, dan seluruh kluster Zookeeper yang berjalan berdampingan. Jelas, pemecahan masalah kegagalan bisa menjadi pekerjaan yang kompleks, karena ada banyak bagian bergerak yang harus diperiksa.

HBase adalah database yang berpusat pada pengembang. Panduan referensi online-nya sangat terkait dengan dokumen Java API HBase. Jika Anda ingin memahami peran yang dimainkan oleh entitas HBase tertentu - katakanlah, Filter - bersiaplah untuk diserahkan ke dokumentasi Java API kelas Filter untuk penjelasan lengkap.

Mengingat bahwa akses adalah per baris dan baris diindeks oleh kunci baris, maka desain yang cermat dari struktur kunci baris sangat penting untuk kinerja yang baik. Ironisnya, programmer di masa lalu yang baik dari database ISAM (Indexed Sequential Access Method) mengetahui hal ini dengan baik: Akses database adalah semua tentang komponen - dan urutan komponen tersebut - dalam indeks kunci majemuk.

HBase menggunakan sekumpulan teknologi yang telah teruji pertempuran dari dunia Hadoop, dan itu sangat layak dipertimbangkan saat membangun database terdistribusi yang besar, dapat diskalakan, dan sangat tersedia, terutama untuk aplikasi yang membutuhkan konsistensi yang kuat.

Sekilas tentang Apache HBase 0.94

 
Pro
  • Pembuatan versi bawaan
  • Konsistensi yang kuat di level rekor
  • Menyediakan pemicu dan prosedur tersimpan seperti RDBMS melalui koprosesor
  • Dibangun di atas teknologi Hadoop yang teruji dan benar
  • Komunitas pengembangan aktif
Kontra
  • Tidak memiliki bahasa kueri yang ramah dan mirip SQL
  • Banyak bagian yang bergerak
  • Penyiapan di luar cluster pengembangan node tunggal bisa jadi sulit
Platform Membutuhkan Java SE versi 6; dapat dijalankan di Windows menggunakan Cygwin
Biaya Gratis, open source di bawah Lisensi Apache versi 2.0