Ulasan: HBase secara besar-besaran - dan sangat kompleks

Apache HBase menggambarkan dirinya sebagai "pangkalan data Hadoop," yang sedikit membingungkan, kerana Hadoop biasanya difahami merujuk kepada kerangka pemprosesan MapReduce yang popular. Tetapi Hadoop benar-benar nama payung untuk keseluruhan ekosistem teknologi, beberapa di antaranya digunakan oleh HBase untuk membuat pangkalan data berorientasikan lajur yang diedarkan berdasarkan prinsip yang sama dengan Bigtable Google. HBase tidak menggunakan kemampuan MapReduce Hadoop secara langsung, walaupun HBase dapat berintegrasi dengan Hadoop untuk berfungsi sebagai sumber atau tujuan pekerjaan MapReduce.

Keistimewaan HBase adalah skalabilitas yang melampau, kebolehpercayaan yang tinggi, dan fleksibiliti skema yang anda dapat dari pangkalan data berorientasikan lajur. Walaupun jadual dan keluarga lajur mesti ditentukan terlebih dahulu, anda boleh menambahkan lajur baru dengan cepat. HBase juga menawarkan konsistensi tingkat baris yang kuat, versi terbina dalam, dan "pemprosesan" yang memberikan setara pencetus dan prosedur tersimpan.

[Juga pada: Pertunjukan data besar: Cassandra vs HBase | Pangkalan data yang manakah yang harus saya gunakan? | Bossie Awards 2013: Alat data besar sumber terbuka terbaik | Pertunjukan NoSQL: MongoDB vs Couchbase | Dapatkan intipati kisah utama setiap hari di buletin Harian. ]

Direka untuk menyokong pertanyaan set data besar-besaran, HBase dioptimumkan untuk prestasi membaca. Untuk penulisan, HBase berusaha untuk mengekalkan konsistensi. Berbeza dengan "akhirnya konsisten" Cassandra, HBase tidak menawarkan pelbagai tetapan tahap konsistensi (untuk mengakui penulisan setelah satu node menulisnya atau sekumpulan node telah menulisnya). Oleh itu, harga konsistensi kuat HBase adalah bahawa penulisan boleh menjadi lebih perlahan.

HDFS - Sistem Fail Terdistribusi Hadoop - adalah asas ekosistem Hadoop, dan ia adalah sistem fail di atas tempat HBase berada. Direka untuk dijalankan pada perkakasan komoditi dan bertolak ansur dengan kegagalan nod anggota, HDFS berfungsi paling baik untuk sistem pemprosesan kumpulan yang lebih suka akses streaming ke set data yang besar. Ini nampaknya menjadikannya tidak sesuai untuk akses rawak yang diharapkan dalam sistem pangkalan data seperti HBase. Tetapi HBase mengambil langkah untuk mengimbangi tingkah laku HDFS yang tidak sesuai.

Zookeeper, teknologi Hadoop lain (walaupun tidak lagi digunakan oleh versi mesin Hadoop MapReduce semasa), adalah perkhidmatan komunikasi dan koordinasi yang diedarkan. Zookeeper mengekalkan struktur data dalam memori yang disegerakkan dan dapat diakses oleh beberapa pelanggan. Struktur data disusun seperti sistem fail, walaupun komponen struktur (znodes) dapat menjadi wadah data, dan juga elemen dalam pohon hierarki. Bayangkan sistem fail yang failnya juga boleh menjadi direktori.

HBase menggunakan Zookeeper untuk menyelaraskan aktiviti kluster dan memantau kesihatan nod anggota. Semasa anda menjalankan kluster HBase, anda juga mesti menjalankan Zookeeper secara selari. HBase akan menjalankan dan mengurus Zookeeper secara lalai, walaupun anda dapat mengkonfigurasi HBase untuk menggunakan persediaan Zookeeper yang diuruskan secara berasingan. Anda bahkan boleh menjalankan proses pelayan Zookeeper pada perkakasan yang sama dengan proses HBase yang lain, tetapi itu tidak digalakkan, terutama untuk kluster HBase bervolume tinggi.

Bagaimana HBase berfungsi

Lebih tepatnya, baris adalah kumpulan pasangan kunci / nilai, kuncinya adalah pengecam lajur dan nilainya adalah kandungan sel yang ada di persimpangan baris dan lajur tertentu. Namun, kerana HBase adalah pangkalan data berorientasikan lajur, tidak ada dua baris dalam jadual yang perlu mempunyai lajur yang sama. Untuk merumitkan masalah lebih lanjut, data diformat dalam HBase. Koordinat sebenar nilai (sel) adalah tuple {row key, column key, timestamp}. Di samping itu, lajur dapat dikelompokkan ke dalam keluarga lajur, yang memberikan perancang pangkalan data kawalan lebih lanjut terhadap ciri akses, kerana semua lajur dalam keluarga lajur akan disimpan berdekatan satu sama lain.

Operasi tulis di HBase pertama-tama merekodkan data ke log komit ("log hadapan"), kemudian ke struktur memori dalaman yang disebut MemStore. Apabila MemStore mengisi, ia dibuang ke disk sebagai entiti yang disebut HFile. HFiles disimpan sebagai urutan blok data, dengan indeks ditambahkan ke akhir fail. Indeks lain, yang disimpan dalam memori, mempercepat pencarian data di HFiles.

