Baru-baru ini saya memberikan ceramah di LA Hadoop User Group tentang Apache HBase Do's and Donts. Penonton sangat baik dan memiliki pertanyaan yang sangat terinformasi dan diartikulasikan dengan baik. Jody dari Shopzilla adalah tuan rumah yang luar biasa dan saya sangat berterima kasih padanya karena telah memberikan kesempatan untuk berbicara dengan lebih dari 60 LA Hadoopers. Karena tidak semua orang tinggal di LA atau dapat menghadiri pertemuan tersebut, saya telah merangkum beberapa poin penting di sini. Bagi Anda yang memiliki hari yang sibuk, ini dia tl;dr:
- HBase bagus, tapi bukan pengganti RDBMS atau HDFS
- Konfigurasi yang baik berarti pengoperasian yang baik
- Monitor monitor monitor monitor
Kami di Cloudera adalah penggemar berat HBase. Kami menyukai teknologinya, kami menyukai komunitasnya, dan kami menemukan bahwa ini sangat cocok untuk banyak aplikasi. Keberhasilan penggunaan HBase telah didokumentasikan dengan baik dan sebagai hasilnya, banyak organisasi mempertimbangkan apakah HBase cocok untuk beberapa aplikasi mereka. Dorongan untuk pembicaraan saya dan posting blog tindak lanjut ini adalah untuk mengklarifikasi beberapa aplikasi yang baik untuk HBase, memperingatkan terhadap beberapa aplikasi yang buruk dan menyoroti langkah-langkah penting untuk penerapan HBase yang sukses.
Kapan harus menggunakan HBase
Pertimbangan yang paling penting ketika melihat HBase adalah bahwa, meskipun merupakan solusi yang bagus untuk banyak masalah, itu bukan peluru perak. HBase tidak dioptimalkan untuk aplikasi transaksional klasik atau bahkan analitik relasional. Ini juga bukan pengganti lengkap untuk HDFS saat melakukan MapReduce batch besar. Lihatlah beberapa kasus penggunaan dalam posting ini untuk mengetahui aplikasi mana yang cocok untuk HBase dan jika Anda memiliki pertanyaan, lanjutkan dan posting di daftar. Sudahkah saya menyebutkan bahwa komunitas itu luar biasa?
Dengan peringatan itu – mengapa Anda harus menggunakan HBase? Jika aplikasi Anda memiliki skema variabel di mana setiap baris sedikit berbeda, maka Anda harus melihat HBase. Sebagai contoh, melakukan latihan pemodelan menggunakan skema relasional standar; Ketika Anda tidak dapat menambahkan kolom dengan cukup cepat dan sebagian besar adalah NULL di setiap baris, Anda harus mempertimbangkan HBase. Jika Anda menemukan bahwa data Anda disimpan dalam koleksi, misalnya beberapa data meta, data pesan, atau data biner yang semuanya memiliki nilai yang sama, maka Anda harus mempertimbangkan HBase. Jika Anda memerlukan akses berbasis kunci ke data saat menyimpan atau mengambil, maka Anda harus mempertimbangkan HBase.
Layanan Pendukung
Dengan asumsi Anda yakin bahwa HBase cocok untuk aplikasi Anda, berikut adalah beberapa tips yang perlu Anda pertimbangkan saat menerapkannya. Ada beberapa layanan pendukung yang penting dan yang diperlukan. Jika Anda belum pernah melihat ZooKeeper sebelumnya, sekaranglah saatnya. HBase menggunakan ZooKeeper untuk berbagai layanan koordinasi terdistribusi seperti pemilihan master. Saat HBase berkembang dan tumbuh, ia terus mengandalkan ZooKeeper untuk fungsionalitas tambahan, menjadikannya bagian penting dari sistem. Selain itu, Anda harus memiliki layanan jaringan yang tepat seperti NTP dan DNS. HBase bergantung pada semua node dalam cluster yang memiliki jam yang disinkronkan secara erat dan saling merujuk satu sama lain secara konsisten. Menggunakan NTP dan DNS memastikan bahwa Anda tidak akan mengalami perilaku aneh ketika satu node A berpikir bahwa waktunya adalah besok dan node B menganggapnya kemarin. Anda juga akan mencegah situasi di mana node master memberi tahu node C untuk melayani suatu wilayah tetapi node C tidak mengetahui namanya sendiri dan tidak menjawab. Menggunakan NTP dan DNS akan menghemat banyak masalah saat Anda memulai.
Saya telah mengatakan bahwa pertimbangan terpenting saat memilih HBase adalah memastikan Anda memiliki kasus penggunaan yang sesuai. Hal terpenting yang harus dilakukan saat menggunakan HBase adalah memantau sistem. Pemantauan adalah kunci keberhasilan operasi HBase. Seperti halnya dengan banyak sistem terdistribusi, HBase rentan terhadap kegagalan cascading. Jika satu node mulai bertukar, itu bisa kehilangan kontak dengan master, menyebabkan server lain mengambil beban dan menjadi terlalu terbebani. Server kedua itu akan gagal dan kegagalan akan mengalir. Anda perlu memantau memori, CPU, I/O dan latensi jaringan serta bandwidth pada setiap node HBase Anda untuk memastikan mereka beroperasi dalam parameter yang sehat. Pemantauan adalah praktik paling penting untuk mengoperasikan cluster HBase yang sehat.
Praktik Baik untuk Arsitektur HBase
Maju cepat ke cluster HBase Anda yang terpantau dengan baik yang menjalankan kasus penggunaan yang sempurna, berikut adalah beberapa praktik yang baik. Gunakan awalan kunci yang terdistribusi dengan baik berdasarkan kasus penggunaan Anda. Jika Anda mengawali kunci Anda dengan stempel waktu atau nilai serupa yang, ketika diurutkan, disimpan atau dikueri dalam kumpulan, maka Anda kemungkinan akan membebani setiap server wilayah secara bergantian alih-alih mendistribusikan beban secara merata. Anda juga harus menjaga jumlah wilayah ke jumlah yang wajar berdasarkan ukuran memstore dan jumlah RAM dan JVM RegionServer harus dibatasi hingga 12GB tumpukan java untuk meminimalkan jeda GC yang lama. Misalnya mesin dengan 36GB RAM yang juga menjalankan daemon DataNode dapat menangani sekitar 100 region dengan penulisan aktif dan memstore masing-masing 48MB. Itu memungkinkan ruang kepala yang cukup untuk persyaratan memori DataNode dan RegionServer, ruang buffer file Linux, dan ukuran flush yang wajar untuk setiap RegionServer.
Beberapa rekomendasi konfigurasi termasuk menonaktifkan pemadatan otomatis (secara default ini terjadi setiap 24 jam sejak Anda mulai HBase) dan jadwalkan untuk dijalankan setiap hari pada waktu tidak sibuk. Anda juga harus mengonfigurasi kompresi (seperti LZO) dan secara eksplisit meletakkan direktori conf HBase yang dikonfigurasi dengan benar di CLASSPATH Anda.
Dilarang HBase
Kami telah membahas berbagai praktik baik untuk HBase. Ada juga beberapa pola penggunaan yang harus dihindari. Misalnya, jangan berharap untuk menggunakan HBase sebagai pengganti grosir untuk setiap database relasional Anda. HBase hebat dalam banyak hal tetapi tidak menggantikan database relasional. Sebagai permulaan, itu tidak berbicara SQL, memiliki pengoptimal, mendukung transaksi lintas catatan atau bergabung. Jika Anda tidak menggunakan salah satu dari ini dalam aplikasi database Anda, maka HBase bisa menjadi pilihan yang tepat.
Berhati-hatilah saat menjalankan beban kerja campuran pada klaster HBase. Saat Anda memiliki SLA pada akses HBase yang independen dari tugas MapReduce apa pun (misalnya, transformasi di Pig dan penyajian data dari HBase) jalankan di kluster terpisah. HBase adalah CPU dan Memori intensif dengan akses I/O berurutan besar sporadis sementara pekerjaan MapReduce terutama terikat I/O dengan memori tetap dan CPU sporadis. Gabungan ini dapat menyebabkan latensi yang tidak terduga untuk HBase dan pertikaian CPU di antara keduanya. Cluster bersama juga membutuhkan lebih sedikit slot tugas per node untuk mengakomodasi kebutuhan CPU HBase (umumnya setengah slot pada setiap node yang akan Anda alokasikan tanpa HBase). Perhatikan juga pertukaran memori. Jika HBase mulai bertukar, ada kemungkinan besar ia akan kehilangan detak jantung dan dikeluarkan dari cluster. Pada cluster yang sibuk, hal ini dapat membebani region lain, menyebabkannya bertukar dan serangkaian kegagalan.
Pemikiran Terakhir
Satu nasihat terakhir sebelum kita menyimpulkan. Saat memuat HBase, gunakan HFileOuputFormat jika memuat melalui pekerjaan MapReduce atau kumpulan server menggunakan batched put. Memuat dengan satu klien akan menghambat klien tersebut dan tidak memanfaatkan skalabilitas yang diberikan oleh HBase.
Singkatnya, pertimbangkan HBase saat Anda memuat data dengan kunci, mencari data dengan kunci (atau rentang), menyajikan data dengan kunci, menanyakan data dengan kunci atau saat menyimpan data dengan baris yang tidak sesuai dengan skema.
Kasus Penggunaan
- Apache HBase:Didukung oleh HBase Wiki
- Mozilla:Memindahkan Socorro ke HBase
- Facebook:Sistem Pesan Real-Time Baru Facebook:HBase
- StumbleUpon:HBase di StumbleUpon