Zookeeper - Panduan Cepat
ZooKeeper adalah layanan koordinasi terdistribusi untuk mengelola sejumlah besar host. Mengoordinasikan dan mengelola layanan dalam lingkungan terdistribusi adalah proses yang rumit. ZooKeeper memecahkan masalah ini dengan arsitektur dan API sederhana. ZooKeeper memungkinkan pengembang untuk fokus pada logika aplikasi inti tanpa mengkhawatirkan sifat aplikasi yang terdistribusi.
Kerangka ZooKeeper awalnya dibuat di "Yahoo!" untuk mengakses aplikasi mereka dengan cara yang mudah dan kuat. Kemudian, Apache ZooKeeper menjadi standar untuk layanan terorganisir yang digunakan oleh Hadoop, HBase, dan kerangka kerja terdistribusi lainnya. Misalnya, Apache HBase menggunakan Zookeeper untuk melacak status data terdistribusi.
Sebelum melangkah lebih jauh, penting bagi kita untuk mengetahui satu atau dua hal tentang aplikasi terdistribusi. Jadi, mari kita mulai diskusi dengan gambaran umum singkat tentang aplikasi terdistribusi.
Aplikasi Terdistribusi
Aplikasi terdistribusi dapat berjalan di beberapa sistem dalam jaringan pada waktu tertentu (secara bersamaan) dengan berkoordinasi di antara mereka sendiri untuk menyelesaikan tugas tertentu secara cepat dan efisien. Biasanya, tugas yang kompleks dan memakan waktu, yang akan memakan waktu berjam-jam untuk diselesaikan oleh aplikasi yang tidak terdistribusi (berjalan dalam satu sistem) dapat diselesaikan dalam hitungan menit oleh aplikasi terdistribusi dengan menggunakan kapabilitas komputasi dari semua sistem yang terlibat.
Waktu untuk menyelesaikan tugas selanjutnya dapat dikurangi dengan mengonfigurasi aplikasi terdistribusi agar berjalan di lebih banyak sistem. Sekelompok sistem di mana aplikasi terdistribusi sedang berjalan disebut aCluster dan setiap mesin yang berjalan dalam sebuah cluster disebut a Node.
Aplikasi terdistribusi memiliki dua bagian, Server dan Clientaplikasi. Aplikasi server sebenarnya didistribusikan dan memiliki antarmuka yang sama sehingga klien dapat terhubung ke server mana pun di cluster dan mendapatkan hasil yang sama. Aplikasi klien adalah alat untuk berinteraksi dengan aplikasi terdistribusi.
Manfaat Aplikasi Terdistribusi
Reliability - Kegagalan satu atau beberapa sistem tidak membuat keseluruhan sistem gagal.
Scalability - Kinerja dapat ditingkatkan sesuai kebutuhan dengan menambahkan lebih banyak mesin dengan sedikit perubahan pada konfigurasi aplikasi tanpa waktu henti.
Transparency - Menyembunyikan kompleksitas sistem dan menampilkan dirinya sebagai satu kesatuan / aplikasi.
Tantangan Aplikasi Terdistribusi
Race condition- Dua atau lebih mesin mencoba melakukan tugas tertentu, yang sebenarnya hanya perlu dilakukan oleh satu mesin pada waktu tertentu. Misalnya, sumber daya bersama hanya boleh dimodifikasi oleh satu mesin pada waktu tertentu.
Deadlock - Dua atau lebih operasi menunggu satu sama lain selesai tanpa batas.
Inconsistency - Kegagalan sebagian data.
Untuk apa Apache ZooKeeper Meant?
Apache ZooKeeper adalah layanan yang digunakan oleh sebuah cluster (sekelompok node) untuk berkoordinasi di antara mereka sendiri dan memelihara data bersama dengan teknik sinkronisasi yang kuat. Zookeeper sendiri adalah aplikasi terdistribusi yang menyediakan layanan untuk menulis aplikasi terdistribusi.
Layanan umum yang disediakan oleh ZooKeeper adalah sebagai berikut -
Naming service- Mengidentifikasi node dalam cluster dengan nama. Ini mirip dengan DNS, tetapi untuk node.
Configuration management - Informasi konfigurasi sistem terbaru dan terbaru untuk node yang bergabung.
Cluster management - Bergabung / keluar dari sebuah node dalam cluster dan status node secara real time.
Leader election - Memilih node sebagai pemimpin untuk tujuan koordinasi.
Locking and synchronization service- Mengunci data saat memodifikasinya. Mekanisme ini membantu Anda dalam pemulihan kegagalan otomatis saat menghubungkan aplikasi terdistribusi lainnya seperti Apache HBase.
Highly reliable data registry - Ketersediaan data bahkan ketika satu atau beberapa node sedang down.
Aplikasi terdistribusi menawarkan banyak manfaat, tetapi mereka juga memberikan beberapa tantangan yang kompleks dan sulit untuk dipecahkan. Kerangka Zookeeper menyediakan mekanisme lengkap untuk mengatasi semua tantangan. Kondisi balapan dan kebuntuan ditangani dengan menggunakanfail-safe synchronization approach. Kelemahan utama lainnya adalah ketidakkonsistenan data, yang diatasi oleh ZooKeeperatomicity.
Manfaat ZooKeeper
Berikut adalah manfaat menggunakan Zookeeper -
Simple distributed coordination process
Synchronization- Pengecualian dan kerjasama antar proses server. Proses ini membantu di Apache HBase untuk manajemen konfigurasi.
Ordered Messages
Serialization- Menyandikan data sesuai dengan aturan khusus. Pastikan aplikasi Anda berjalan secara konsisten. Pendekatan ini dapat digunakan di MapReduce untuk mengoordinasikan antrian untuk mengeksekusi thread yang sedang berjalan.
Reliability
Atomicity - Transfer data berhasil atau gagal sepenuhnya, tetapi tidak ada transaksi yang parsial.
Sebelum mempelajari lebih dalam tentang kerja ZooKeeper, mari kita lihat konsep dasar ZooKeeper. Kami akan membahas topik berikut dalam bab ini -
- Architecture
- Namespace hierarki
- Session
- Watches
Arsitektur ZooKeeper
Perhatikan diagram berikut. Ini menggambarkan "Arsitektur Client-Server" dari ZooKeeper.
Masing-masing komponen yang merupakan bagian dari arsitektur ZooKeeper telah dijelaskan dalam tabel berikut.
Bagian | Deskripsi |
---|---|
Klien | Klien, salah satu node dalam cluster aplikasi terdistribusi kami, mengakses informasi dari server. Untuk interval waktu tertentu, setiap klien mengirim pesan ke server untuk memberi tahu server bahwa klien masih hidup. Demikian pula, server mengirimkan pengakuan ketika klien terhubung. Jika tidak ada respons dari server yang terhubung, klien secara otomatis mengalihkan pesan ke server lain. |
Server | Server, salah satu node dalam ansambel ZooKeeper kami, menyediakan semua layanan kepada klien. Memberikan pengakuan kepada klien untuk menginformasikan bahwa server masih hidup. |
Ansambel | Grup server ZooKeeper. Jumlah minimum node yang dibutuhkan untuk membentuk ansambel adalah 3. |
Pemimpin | Node server yang melakukan pemulihan otomatis jika salah satu node yang terhubung gagal. Pemimpin dipilih saat memulai layanan. |
Pengikut | Node server yang mengikuti instruksi pemimpin. |
Namespace Hierarki
Diagram berikut menggambarkan struktur pohon sistem file Zookeeper yang digunakan untuk representasi memori. Node ZooKeeper disebut sebagaiznode. Setiap znode diidentifikasi dengan sebuah nama dan dipisahkan oleh urutan jalur (/).
Dalam diagram, pertama Anda memiliki root znodedipisahkan oleh "/". Di bawah root, Anda memiliki dua ruang nama logisconfig dan workers.
Itu config namespace digunakan untuk manajemen konfigurasi terpusat dan workers namespace digunakan untuk penamaan.
Dibawah confignamespace, setiap znode dapat menyimpan hingga 1MB data. Ini mirip dengan sistem file UNIX kecuali bahwa znode induk dapat menyimpan data juga. Tujuan utama dari struktur ini adalah untuk menyimpan data yang disinkronkan dan mendeskripsikan metadata dari znode. Struktur ini disebut sebagaiZooKeeper Data Model.
Setiap znode dalam model data Zookeeper memelihara a statstruktur. Stat hanya menyediakanmetadatadari sebuah znode. Ini terdiri dari nomor Versi, Daftar kontrol tindakan (ACL), Stempel waktu, dan Panjang data.
Version number- Setiap znode memiliki nomor versi, yang berarti setiap kali data yang terkait dengan znode berubah, nomor versinya juga akan bertambah. Penggunaan nomor versi penting ketika beberapa klien penjaga kebun binatang mencoba melakukan operasi pada znode yang sama.
Action Control List (ACL)- ACL pada dasarnya adalah mekanisme otentikasi untuk mengakses znode. Ini mengatur semua operasi baca dan tulis znode.
Timestamp- Stempel waktu menunjukkan waktu yang telah berlalu dari pembuatan dan modifikasi znode. Biasanya ditampilkan dalam milidetik. ZooKeeper mengidentifikasi setiap perubahan pada znodes dari "Transaction ID" (zxid).Zxid bersifat unik dan mempertahankan waktu untuk setiap transaksi sehingga Anda dapat dengan mudah mengidentifikasi waktu yang telah berlalu dari satu permintaan ke permintaan lainnya.
Data length- Jumlah total data yang disimpan dalam znode adalah panjang data. Anda dapat menyimpan data maksimal 1MB.
Jenis Znode
Znode dikategorikan sebagai persistence, sequential, dan ephemeral.
Persistence znode- Persistence znode tetap hidup bahkan setelah klien, yang membuat znode tertentu, diputus. Secara default, semua znode tetap ada kecuali ditentukan lain.
Ephemeral znode- Znode singkat aktif sampai klien hidup. Saat klien terputus dari ansambel Zookeeper, maka znode singkat dihapus secara otomatis. Karena alasan ini, hanya znode sementara yang tidak diizinkan untuk memiliki anak lebih lanjut. Jika sebuah znode ephemeral dihapus, maka node berikutnya yang sesuai akan mengisi posisinya. Znode singkat memainkan peran penting dalam pemilihan Pemimpin.
Sequential znode- Znode berurutan dapat berupa persistent atau ephemeral. Ketika znode baru dibuat sebagai znode berurutan, maka ZooKeeper mengatur jalur znode dengan melampirkan 10 digit nomor urut ke nama aslinya. Misalnya, jika znode dengan jalur/myapp dibuat sebagai znode berurutan, ZooKeeper akan mengubah jalur ke /myapp0000000001dan atur nomor urut berikutnya sebagai 0000000002. Jika dua znode berurutan dibuat secara bersamaan, maka Znode tidak pernah menggunakan nomor yang sama untuk setiap znode. Znode berurutan memainkan peran penting dalam Penguncian dan Sinkronisasi.
Sesi
Sesi sangat penting untuk pengoperasian ZooKeeper. Permintaan dalam satu sesi dieksekusi dalam urutan FIFO. Setelah klien terhubung ke server, sesi akan dibuat dan asession id ditugaskan ke klien.
Klien mengirim heartbeatspada interval waktu tertentu agar sesi tetap valid. Jika ansambel ZooKeeper tidak menerima detak jantung dari klien selama lebih dari periode (batas waktu sesi) yang ditentukan di awal layanan, itu memutuskan bahwa klien meninggal.
Waktu tunggu sesi biasanya ditampilkan dalam milidetik. Ketika sesi berakhir karena alasan apa pun, znode singkat yang dibuat selama sesi itu juga akan dihapus.
Jam tangan
Jam tangan adalah mekanisme sederhana bagi klien untuk mendapatkan pemberitahuan tentang perubahan dalam ansambel ZooKeeper. Klien dapat mengatur jam tangan sambil membaca znode tertentu. Jam tangan mengirim pemberitahuan ke klien terdaftar untuk setiap znode (di mana klien mendaftar) perubahan.
Perubahan Znode adalah modifikasi data yang terkait dengan znode atau perubahan pada turunan znode. Jam tangan hanya dipicu sekali. Jika klien menginginkan pemberitahuan lagi, itu harus dilakukan melalui operasi baca lainnya. Ketika sesi koneksi kedaluwarsa, klien akan diputus dari server dan jam tangan terkait juga dihapus.
Setelah ansambel ZooKeeper dimulai, itu akan menunggu klien untuk terhubung. Klien akan terhubung ke salah satu node di ansambel ZooKeeper. Ini mungkin node pemimpin atau pengikut. Setelah klien terhubung, node memberikan ID sesi ke klien tertentu dan mengirimkan pengakuan ke klien. Jika klien tidak mendapatkan pengakuan, itu hanya mencoba untuk menghubungkan node lain di ansambel ZooKeeper. Setelah terhubung ke node, klien akan mengirimkan detak jantung ke node dalam interval reguler untuk memastikan bahwa koneksi tidak terputus.
If a client wants to read a particular znode, itu mengirimkan read requestke node dengan jalur znode dan node mengembalikan znode yang diminta dengan mendapatkannya dari database-nya sendiri. Untuk alasan ini, pembacaan cepat dalam ansambel ZooKeeper.
If a client wants to store data in the ZooKeeper ensemble, ia mengirimkan jalur znode dan data ke server. Server yang terhubung akan meneruskan permintaan ke pemimpin dan kemudian pemimpin akan menerbitkan ulang permintaan tertulis ke semua pengikut. Jika hanya sebagian besar node yang berhasil merespons, permintaan tulis akan berhasil dan kode pengembalian yang berhasil akan dikirim ke klien. Jika tidak, permintaan tulis akan gagal. Mayoritas node yang ketat disebut sebagaiQuorum.
Node dalam ZooKeeper Ensemble
Mari kita menganalisis pengaruh memiliki jumlah node yang berbeda dalam ansambel ZooKeeper.
Jika kita punya a single node, maka ansambel ZooKeeper gagal saat node tersebut gagal. Ini berkontribusi pada "Titik Kegagalan Tunggal" dan tidak direkomendasikan dalam lingkungan produksi.
Jika kita punya two nodes dan satu node gagal, kami juga tidak memiliki mayoritas, karena satu dari dua bukanlah mayoritas.
Jika kita punya three nodesdan satu node gagal, kami memiliki mayoritas dan karenanya, itu adalah persyaratan minimum. Grup ZooKeeper wajib memiliki setidaknya tiga node dalam lingkungan produksi langsung.
Jika kita punya four nodesdan dua node gagal, gagal lagi dan mirip dengan memiliki tiga node. Node tambahan tidak memiliki tujuan apa pun dan oleh karena itu, lebih baik menambahkan node dalam jumlah ganjil, misalnya 3, 5, 7.
Kita tahu bahwa proses menulis lebih mahal daripada proses membaca dalam ansambel ZooKeeper, karena semua node perlu menulis data yang sama dalam database-nya. Jadi, lebih baik memiliki jumlah node yang lebih sedikit (3, 5 atau 7) daripada memiliki node dalam jumlah besar untuk lingkungan yang seimbang.
Diagram berikut menggambarkan ZooKeeper WorkFlow dan tabel berikutnya menjelaskan berbagai komponennya.
Komponen | Deskripsi |
---|---|
Menulis | Proses menulis ditangani oleh node pemimpin. Leader meneruskan permintaan tulis ke semua znode dan menunggu jawaban dari znodes. Jika separuh dari znode menjawab, maka proses penulisan selesai. |
Baca | Pembacaan dilakukan secara internal oleh znode terhubung tertentu, jadi tidak perlu berinteraksi dengan cluster. |
Database yang Direplikasi | Ini digunakan untuk menyimpan data di penjaga kebun binatang. Setiap znode memiliki database sendiri dan setiap znode memiliki data yang sama setiap saat dengan bantuan konsistensi. |
Pemimpin | Leader adalah Znode yang bertanggung jawab untuk memproses permintaan tulis. |
Pengikut | Pengikut menerima permintaan tulis dari klien dan meneruskannya ke znode pemimpin. |
Minta Prosesor | Hadir hanya di node pemimpin. Ini mengatur permintaan tulis dari node pengikut. |
Siaran atom | Bertanggung jawab untuk menyiarkan perubahan dari node pemimpin ke node pengikut. |
Mari kita menganalisis bagaimana node pemimpin dapat dipilih dalam ansambel ZooKeeper. Pertimbangkan adaNjumlah node dalam sebuah cluster. Proses pemilihan pemimpin adalah sebagai berikut -
Semua node membuat znode singkat yang berurutan dengan jalur yang sama, /app/leader_election/guid_.
ZooKeeper ensemble akan menambahkan 10 digit nomor urut ke jalur dan znode yang dibuat akan /app/leader_election/guid_0000000001, /app/leader_election/guid_0000000002, dll.
Untuk contoh tertentu, node yang membuat angka terkecil di znode menjadi pemimpin dan semua node lainnya adalah pengikut.
Setiap node pengikut melihat znode yang memiliki angka terkecil berikutnya. Misalnya, node yang membuat znode/app/leader_election/guid_0000000008 akan mengawasi znode /app/leader_election/guid_0000000007 dan node yang membuat znode /app/leader_election/guid_0000000007 akan mengawasi znode /app/leader_election/guid_0000000006.
Jika leader turun, maka znode yang sesuai /app/leader_electionN terhapus.
Node pengikut baris berikutnya akan mendapatkan notifikasi melalui pengamat tentang penghapusan pemimpin.
Node pengikut baris berikutnya akan memeriksa apakah ada znode lain dengan nomor terkecil. Jika tidak ada, maka itu akan mengambil peran sebagai pemimpin. Jika tidak, ia menemukan node yang membuat znode dengan nomor terkecil sebagai pemimpin.
Demikian pula, semua node pengikut lainnya memilih node yang membuat znode dengan nomor terkecil sebagai pemimpin.
Pemilihan pemimpin merupakan proses yang kompleks jika dilakukan dari awal. Tetapi layanan Zookeeper membuatnya sangat sederhana. Mari kita lanjutkan ke instalasi Zookeeper untuk tujuan pengembangan di bab berikutnya.
Sebelum menginstal ZooKeeper, pastikan sistem Anda berjalan di salah satu sistem operasi berikut -
Any of Linux OS- Mendukung pengembangan dan penyebaran. Ini lebih disukai untuk aplikasi demo.
Windows OS - Hanya mendukung pengembangan.
Mac OS - Hanya mendukung pengembangan.
Server Zookeeper dibuat di Java dan berjalan di JVM. Anda perlu menggunakan JDK 6 atau lebih tinggi.
Sekarang, ikuti langkah-langkah yang diberikan di bawah ini untuk menginstal kerangka Zookeeper di komputer Anda.
Langkah 1: Memverifikasi Instalasi Java
Kami yakin Anda sudah menginstal lingkungan Java di sistem Anda. Cukup verifikasi dengan menggunakan perintah berikut.
$ java -version
Jika Anda telah menginstal Java di komputer Anda, maka Anda dapat melihat versi Java yang diinstal. Jika tidak, ikuti langkah-langkah sederhana yang diberikan di bawah ini untuk menginstal Java versi terbaru.
Langkah 1.1: Unduh JDK
Unduh versi terbaru JDK dengan mengunjungi tautan berikut dan unduh versi terbaru. Jawa
Versi terbaru (saat menulis tutorial ini) adalah JDK 8u 60 dan filenya adalah "jdk-8u60-linuxx64.tar.gz". Silakan unduh file di mesin Anda.
Langkah 1.2: Ekstrak file
Umumnya, file diunduh ke downloadsmap. Verifikasi dan ekstrak pengaturan tar menggunakan perintah berikut.
$ cd /go/to/download/path
$ tar -zxf jdk-8u60-linux-x64.gz
Langkah 1.3: Pindah ke direktori opt
Agar Java tersedia untuk semua pengguna, pindahkan konten java yang diekstrak ke folder "/ usr / local / java".
$ su
password: (type password of root user)
$ mkdir /opt/jdk $ mv jdk-1.8.0_60 /opt/jdk/
Langkah 1.4: Setel jalur
Untuk mengatur path dan variabel JAVA_HOME, tambahkan perintah berikut ke file ~ / .bashrc.
export JAVA_HOME = /usr/jdk/jdk-1.8.0_60
export PATH=$PATH:$JAVA_HOME/bin
Sekarang, terapkan semua perubahan ke dalam sistem yang sedang berjalan.
$ source ~/.bashrc
Langkah 1.5: Alternatif Java
Gunakan perintah berikut untuk mengubah alternatif Java.
update-alternatives --install /usr/bin/java java /opt/jdk/jdk1.8.0_60/bin/java 100
Langkah 1.6
Verifikasi penginstalan Java menggunakan perintah verifikasi (java -version) dijelaskan pada Langkah 1.
Langkah 2: Instalasi Kerangka ZooKeeper
Langkah 2.1: Unduh ZooKeeper
Untuk memasang kerangka kerja Zookeeper di komputer Anda, kunjungi tautan berikut dan unduh versi terbaru Zookeeper. http://zookeeper.apache.org/releases.html
Saat ini, versi terbaru ZooKeeper adalah 3.4.6 (ZooKeeper-3.4.6.tar.gz).
Langkah 2.2: Ekstrak file tar
Ekstrak file tar menggunakan perintah berikut -
$ cd opt/
$ tar -zxf zookeeper-3.4.6.tar.gz $ cd zookeeper-3.4.6
$ mkdir data
Langkah 2.3: Buat file konfigurasi
Buka file konfigurasi bernama conf/zoo.cfg menggunakan perintah vi conf/zoo.cfg dan semua parameter berikut untuk ditetapkan sebagai titik awal.
$ vi conf/zoo.cfg
tickTime = 2000
dataDir = /path/to/zookeeper/data
clientPort = 2181
initLimit = 5
syncLimit = 2
Setelah file konfigurasi berhasil disimpan, kembali ke terminal lagi. Sekarang Anda dapat memulai server penjaga kebun binatang.
Langkah 2.4: Mulai server Zookeeper
Jalankan perintah berikut -
$ bin/zkServer.sh start
Setelah menjalankan perintah ini, Anda akan mendapatkan respons sebagai berikut -
$ JMX enabled by default
$ Using config: /Users/../zookeeper-3.4.6/bin/../conf/zoo.cfg $ Starting zookeeper ... STARTED
Langkah 2.5: Mulai CLI
Ketik perintah berikut -
$ bin/zkCli.sh
Setelah mengetik perintah di atas, Anda akan terhubung ke server Zookeeper dan Anda akan mendapatkan respons berikut.
Connecting to localhost:2181
................
................
................
Welcome to ZooKeeper!
................
................
WATCHER::
WatchedEvent state:SyncConnected type: None path:null
[zk: localhost:2181(CONNECTED) 0]
Hentikan Server ZooKeeper
Setelah menghubungkan server dan melakukan semua operasi, Anda dapat menghentikan server penjaga kebun binatang dengan menggunakan perintah berikut.
$ bin/zkServer.sh stop
ZooKeeper Command Line Interface (CLI) digunakan untuk berinteraksi dengan ansambel ZooKeeper untuk tujuan pengembangan. Ini berguna untuk debugging dan bekerja dengan opsi yang berbeda.
Untuk melakukan operasi ZooKeeper CLI, pertama-tama hidupkan server ZooKeeper Anda ( "bin / zkServer.sh start" ) dan kemudian, klien ZooKeeper ( "bin / zkCli.sh" ). Setelah klien mulai, Anda dapat melakukan operasi berikut -
- Buat znodes
- Dapatkan data
- Perhatikan znode untuk perubahan
- Atur data
- Buat anak-anak dari sebuah znode
- Buat daftar turunan dari sebuah znode
- Periksa Status
- Hapus / Hapus znode
Sekarang mari kita lihat perintah di atas satu per satu dengan sebuah contoh.
Buat Znodes
Buat znode dengan jalur yang diberikan. Ituflagargumen menentukan apakah znode yang dibuat akan menjadi ephemeral, persisten, atau berurutan. Secara default, semua znode bersifat persisten.
Ephemeral znodes (bendera: e) akan secara otomatis dihapus ketika sesi berakhir atau ketika klien terputus.
Sequential znodes menjamin bahwa jalur znode akan unik.
ZooKeeper ensemble akan menambahkan nomor urut bersama dengan 10 digit padding ke jalur znode. Misalnya, jalur znode / myapp akan diubah menjadi / myapp0000000001 dan nomor urut berikutnya adalah / myapp0000000002 . Jika tidak ada flag yang ditentukan, maka znode dianggap sebagaipersistent.
Sintaksis
create /path /data
Sampel
create /FirstZnode “Myfirstzookeeper-app”
Keluaran
[zk: localhost:2181(CONNECTED) 0] create /FirstZnode “Myfirstzookeeper-app”
Created /FirstZnode
Untuk membuat file Sequential znode, Menambahkan -s flag seperti gambar dibawah.
Sintaksis
create -s /path /data
Sampel
create -s /FirstZnode second-data
Keluaran
[zk: localhost:2181(CONNECTED) 2] create -s /FirstZnode “second-data”
Created /FirstZnode0000000023
Untuk membuat file Ephemeral Znode, Menambahkan -e flag seperti gambar dibawah.
Sintaksis
create -e /path /data
Sampel
create -e /SecondZnode “Ephemeral-data”
Keluaran
[zk: localhost:2181(CONNECTED) 2] create -e /SecondZnode “Ephemeral-data”
Created /SecondZnode
Ingatlah ketika koneksi klien terputus, znode singkat akan dihapus. Anda dapat mencobanya dengan keluar dari CLI ZooKeeper dan kemudian membuka kembali CLI.
Dapatkan Data
Ini mengembalikan data terkait dari znode dan metadata dari znode yang ditentukan. Anda akan mendapatkan informasi seperti kapan terakhir kali data diubah, di mana ia diubah, dan informasi tentang data tersebut. CLI ini juga digunakan untuk menetapkan jam tangan untuk menampilkan notifikasi tentang data.
Sintaksis
get /path
Sampel
get /FirstZnode
Keluaran
[zk: localhost:2181(CONNECTED) 1] get /FirstZnode
“Myfirstzookeeper-app”
cZxid = 0x7f
ctime = Tue Sep 29 16:15:47 IST 2015
mZxid = 0x7f
mtime = Tue Sep 29 16:15:47 IST 2015
pZxid = 0x7f
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 22
numChildren = 0
Untuk mengakses znode berurutan, Anda harus memasukkan path lengkap dari znode tersebut.
Sampel
get /FirstZnode0000000023
Keluaran
[zk: localhost:2181(CONNECTED) 1] get /FirstZnode0000000023
“Second-data”
cZxid = 0x80
ctime = Tue Sep 29 16:25:47 IST 2015
mZxid = 0x80
mtime = Tue Sep 29 16:25:47 IST 2015
pZxid = 0x80
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 13
numChildren = 0
Menonton
Jam tangan menampilkan notifikasi ketika data turunan znode atau znode yang ditentukan berubah. Anda dapat mengatur filewatch hanya di get perintah.
Sintaksis
get /path [watch] 1
Sampel
get /FirstZnode 1
Keluaran
[zk: localhost:2181(CONNECTED) 1] get /FirstZnode 1
“Myfirstzookeeper-app”
cZxid = 0x7f
ctime = Tue Sep 29 16:15:47 IST 2015
mZxid = 0x7f
mtime = Tue Sep 29 16:15:47 IST 2015
pZxid = 0x7f
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 22
numChildren = 0
Outputnya mirip dengan normal getperintah, tetapi itu akan menunggu perubahan znode di latar belakang. <Mulai di sini>
Atur Data
Atur data dari znode yang ditentukan. Setelah Anda menyelesaikan operasi set ini, Anda dapat memeriksa data menggunakanget Perintah CLI.
Sintaksis
set /path /data
Sampel
set /SecondZnode Data-updated
Keluaran
[zk: localhost:2181(CONNECTED) 1] get /SecondZnode “Data-updated”
cZxid = 0x82
ctime = Tue Sep 29 16:29:50 IST 2015
mZxid = 0x83
mtime = Tue Sep 29 16:29:50 IST 2015
pZxid = 0x82
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x15018b47db00000
dataLength = 14
numChildren = 0
Jika Anda ditugaskan watch opsi di get perintah (seperti pada perintah sebelumnya), maka hasilnya akan seperti gambar di bawah ini -
Keluaran
[zk: localhost:2181(CONNECTED) 1] get /FirstZnode “Mysecondzookeeper-app”
WATCHER: :
WatchedEvent state:SyncConnected type:NodeDataChanged path:/FirstZnode
cZxid = 0x7f
ctime = Tue Sep 29 16:15:47 IST 2015
mZxid = 0x84
mtime = Tue Sep 29 17:14:47 IST 2015
pZxid = 0x7f
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 23
numChildren = 0
Buat Children / Sub-znode
Membuat anak-anak mirip dengan membuat znode baru. Satu-satunya perbedaan adalah jalur znode turunan akan memiliki jalur induk juga.
Sintaksis
create /parent/path/subnode/path /data
Sampel
create /FirstZnode/Child1 firstchildren
Keluaran
[zk: localhost:2181(CONNECTED) 16] create /FirstZnode/Child1 “firstchildren”
created /FirstZnode/Child1
[zk: localhost:2181(CONNECTED) 17] create /FirstZnode/Child2 “secondchildren”
created /FirstZnode/Child2
Daftar Anak-anak
Perintah ini digunakan untuk mendaftar dan menampilkan file children dari sebuah znode.
Sintaksis
ls /path
Sampel
ls /MyFirstZnode
Keluaran
[zk: localhost:2181(CONNECTED) 2] ls /MyFirstZnode
[mysecondsubnode, myfirstsubnode]
Periksa Status
Statusmenjelaskan metadata dari znode tertentu. Ini berisi detail seperti Stempel waktu, Nomor versi, ACL, Panjang data, dan Kode zn Anak.
Sintaksis
stat /path
Sampel
stat /FirstZnode
Keluaran
[zk: localhost:2181(CONNECTED) 1] stat /FirstZnode
cZxid = 0x7f
ctime = Tue Sep 29 16:15:47 IST 2015
mZxid = 0x7f
mtime = Tue Sep 29 17:14:24 IST 2015
pZxid = 0x7f
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 23
numChildren = 0
Hapus sebuah Znode
Menghapus znode yang ditentukan dan secara rekursif semua anaknya. Ini hanya akan terjadi jika znode seperti itu tersedia.
Sintaksis
rmr /path
Sampel
rmr /FirstZnode
Keluaran
[zk: localhost:2181(CONNECTED) 10] rmr /FirstZnode
[zk: localhost:2181(CONNECTED) 11] get /FirstZnode
Node does not exist: /FirstZnode
Menghapus (delete /path) perintah mirip dengan remove perintah, kecuali fakta bahwa ia hanya bekerja pada znode tanpa anak.
ZooKeeper memiliki pengikatan API resmi untuk Java dan C. Komunitas ZooKeeper menyediakan API tidak resmi untuk sebagian besar bahasa (.NET, python, dll.). Menggunakan Zookeeper API, aplikasi dapat menghubungkan, berinteraksi, memanipulasi data, mengoordinasikan, dan akhirnya memutuskan sambungan dari ansambel ZooKeeper.
ZooKeeper API memiliki serangkaian fitur yang kaya untuk mendapatkan semua fungsionalitas dari ansambel ZooKeeper dengan cara yang sederhana dan aman. ZooKeeper API menyediakan metode sinkron dan asinkron.
ZooKeeper ensemble dan ZooKeeper API benar-benar melengkapi satu sama lain dalam setiap aspek dan menguntungkan pengembang dengan cara yang luar biasa. Mari kita bahas pengikatan Java di bab ini.
Dasar-dasar Zookeeper API
Aplikasi yang berinteraksi dengan ansambel ZooKeeper disebut sebagai ZooKeeper Client atau sederhananya Client.
Znode adalah komponen inti dari ansambel ZooKeeper dan ZooKeeper API menyediakan sejumlah kecil metode untuk memanipulasi semua detail znode dengan ansambel ZooKeeper.
Seorang klien harus mengikuti langkah-langkah yang diberikan di bawah ini untuk memiliki interaksi yang jelas dan bersih dengan ansambel ZooKeeper.
Hubungkan ke ansambel ZooKeeper. ZooKeeper ensemble menetapkan ID Sesi untuk klien.
Kirim detak jantung ke server secara berkala. Jika tidak, ansambel ZooKeeper kedaluwarsa ID Sesi dan klien perlu menyambung kembali.
Dapatkan / Setel znode selama ID sesi aktif.
Putuskan sambungan dari ansambel ZooKeeper, setelah semua tugas selesai. Jika klien tidak aktif untuk waktu yang lama, maka ansambel Zookeeper akan secara otomatis memutuskan klien.
Java Binding
Mari kita pahami kumpulan paling penting dari Zookeeper API di bab ini. Bagian utama dari ZooKeeper API adalahZooKeeper class. Ini memberikan opsi untuk menghubungkan ansambel ZooKeeper dalam konstruktornya dan memiliki metode berikut -
connect - terhubung ke ansambel ZooKeeper
create - buat znode
exists - periksa apakah ada znode dan informasinya
getData - dapatkan data dari znode tertentu
setData - mengatur data dalam znode tertentu
getChildren - dapatkan semua sub-node yang tersedia di znode tertentu
delete - dapatkan znode tertentu dan semua anaknya
close - tutup koneksi
Hubungkan ke ZooKeeper Ensemble
Kelas Zookeeper menyediakan fungsionalitas koneksi melalui konstruktornya. Tanda tangan konstruktor adalah sebagai berikut -
ZooKeeper(String connectionString, int sessionTimeout, Watcher watcher)
Dimana,
connectionString - Host ansambel ZooKeeper.
sessionTimeout - batas waktu sesi dalam milidetik.
watcher- objek yang mengimplementasikan antarmuka "Watcher". Ansambel ZooKeeper mengembalikan status koneksi melalui objek pengamat.
Mari kita buat kelas pembantu baru ZooKeeperConnection dan tambahkan metode connect. Ituconnect metode membuat objek ZooKeeper, menghubungkan ke ansambel ZooKeeper, dan kemudian mengembalikan objek.
Sini CountDownLatch digunakan untuk menghentikan (menunggu) proses utama hingga klien terhubung dengan ansambel Zookeeper.
Ansambel ZooKeeper membalas status koneksi melalui Watcher callback. Callback Watcher akan dipanggil setelah klien terhubung dengan ansambel ZooKeeper dan callback Watcher memanggilcountDown metode dari CountDownLatch untuk membuka kunci, await dalam proses utama.
Berikut adalah kode lengkap untuk terhubung dengan ansambel ZooKeeper.
Coding: ZooKeeperConnection.java
// import java classes
import java.io.IOException;
import java.util.concurrent.CountDownLatch;
// import zookeeper classes
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.KeeperState;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.AsyncCallback.StatCallback;
import org.apache.zookeeper.KeeperException.Code;
import org.apache.zookeeper.data.Stat;
public class ZooKeeperConnection {
// declare zookeeper instance to access ZooKeeper ensemble
private ZooKeeper zoo;
final CountDownLatch connectedSignal = new CountDownLatch(1);
// Method to connect zookeeper ensemble.
public ZooKeeper connect(String host) throws IOException,InterruptedException {
zoo = new ZooKeeper(host,5000,new Watcher() {
public void process(WatchedEvent we) {
if (we.getState() == KeeperState.SyncConnected) {
connectedSignal.countDown();
}
}
});
connectedSignal.await();
return zoo;
}
// Method to disconnect from zookeeper server
public void close() throws InterruptedException {
zoo.close();
}
}
Simpan kode di atas dan akan digunakan di bagian selanjutnya untuk menghubungkan ansambel ZooKeeper.
Buat Znode
Kelas ZooKeeper menyediakan create methoduntuk membuat znode baru di ansambel ZooKeeper. Tanda tangan daricreate metode adalah sebagai berikut -
create(String path, byte[] data, List<ACL> acl, CreateMode createMode)
Dimana,
path- Jalur Znode. Misalnya, / myapp1, / myapp2, / myapp1 / mydata1, myapp2 / mydata1 / myanothersubdata
data - data untuk disimpan di jalur znode tertentu
acl- daftar kontrol akses dari node yang akan dibuat. ZooKeeper API menyediakan antarmuka statisZooDefs.Idsuntuk mendapatkan beberapa daftar acl dasar. Misalnya, ZooDefs.Ids.OPEN_ACL_UNSAFE mengembalikan daftar acl untuk znode terbuka.
createMode- jenis node, baik ephemeral, sequential, atau keduanya. Ini adalah sebuahenum.
Mari kita buat aplikasi Java baru untuk memeriksa createfungsionalitas dari ZooKeeper API. Buat fileZKCreate.java. Dalam metode utama, buat objek berjenisZooKeeperConnection dan panggil connect metode untuk menyambung ke ansambel ZooKeeper.
Metode koneksi akan mengembalikan objek Zookeeper zk. Sekarang, panggilcreate metode dari zk keberatan dengan custom path dan data.
Kode program lengkap untuk membuat znode adalah sebagai berikut -
Coding: ZKCreate.java
import java.io.IOException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.KeeperState;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.ZooDefs;
public class ZKCreate {
// create static instance for zookeeper class.
private static ZooKeeper zk;
// create static instance for ZooKeeperConnection class.
private static ZooKeeperConnection conn;
// Method to create znode in zookeeper ensemble
public static void create(String path, byte[] data) throws
KeeperException,InterruptedException {
zk.create(path, data, ZooDefs.Ids.OPEN_ACL_UNSAFE,
CreateMode.PERSISTENT);
}
public static void main(String[] args) {
// znode path
String path = "/MyFirstZnode"; // Assign path to znode
// data in byte array
byte[] data = "My first zookeeper app”.getBytes(); // Declare data
try {
conn = new ZooKeeperConnection();
zk = conn.connect("localhost");
create(path, data); // Create the data to the specified path
conn.close();
} catch (Exception e) {
System.out.println(e.getMessage()); //Catch error message
}
}
}
Setelah aplikasi dikompilasi dan dijalankan, znode dengan data yang ditentukan akan dibuat di ansambel ZooKeeper. Anda dapat memeriksanya menggunakan ZooKeeper CLIzkCli.sh.
cd /path/to/zookeeper
bin/zkCli.sh
>>> get /MyFirstZnode
Ada - Periksa Keberadaan Znode
Kelas ZooKeeper menyediakan file exists methoduntuk memeriksa keberadaan znode. Ini mengembalikan metadata dari sebuah znode, jika znode yang ditentukan ada. Tanda tangan dariexists metode adalah sebagai berikut -
exists(String path, boolean watcher)
Dimana,
path - Jalur Znode
watcher - nilai boolean untuk menentukan apakah akan menonton znode tertentu atau tidak
Mari kita buat aplikasi Java baru untuk memeriksa fungsionalitas "ada" dari API ZooKeeper. Buat file “ZKExists.java” . Dalam metode utama, buat objek Zookeeper, "zk" menggunakan objek "ZooKeeperConnection" . Kemudian, panggil metode "ada" dari objek "zk" dengan "jalur" kustom . Daftar lengkapnya adalah sebagai berikut -
Coding: ZKExists.java
import java.io.IOException;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.KeeperState;
import org.apache.zookeeper.data.Stat;
public class ZKExists {
private static ZooKeeper zk;
private static ZooKeeperConnection conn;
// Method to check existence of znode and its status, if znode is available.
public static Stat znode_exists(String path) throws
KeeperException,InterruptedException {
return zk.exists(path, true);
}
public static void main(String[] args) throws InterruptedException,KeeperException {
String path = "/MyFirstZnode"; // Assign znode to the specified path
try {
conn = new ZooKeeperConnection();
zk = conn.connect("localhost");
Stat stat = znode_exists(path); // Stat checks the path of the znode
if(stat != null) {
System.out.println("Node exists and the node version is " +
stat.getVersion());
} else {
System.out.println("Node does not exists");
}
} catch(Exception e) {
System.out.println(e.getMessage()); // Catches error messages
}
}
}
Setelah aplikasi dikompilasi dan dijalankan, Anda akan mendapatkan output di bawah ini.
Node exists and the node version is 1.
Metode getData
Kelas ZooKeeper menyediakan getDatametode untuk mendapatkan data yang dilampirkan dalam znode tertentu dan statusnya. Tanda tangan darigetData metode adalah sebagai berikut -
getData(String path, Watcher watcher, Stat stat)
Dimana,
path - Jalur Znode.
watcher - Fungsi panggilan balik tipe Watcher. Ansambel ZooKeeper akan memberi tahu melalui callback Watcher ketika data dari znode yang ditentukan berubah. Ini adalah pemberitahuan satu kali.
stat - Mengembalikan metadata dari sebuah znode.
Mari kita buat aplikasi Java baru untuk memahami getDatafungsionalitas dari ZooKeeper API. Buat fileZKGetData.java. Dalam metode utama, buat objek ZooKeeperzk menggunakan dia ZooKeeperConnectionobyek. Kemudian, panggilgetData metode objek zk dengan jalur kustom.
Berikut adalah kode program lengkap untuk mendapatkan data dari node tertentu -
Coding: ZKGetData.java
import java.io.IOException;
import java.util.concurrent.CountDownLatch;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.KeeperState;
import org.apache.zookeeper.data.Stat;
public class ZKGetData {
private static ZooKeeper zk;
private static ZooKeeperConnection conn;
public static Stat znode_exists(String path) throws
KeeperException,InterruptedException {
return zk.exists(path,true);
}
public static void main(String[] args) throws InterruptedException, KeeperException {
String path = "/MyFirstZnode";
final CountDownLatch connectedSignal = new CountDownLatch(1);
try {
conn = new ZooKeeperConnection();
zk = conn.connect("localhost");
Stat stat = znode_exists(path);
if(stat != null) {
byte[] b = zk.getData(path, new Watcher() {
public void process(WatchedEvent we) {
if (we.getType() == Event.EventType.None) {
switch(we.getState()) {
case Expired:
connectedSignal.countDown();
break;
}
} else {
String path = "/MyFirstZnode";
try {
byte[] bn = zk.getData(path,
false, null);
String data = new String(bn,
"UTF-8");
System.out.println(data);
connectedSignal.countDown();
} catch(Exception ex) {
System.out.println(ex.getMessage());
}
}
}
}, null);
String data = new String(b, "UTF-8");
System.out.println(data);
connectedSignal.await();
} else {
System.out.println("Node does not exists");
}
} catch(Exception e) {
System.out.println(e.getMessage());
}
}
}
Setelah aplikasi dikompilasi dan dijalankan, Anda akan mendapatkan output berikut
My first zookeeper app
Dan aplikasi akan menunggu notifikasi lebih lanjut dari ansambel Zookeeper. Ubah data dari znode yang ditentukan menggunakan ZooKeeper CLIzkCli.sh.
cd /path/to/zookeeper
bin/zkCli.sh
>>> set /MyFirstZnode Hello
Sekarang, aplikasi akan mencetak keluaran berikut dan keluar.
Hello
Metode setData
Kelas ZooKeeper menyediakan setDatametode untuk memodifikasi data yang dilampirkan dalam znode tertentu. Tanda tangan darisetData metode adalah sebagai berikut -
setData(String path, byte[] data, int version)
Dimana,
path - Jalur Znode
data - data untuk disimpan di jalur znode tertentu.
version- Versi znode saat ini. ZooKeeper memperbarui nomor versi znode setiap kali data diubah.
Sekarang mari kita buat aplikasi Java baru untuk memahami setDatafungsionalitas dari ZooKeeper API. Buat fileZKSetData.java. Dalam metode utama, buat objek ZooKeeperzk menggunakan ZooKeeperConnectionobyek. Kemudian, panggilsetData metode dari zk objek dengan jalur yang ditentukan, data baru, dan versi node.
Berikut adalah kode program lengkap untuk memodifikasi data yang dilampirkan dalam znode tertentu.
Kode: ZKSetData.java
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.KeeperState;
import java.io.IOException;
public class ZKSetData {
private static ZooKeeper zk;
private static ZooKeeperConnection conn;
// Method to update the data in a znode. Similar to getData but without watcher.
public static void update(String path, byte[] data) throws
KeeperException,InterruptedException {
zk.setData(path, data, zk.exists(path,true).getVersion());
}
public static void main(String[] args) throws InterruptedException,KeeperException {
String path= "/MyFirstZnode";
byte[] data = "Success".getBytes(); //Assign data which is to be updated.
try {
conn = new ZooKeeperConnection();
zk = conn.connect("localhost");
update(path, data); // Update znode data to the specified path
} catch(Exception e) {
System.out.println(e.getMessage());
}
}
}
Setelah aplikasi dikompilasi dan dijalankan, data dari znode yang ditentukan akan diubah dan dapat diperiksa menggunakan ZooKeeper CLI, zkCli.sh.
cd /path/to/zookeeper
bin/zkCli.sh
>>> get /MyFirstZnode
getChildrenMethod
Kelas ZooKeeper menyediakan getChildrenmetode untuk mendapatkan semua sub-node dari znode tertentu. Tanda tangan darigetChildren metode adalah sebagai berikut -
getChildren(String path, Watcher watcher)
Dimana,
path - Jalur Znode.
watcher- Fungsi panggilan balik tipe "Watcher". Ansambel ZooKeeper akan memberi tahu ketika znode yang ditentukan dihapus atau anak di bawah znode dibuat / dihapus. Ini adalah pemberitahuan satu kali.
Coding: ZKGetChildren.java
import java.io.IOException;
import java.util.*;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.KeeperState;
import org.apache.zookeeper.data.Stat;
public class ZKGetChildren {
private static ZooKeeper zk;
private static ZooKeeperConnection conn;
// Method to check existence of znode and its status, if znode is available.
public static Stat znode_exists(String path) throws
KeeperException,InterruptedException {
return zk.exists(path,true);
}
public static void main(String[] args) throws InterruptedException,KeeperException {
String path = "/MyFirstZnode"; // Assign path to the znode
try {
conn = new ZooKeeperConnection();
zk = conn.connect("localhost");
Stat stat = znode_exists(path); // Stat checks the path
if(stat!= null) {
//“getChildren” method- get all the children of znode.It has two
args, path and watch
List <String> children = zk.getChildren(path, false);
for(int i = 0; i < children.size(); i++)
System.out.println(children.get(i)); //Print children's
} else {
System.out.println("Node does not exists");
}
} catch(Exception e) {
System.out.println(e.getMessage());
}
}
}
Sebelum menjalankan program, mari kita buat dua sub-node untuk /MyFirstZnode menggunakan ZooKeeper CLI, zkCli.sh.
cd /path/to/zookeeper
bin/zkCli.sh
>>> create /MyFirstZnode/myfirstsubnode Hi
>>> create /MyFirstZnode/mysecondsubmode Hi
Sekarang, mengkompilasi dan menjalankan program akan menampilkan znode yang dibuat di atas.
myfirstsubnode
mysecondsubnode
Hapus sebuah Znode
Kelas ZooKeeper menyediakan deletemetode untuk menghapus znode tertentu. Tanda tangan daridelete metode adalah sebagai berikut -
delete(String path, int version)
Dimana,
path - Jalur Znode.
version - Versi znode saat ini.
Mari kita buat aplikasi Java baru untuk memahami deletefungsionalitas dari ZooKeeper API. Buat fileZKDelete.java. Dalam metode utama, buat objek ZooKeeperzk menggunakan ZooKeeperConnectionobyek. Kemudian, panggildelete metode dari zk objek dengan yang ditentukan path dan versi node.
Kode program lengkap untuk menghapus znode adalah sebagai berikut -
Coding: ZKDelete.java
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.KeeperException;
public class ZKDelete {
private static ZooKeeper zk;
private static ZooKeeperConnection conn;
// Method to check existence of znode and its status, if znode is available.
public static void delete(String path) throws KeeperException,InterruptedException {
zk.delete(path,zk.exists(path,true).getVersion());
}
public static void main(String[] args) throws InterruptedException,KeeperException {
String path = "/MyFirstZnode"; //Assign path to the znode
try {
conn = new ZooKeeperConnection();
zk = conn.connect("localhost");
delete(path); //delete the node with the specified path
} catch(Exception e) {
System.out.println(e.getMessage()); // catches error messages
}
}
}
Zookeeper menyediakan infrastruktur koordinasi yang fleksibel untuk lingkungan terdistribusi. Kerangka Zookeeper mendukung banyak aplikasi industri terbaik saat ini. Kami akan membahas beberapa aplikasi ZooKeeper yang paling terkenal di bab ini.
Yahoo!
Kerangka ZooKeeper awalnya dibangun di "Yahoo!". Aplikasi terdistribusi yang dirancang dengan baik harus memenuhi persyaratan seperti transparansi data, kinerja yang lebih baik, ketahanan, konfigurasi terpusat, dan koordinasi. Jadi, mereka merancang kerangka Zookeeper untuk memenuhi persyaratan ini.
Apache Hadoop
Apache Hadoop adalah kekuatan pendorong di balik pertumbuhan industri Big Data. Hadoop mengandalkan Zookeeper untuk manajemen konfigurasi dan koordinasi. Mari kita ambil skenario untuk memahami peran ZooKeeper di Hadoop.
Asumsikan bahwa a Hadoop cluster jembatan 100 or more commodity servers. Oleh karena itu, perlu adanya koordinasi dan layanan penamaan. Karena penghitungan sejumlah besar node terlibat, setiap node perlu melakukan sinkronisasi satu sama lain, mengetahui di mana mengakses layanan, dan mengetahui bagaimana mereka harus dikonfigurasi. Pada saat ini, cluster Hadoop memerlukan layanan lintas node. Zookeeper menyediakan fasilitas untukcross-node synchronization dan memastikan tugas di seluruh proyek Hadoop diserialkan dan disinkronkan.
Beberapa server Zookeeper mendukung kluster Hadoop yang besar. Setiap mesin klien berkomunikasi dengan salah satu server Zookeeper untuk mengambil dan memperbarui informasi sinkronisasi. Beberapa contoh waktu nyata adalah -
Human Genome Project- Proyek Genom Manusia berisi terabyte data. Framework Hadoop MapReduce dapat digunakan untuk menganalisis dataset dan menemukan fakta menarik untuk perkembangan manusia.
Healthcare - Rumah sakit dapat menyimpan, mengambil, dan menganalisis kumpulan besar catatan medis pasien, yang biasanya dalam terabyte.
Apache HBase
Apache HBase adalah database NoSQL open source, terdistribusi yang digunakan untuk akses baca / tulis real-time dari kumpulan data besar dan berjalan di atas HDFS. HBase mengikutimaster-slave architecturedimana Guru HBase mengatur semua budak. Budak disebut sebagaiRegion servers.
Instalasi aplikasi terdistribusi HBase bergantung pada cluster Zookeeper yang sedang berjalan. Apache HBase menggunakan ZooKeeper untuk melacak status data terdistribusi di seluruh server master dan wilayah dengan bantuancentralized configuration management dan distributed mutexmekanisme. Berikut adalah beberapa kasus penggunaan HBase -
Telecom- Industri telekomunikasi menyimpan miliaran catatan panggilan seluler (sekitar 30TB / bulan) dan mengakses catatan panggilan ini secara real time menjadi tugas yang sangat besar. HBase dapat digunakan untuk memproses semua catatan secara real time, mudah dan efisien.
Social network- Mirip dengan industri telekomunikasi, situs seperti Twitter, LinkedIn, dan Facebook menerima data dalam jumlah besar melalui posting yang dibuat oleh pengguna. HBase dapat digunakan untuk menemukan tren terkini dan fakta menarik lainnya.
Apache Solr
Apache Solr adalah platform pencarian sumber terbuka yang cepat yang ditulis di Java. Ini adalah mesin pencari terdistribusi yang sangat cepat dan toleran terhadap kesalahan. Dibangun di atasLucene, ini adalah mesin pencari teks berperforma tinggi dan berfitur lengkap.
Solr secara ekstensif menggunakan setiap fitur ZooKeeper seperti manajemen Konfigurasi, pemilihan Pemimpin, manajemen node, Penguncian dan sinkronisasi data.
Solr memiliki dua bagian yang berbeda, indexing dan searching. Pengindeksan adalah proses menyimpan data dalam format yang tepat agar dapat dicari di lain waktu. Solr menggunakan Zookeeper untuk mengindeks data di beberapa node dan mencari dari beberapa node. ZooKeeper menyumbangkan fitur-fitur berikut -
Tambahkan / hapus node jika diperlukan
Replikasi data antar node dan meminimalkan kehilangan data
Berbagi data antara beberapa node dan selanjutnya mencari dari beberapa node untuk hasil pencarian yang lebih cepat
Beberapa kasus penggunaan Apache Solr termasuk e-commerce, pencarian pekerjaan, dll.