HFiles tidak berubah setelah ditulis. Sekiranya kunci dihapuskan, HBase mencatatkan penanda "batu nisan" khas untuk memperingati penghapusan. Batu nisan dikeluarkan (seperti data yang dipadam) apabila HFiles dipadatkan secara berkala.

HBase berusaha memuaskan operasi baca terlebih dahulu melalui MemStore. Jika tidak, HBase memeriksa struktur memori lain, BlockStore, yang merupakan cache baca yang dirancang untuk menyampaikan data yang sering dibaca dari memori, dan bukan dari HFiles berasaskan cakera.

HBase memisahkan baris mengikut kawasan, yang ditentukan oleh pelbagai kekunci baris. Setiap wilayah dalam kluster HBase dikendalikan oleh proses RegionServer. Biasanya, terdapat satu proses RegionServer setiap nod HBase. Apabila jumlah data bertambah, HBase memisahkan kawasan dan memindahkan data yang berkaitan ke nod yang berlainan dalam kluster untuk tujuan pengimbangan.

Senibina kelompok HBase tidak sepenuhnya simetri. Sebagai contoh, setiap kluster mesti mempunyai satu nod utama aktif. Pelbagai nod boleh (dan seharusnya) ditetapkan sebagai nod utama, tetapi apabila kluster boot, calon tuan berkoordinasi sehingga hanya satu yang bertindak sebagai master bertindak. Tanggungjawab tuan untuk memantau pelayan wilayah, menangani failover pelayan wilayah, dan menyelaraskan pemisahan wilayah.

Sekiranya node master terhempas, kluster masih dapat beroperasi dalam mod keadaan tetap - menguruskan permintaan baca dan tulis - tetapi tidak dapat melaksanakan operasi yang memerlukan koordinasi master (seperti menyeimbangkan kembali). Inilah sebabnya mengapa idea yang baik untuk menentukan beberapa nod utama; jika dan ketika tuan yang berkuasa gagal, ia akan diganti dengan cepat.

Anda boleh menjalankan HBase di atas sistem fail asli untuk tujuan pembangunan, tetapi kluster HBase yang digunakan berjalan pada HDFS, yang - seperti yang disebutkan sebelumnya - sepertinya taman permainan HBase yang buruk. Walaupun sistem fail asas berorientasikan streaming, HBase mencapai I / O rawak cepat. Ia mencapai keajaiban ini dengan kombinasi penulisan kumpulan dalam memori dan data berterusan ke cakera menggunakan pohon gabungan berstruktur log. Akibatnya, semua penulisan rawak dilakukan dalam memori, dan ketika data dialirkan ke disk, data disusun terlebih dahulu, kemudian ditulis secara berurutan dengan indeks yang menyertainya. Pembacaan rawak pertama kali dicoba dalam memori, seperti yang disebutkan di atas. Sekiranya data yang diminta tidak ada dalam memori, carian cakera berikutnya cepat kerana data disusun dan diindeks.

Bekerja dengan HBase

Walaupun HBase tidak menyokong urus niaga, namun akhirnya tidak konsisten; sebaliknya, HBase menyokong konsistensi yang kuat, sekurang-kurangnya pada tahap satu baris. HBase tidak mempunyai rasa jenis data; semuanya disimpan sebagai susunan bait. Walau bagaimanapun, HBase menentukan jenis data "penghitung" khas, yang menyediakan operasi kenaikan atom - berguna untuk mengira paparan halaman Web, misalnya. Anda boleh menambah sebilangan kaunter dalam satu baris melalui satu panggilan, dan tanpa perlu mengunci baris. Perhatikan bahawa pembilang akan disegerakkan untuk operasi tulis (berbilang penulisan akan selalu melakukan kenaikan yang konsisten) tetapi tidak semestinya untuk operasi baca.

Shell HBase sebenarnya adalah shell Ruby interaktif yang dimodifikasi yang berjalan di JRuby, dengan Ruby dijalankan di Java VM. Apa sahaja yang boleh anda lakukan di shell Ruby interaktif yang boleh anda lakukan di shell HBase, yang bermaksud shell HBase boleh menjadi persekitaran skrip yang kuat.

Versi terbaru shell menyediakan semacam antara muka berorientasikan objek untuk memanipulasi jadual HBase. Anda boleh, sebagai contoh, menetapkan jadual ke pemboleh ubah JRuby, kemudian mengeluarkan kaedah pada objek meja menggunakan notasi titik standard. Sebagai contoh, jika anda telah menentukan jadual dan memberikannya kepada myTablepemboleh ubah, anda boleh menulis (meletakkan) data ke jadual dengan sesuatu seperti:

            myTable.put '', '', ''

Ini akan menuliskan nilai ke baris pada lajur .

