Apache ZooKeeper adalah sistem klien/server untuk koordinasi terdistribusi yang memperlihatkan antarmuka yang mirip dengan sistem file, di mana setiap node (disebut znode ) dapat berisi data dan kumpulan turunan. Setiap znode memiliki nama dan dapat diidentifikasi menggunakan jalur mirip sistem file (misalnya, /root-znode/sub-znode/my-znode).
Di Apache HBase, ZooKeeper mengoordinasikan, berkomunikasi, dan berbagi status antara Master dan RegionServers. HBase memiliki kebijakan desain menggunakan ZooKeeper hanya untuk data sementara (yaitu, untuk koordinasi dan komunikasi negara). Jadi, jika data ZooKeeper HBase dihapus, hanya operasi sementara yang terpengaruh — data dapat terus ditulis dan dibaca ke/dari HBase.
Dalam posting blog ini, Anda akan mendapatkan tur singkat penggunaan znodes HBase. Versi HBase yang digunakan untuk referensi di sini adalah 0,94 (dikirim di dalam CDH 4.2 dan CDH 4.3), tetapi sebagian besar znode ada di versi sebelumnya dan kemungkinan juga demikian di versi mendatang.
Jalur znode root HBase dapat dikonfigurasi menggunakan hbase-site.xml, dan secara default lokasinya adalah "/ hbase". Semua znode yang dirujuk di bawah ini akan diawali dengan menggunakan lokasi default /hbase, dan properti konfigurasi yang memungkinkan Anda mengganti nama znode tertentu akan dicantumkan di sebelah nama znode default dan disorot dengan huruf tebal.
ZooKeeper menyediakan shell interaktif yang memungkinkan Anda menjelajahi status ZooKeeper — jalankan dengan menggunakan hbase zkcli
dan berjalan melalui znode melalui ls
, seperti dalam sistem file biasa. Anda juga bisa mendapatkan beberapa informasi tentang konten znode dengan menggunakan get
perintah.
$ hbase zkcli [zk: localhost:2181(CONNECTED) 0] ls / [hbase, zookeeper] [zk: localhost:2181(CONNECTED) 1] ls /hbase [splitlog, online-snapshot, unassigned, root-region-server, rs, backup-masters, draining, table, master, shutdown, hbaseid] [zk: localhost:2181(CONNECTED) 2] get /hbase/root-region-server 3008@u1310localhost,60020,1382107614265 dataLength = 44 numChildren = 0 ...
Operasi
Znode yang paling sering Anda lihat adalah yang mengoordinasikan operasi seperti Penetapan Wilayah, Pemisahan Log, dan Master Failover, atau melacak status cluster seperti lokasi tabel ROOT, daftar Server Wilayah online, dan daftar Wilayah yang belum ditetapkan .
/hbase (zookeeper.znode.parent) | Znode root yang akan berisi semua znode yang dibuat/digunakan oleh HBase |
/hbase/hbaseid (zookeeper.znode.clusterId) | Diinisialisasi oleh Master dengan UUID yang mengidentifikasi cluster. ID juga disimpan di HDFS di hdfs:/ |
/hbase/root-region-server (zookeeper.znode.rootserver) | Berisi lokasi server yang menghosting wilayah ROOT. Itu ditanyakan oleh klien untuk mengidentifikasi RegionServer yang bertanggung jawab atas ROOT dan menanyakan lokasi META. (Pada 0.96, tabel ROOT telah dihapus sebagai bagian dari HBASE-3171, dan znode ini digantikan oleh /hbase/meta-region-server [zookeeper.znode.metaserver] yang berisi lokasi server yang menghosting META.) |
/hbase/rs (zookeeper.znode.rs) | Saat startup, setiap RegionServer akan membuat sub-znode (mis. /hbase/rs/m1.host) yang seharusnya menggambarkan status "online" dari RegionServer. Master memonitor znode ini untuk mendapatkan daftar RegionServer “online” dan menggunakannya selama Assignment/Balancing. |
/hbase/tidak ditetapkan (zookeeper.znode.unassigned) | Berisi sub-znode untuk setiap wilayah yang belum ditetapkan (mis. /hbase/unassigned/ |
/hbase/master (zookeeper.znode.master) | Master "aktif" akan mendaftarkan alamatnya sendiri di znode ini saat startup, menjadikan znode ini sebagai sumber kebenaran untuk mengidentifikasi server mana yang merupakan Master. |
/hbase/backup-masters (zookeeper.znode.backup.masters) | Setiap Master yang tidak aktif akan mendaftarkan dirinya sebagai Master cadangan dengan membuat sub-znode (hbase/backup-master/m1.host). Znode ini terutama digunakan untuk melacak mesin mana yang tersedia untuk menggantikan Master jika terjadi kegagalan. |
/hbase/shutdown (zookeeper.znode.state) | Menjelaskan status cluster, "Apakah cluster sudah aktif?" Itu dibuat oleh Master saat startup dan dihapus oleh Master saat shutdown. Itu ditonton oleh RegionServers. |
/hbase/menguras (zookeeper.znode.draining.rs) | Digunakan untuk menonaktifkan lebih dari satu RegionServer sekaligus dengan membuat sub-znodes dengan bentuk serverName,port,startCode (misalnya, /hbase/draining/m1.host,60020,1338936306752). Ini memungkinkan Anda menonaktifkan beberapa RegionServer tanpa risiko region dipindahkan sementara ke RegionServer yang akan dinonaktifkan nanti. Baca ini untuk mempelajari lebih lanjut tentang /hbase/draining. |
/hbase/tabel (zookeeper.znode.masterTableEnableDisable) | Digunakan oleh master untuk melacak status tabel selama penugasan (status penonaktifan/pengaktifan, misalnya). |
/hbase/splitlog (zookeeper.znode.splitlog) | Digunakan oleh pembagi log untuk melacak log yang tertunda untuk diputar ulang dan penugasannya. (Baca ini untuk mempelajari lebih lanjut tentang pemisahan log). |
Keamanan
Access Control List (ACL) dan koprosesor Penyedia Token menambahkan dua znode lagi:satu untuk menyinkronkan akses ke ACL tabel dan yang lainnya untuk menyinkronkan kunci enkripsi token di seluruh node cluster.
/hbase/acl (zookeeper.znode.acl.parent) | Acl znode digunakan untuk menyinkronkan perubahan yang dibuat ke tabel _acl_ dengan perintah grant/revoke. Setiap tabel akan memiliki sub-znode (/hbase/acl/tableName) yang berisi ACL tabel. (Baca ini untuk informasi lebih lanjut tentang pengontrol akses dan interaksi ZooKeeper.) |
/hbase/tokenauth (zookeeper.znode.tokenauth.parent) | Penyedia token biasanya digunakan untuk mengizinkan pekerjaan MapReduce mengakses cluster HBase. Saat pengguna meminta token baru, informasi akan disimpan di sub-znode yang dibuat untuk kunci (/hbase/tokenauth/keys/key-id). |
Replikasi
Sebagai aturan umum, semua znode bersifat sementara, yang berarti mereka menggambarkan status "sementara" — jadi, bahkan jika Anda menghapus semuanya dari ZooKeeper, HBase harus dapat membuatnya kembali. Meskipun znodes Replikasi tidak menggambarkan keadaan sementara, mereka dimaksudkan untuk menjadi sumber kebenaran untuk keadaan replikasi, menggambarkan keadaan replikasi dari setiap mesin. (Baca ini untuk mempelajari lebih lanjut tentang replikasi).
/hbase/replikasi (zookeeper.znode.replication) | Root znode yang berisi semua informasi status replikasi HBase |
/hbase/replikasi/peer (zookeeper.znode.replication.peers) | Setiap peer akan memiliki sub-znode (mis. /hbase/replication/peers/ |
/hbase/replication/peers/ | Mirror dari /hbase/replication/peers znode, tetapi di sini setiap sub-znode (/hbase/replication/peer-state/ |
/hbase/replication/state (zookeeper.znode.replication.state) | Menunjukkan apakah replikasi diaktifkan. Replikasi dapat diaktifkan dengan menyetel konfigurasi hbase.replication ke true, atau dapat diaktifkan/dinonaktifkan dengan menggunakan perintah start/stop di shell HBase. (Pada 0.96, znode ini telah dihapus dan znode peer-state di atas digunakan sebagai referensi.) |
/hbase/replication/rs (zookeeper.znode.replication.rs) | Berisi daftar RegionServers di cluster utama (/hbase/replication/rs/ |
Prosedur Snapshot Online
Snapshot online dikoordinasikan oleh Master menggunakan ZooKeeper untuk berkomunikasi dengan RegionServers menggunakan transaksi seperti komitmen dua fase. (Baca ini untuk detail selengkapnya tentang snapshot.)
/hbase/online-snapshot/acquired | Znode yang diperoleh menjelaskan langkah pertama dari transaksi snapshot. Master akan membuat sub-znode untuk snapshot (/hbase/online-snapshot/acquired/ |
/hbase/online-snapshot/reached | Setelah setiap RegionServer bergabung dengan znode yang diperoleh, Master akan membuat znode yang dicapai untuk snapshot (/hbase/online-snapshot/reached/ |
/hbase/online-snapshot/abort | Jika ada yang gagal di sisi Master atau RegionServer, abort znode akan dibuat untuk snapshot yang memberi tahu semua orang bahwa ada yang tidak beres dengan snapshot dan untuk membatalkan pekerjaan. |
Kesimpulan
Seperti yang Anda lihat, ZooKeeper adalah bagian mendasar dari HBase. Semua operasi yang memerlukan koordinasi, seperti penetapan Region, Master-Failover, replikasi, dan snapshot, dibangun di ZooKeeper. (Anda dapat mempelajari lebih lanjut tentang mengapa/bagaimana Anda akan menggunakan ZooKeeper dalam aplikasi Anda di sini.)
Meskipun sebagian besar znode hanya berguna untuk HBase, beberapa — seperti daftar RegionServers (/hbase/rs) atau daftar Wilayah yang Tidak Ditugaskan (/hbase/unassigned) — dapat digunakan untuk keperluan debugging atau pemantauan. Atau, seperti dalam kasus /hbase/draining, Anda dapat berinteraksi dengan mereka untuk memberi tahu HBase apa yang Anda lakukan dengan cluster.
Matteo Bertozzi adalah Software Engineer di Cloudera dan Committer pada proyek HBase.