Terdapat beberapa GUI pengurusan pihak ketiga untuk HBase, seperti hbase-explorer. HBase sendiri merangkumi beberapa alat pemantauan berasaskan Web terbina dalam. Nod induk HBase menyajikan antara muka Web pada port 60010. Semak imbasnya, dan anda akan mendapat maklumat mengenai nod induk itu sendiri termasuk waktu mula, port Zookeeper semasa, senarai pelayan wilayah, jumlah rata-rata wilayah per pelayan wilayah , dan sebagainya. Senarai jadual juga disediakan. Klik pada jadual dan anda ditunjukkan maklumat seperti pelayan rantau yang menginangi komponen jadual. Halaman ini juga menyediakan kawalan untuk memulakan pemadatan di atas meja atau membelah wilayah meja.

Di samping itu, setiap nod pelayan rantau menjalankan antara muka Web pemantauan di port 60030. Di sini anda akan dapati banyak metrik: latensi membaca dan menulis, misalnya, dipecah menjadi pelbagai persentil. Anda juga dapat melihat maklumat mengenai wilayah yang dikendalikan oleh pelayan wilayah ini, dan anda dapat menghasilkan lambaian utas aktif di pelayan.

Panduan rujukan HBase merangkumi panduan Bermula dan Soalan Lazim. Ini adalah dokumen langsung, jadi anda akan dapati komen komuniti pengguna dilampirkan pada setiap entri. Laman web HBase juga menyediakan pautan ke HBase Java API, serta video dan sumber maklumat HBase di luar laman web. Lebih banyak maklumat boleh didapati di wiki HBase. Walaupun baik, dokumentasi HBase tidak setanding dengan dokumentasi yang pernah saya lihat di laman web produk pangkalan data lain, seperti Cassandra dan MongoDB. Walaupun begitu, terdapat banyak bahan di Internet, dan komuniti HBase cukup besar dan cukup aktif sehingga sebarang pertanyaan HBase tidak akan dijawab lama.

Salah satu penambahan terbaru HBase yang lebih menarik ialah sokongan untuk "coprocessors" - kod pengguna yang dilaksanakan sebagai sebahagian daripada proses HBase RegionServer dan Master. Terdapat kira-kira dua jenis coprocessor: pemerhati dan titik akhir. Pemerhati adalah kelas Java yang ditulis pengguna yang menentukan kaedah yang akan digunakan semasa peristiwa HBase tertentu berlaku. Fikirkan pemerhati sebagai rakan sejawat HBase untuk pencetus RDBMS. Seorang pemerhati, dipanggil RegionObserver, boleh menyambung titik-titik tertentu dalam aliran kawalan operasi manipulasi data seperti get, put, dan delete.

Pemprosesan titik akhir HBase berfungsi seperti prosedur yang disimpan. Apabila dimuat, ia boleh dipanggil dari pemerhati, misalnya, dan dengan itu membenarkan penambahan ciri baru ke HBase secara dinamik. Terdapat pelbagai cara untuk memuatkan coprocessor ke dalam cluster HBase, termasuk melalui shell HBase.

Mengkonfigurasi kluster HBase besar boleh menjadi sukar. Kluster HBase merangkumi nod utama, proses RegionServer, proses HDFS, dan keseluruhan kluster Zookeeper berjalan berdampingan. Jelas, menyelesaikan masalah kegagalan boleh menjadi usaha yang kompleks, kerana terdapat banyak bahagian bergerak yang harus diperiksa.

HBase adalah pangkalan data yang berpusat pada pemaju. Panduan rujukan dalam taliannya banyak dikaitkan dengan dokumen Java API HBase. Sekiranya anda ingin memahami peranan yang dimainkan oleh entiti HBase tertentu - katakanlah, Filter - bersiaplah untuk diserahkan kepada dokumentasi Java API dari kelas Filter untuk penjelasan penuh.

Memandangkan akses adalah mengikut baris dan baris diindeks oleh kekunci baris, maka reka bentuk struktur kekunci baris dengan berhati-hati sangat penting untuk prestasi yang baik. Ironinya, pengaturcara di pangkalan data ISAM (Indexed Sequential Access Method) sudah tahu ini: Akses pangkalan data adalah mengenai komponen - dan susunan komponen tersebut - dalam indeks kompaun-kunci.

HBase menggunakan sekumpulan teknologi yang diuji pertempuran dari dunia Hadoop, dan perlu dipertimbangkan ketika membuat pangkalan data yang besar, terukur, sangat tersedia, diedarkan, terutama untuk aplikasi di mana konsistensi yang kuat penting.

Sekilas Apache HBase 0.94

 
Kelebihan
  • Versi terbina dalam
  • Konsistensi yang kuat pada tahap rekod
  • Menyediakan pencetus seperti RDBMS dan prosedur tersimpan melalui pemprosesan bersama
  • Dibina berdasarkan teknologi Hadoop yang dicuba dan benar
  • Komuniti pembangunan aktif
Keburukan
  • Tidak mempunyai bahasa pertanyaan yang mesra SQL
  • Banyak bahagian yang bergerak
  • Penyediaan di luar kluster pengembangan node tunggal boleh menjadi sukar
Pelantar Memerlukan Java SE versi 6; boleh dijalankan di Windows menggunakan Cygwin
Kos Sumber terbuka percuma di bawah Apache License versi 2.0