Zookeeper-quick-guide

提供:Dev Guides
移動先:案内検索

Zookeeper-概要

ZooKeeperは、多数のホストを管理するための分散調整サービスです。 分散環境でのサービスの調整と管理は複雑なプロセスです。 ZooKeeperは、シンプルなアーキテクチャとAPIでこの問題を解決します。 ZooKeeperを使用すると、開発者はアプリケーションの分散性を心配することなく、コアアプリケーションロジックに集中できます。

ZooKeeperフレームワークはもともと、簡単で堅牢な方法でアプリケーションにアクセスするために「Yahoo!」で構築されました。 その後、Apache ZooKeeperは、Hadoop、HBase、およびその他の分散フレームワークで使用される組織的なサービスの標準になりました。 たとえば、Apache HBaseはZooKeeperを使用して、分散データのステータスを追跡します。

さらに先に進む前に、分散アプリケーションについて知っておくことが重要です。 それでは、分散アプリケーションの簡単な概要から議論を始めましょう。

分散アプリケーション

分散アプリケーションは、特定のタスクを高速かつ効率的に完了するように相互に調整することにより、ネットワーク内の複数のシステムで所定の時間に(同時に)実行できます。 通常、複雑な時間のかかるタスクは、単一のシステムで実行される非分散アプリケーションでは数時間かかるため、関連するすべてのシステムのコンピューティング機能を使用して、分散アプリケーションで数分で実行できます。

分散アプリケーションをより多くのシステムで実行するように構成することにより、タスクを完了する時間をさらに短縮できます。 分散アプリケーションが実行されているシステムのグループは*クラスター*と呼ばれ、クラスターで実行されている各マシンは*ノード*と呼ばれます。

分散アプリケーションには、*サーバー*および*クライアント*アプリケーションの2つの部分があります。 サーバーアプリケーションは実際に分散されており、クライアントがクラスター内の任意のサーバーに接続して同じ結果を得ることができるように、共通のインターフェイスを備えています。 クライアントアプリケーションは、分散アプリケーションと対話するためのツールです。

分散アプリケーション

分散アプリケーションの利点

  • 信頼性-単一または少数のシステムに障害が発生しても、システム全体が障害になることはありません。
  • スケーラビリティ-ダウンタイムなしでアプリケーションの構成をわずかに変更してマシンを追加することにより、必要に応じてパフォーマンスを向上させることができます。
  • 透明性-システムの複雑さを隠し、単一のエンティティ/アプリケーションとして表示されます。

分散アプリケーションの課題

  • レース状態-特定のタスクを実行しようとする2台以上のマシン。実際には、常に1台のマシンでのみ実行する必要があります。 たとえば、共有リソースは、常に1台のマシンでのみ変更する必要があります。
  • Deadlock -相互に無期限に完了するのを待機している2つ以上の操作。
  • 不整合-データの部分的な障害。

Apache ZooKeeper Meant Forとは何ですか?

Apache ZooKeeperは、クラスター(ノードのグループ)によって使用されるサービスであり、クラスター間で調整し、堅牢な同期手法で共有データを維持します。 ZooKeeper自体は、分散アプリケーションを作成するためのサービスを提供する分散アプリケーションです。

ZooKeeperが提供する一般的なサービスは次のとおりです-

  • ネーミングサービス-クラスター内のノードを名前で識別します。 DNSに似ていますが、ノード用です。
  • 構成管理-参加ノードのシステムの最新および最新の構成情報。
  • クラスター管理-クラスター内のノードの参加/離脱およびリアルタイムでのノードの状態。
  • リーダー選挙-調整目的のノードとしてノードを選択します。
  • ロックおよび同期サービス-変更中のデータのロック。 このメカニズムは、Apache HBaseなどの他の分散アプリケーションを接続する際の自動障害回復に役立ちます。
  • 信頼性の高いデータレジストリ-1つまたはいくつかのノードがダウンしている場合でもデータの可用性。

分散アプリケーションには多くの利点がありますが、複雑でクラックが困難ないくつかの課題もあります。 ZooKeeperフレームワークは、すべての課題を克服するための完全なメカニズムを提供します。 競合状態とデッドロックは、*フェイルセーフ同期アプローチ*を使用して処理されます。 もう1つの主な欠点は、データの不整合です。これは、ZooKeeperが*アトミック性*で解決します。

ZooKeeperの利点

ZooKeeperを使用する利点は次のとおりです-

  • シンプルな分散調整プロセス
  • 同期-サーバープロセス間の相互排除と協力。 このプロセスは、Apache HBaseの構成管理に役立ちます。
  • 注文したメッセージ
  • Serialization -特定のルールに従ってデータをエンコードします。 アプリケーションが一貫して実行されるようにします。 このアプローチをMapReduceで使用して、実行中のスレッドを実行するキューを調整できます。
  • 信頼性
  • Atomicity -データ転送は完全に成功または失敗しますが、部分的なトランザクションはありません。

Zookeeper-基礎

ZooKeeperの動作について詳しく説明する前に、ZooKeeperの基本的な概念を見てみましょう。 この章では、次のトピックについて説明します-

  • 建築
  • 階層的な名前空間
  • セッション
  • 時計

ZooKeeperのアーキテクチャ

次の図をご覧ください。 ZooKeeperの「クライアントサーバーアーキテクチャ」を示しています。

ZooKeeperのアーキテクチャ

ZooKeeperアーキテクチャの一部である各コンポーネントについて、次の表で説明しました。

Part Description
Client

Clients, one of the nodes in our distributed application cluster, access information from the server. For a particular time interval, every client sends a message to the server to let the sever know that the client is alive.

同様に、サーバーはクライアントが接続すると確認応答を送信します。 接続されたサーバーから応答がない場合、クライアントはメッセージを別のサーバーに自動的にリダイレクトします。

Server Server, one of the nodes in our ZooKeeper ensemble, provides all the services to clients. Gives acknowledgement to client to inform that the server is alive.
Ensemble Group of ZooKeeper servers. The minimum number of nodes that is required to form an ensemble is 3.
Leader Server node which performs automatic recovery if any of the connected node failed. Leaders are elected on service startup.
Follower Server node which follows leader instruction.

階層的な名前空間

次の図は、メモリ表示に使用されるZooKeeperファイルシステムのツリー構造を示しています。 ZooKeeperノードは znode と呼ばれます。 すべてのznodeは名前で識別され、一連のパス(/)で区切られます。

  • この図では、最初に「/」で区切られたルート znode があります。 ルートの下には、2つの論理名前空間 config および workers があります。
  • config 名前空間は集中構成管理に使用され、 workers 名前空間は命名に使用されます。
  • config 名前空間では、各znodeは最大1MBのデータを保存できます。 これは、親znodeにもデータを保存できることを除いて、UNIXファイルシステムに似ています。 この構造の主な目的は、同期されたデータを保存し、znodeのメタデータを記述することです。 この構造は、 ZooKeeper Data Model と呼ばれます。

階層的な名前空間

ZooKeeperデータモデルのすべてのznodeは、 stat 構造を維持します。 statは、znodeの*メタデータ*を単に提供します。 _バージョン番号、アクション制御リスト(ACL)、タイムスタンプ、およびデータ長で構成されます。

  • バージョン番号-すべてのznodeにはバージョン番号があります。つまり、znodeに関連付けられたデータが変更されるたびに、対応するバージョン番号も増加します。 複数のzookeeperクライアントが同じznodeで操作を実行しようとする場合、バージョン番号の使用は重要です。
  • アクション制御リスト(ACL)-ACLは基本的にznodeにアクセスするための認証メカニズムです。 すべてのznodeの読み取りおよび書き込み操作を管理します。
  • Timestamp -タイムスタンプは、znodeの作成および変更からの経過時間を表します。 通常はミリ秒単位で表されます。 ZooKeeperは、「トランザクションID」(zxid)からznodeへのすべての変更を識別します。 Zxid は一意であり、各トランザクションの時間を保持するため、あるリクエストから別のリクエストまでの経過時間を簡単に識別できます。
  • データ長-znodeに保存されるデータの総量はデータ長です。 最大1MBのデータを保存できます。

Znodeのタイプ

Znodeは、持続、シーケンシャル、およびエフェメラルに分類されます。

  • Persistence znode -永続性znodeは、その特定のznodeを作成したクライアントが切断された後でも生きています。 デフォルトでは、特に指定がない限り、すべてのznodeは永続的です。
  • *エフェメラルznode *-エフェメラルznodeは、クライアントが動作するまでアクティブです。 クライアントがZooKeeperアンサンブルから切断されると、一時的なznodeは自動的に削除されます。 このため、短命のznodeのみがそれ以上子を持つことはできません。 一時的なznodeが削除されると、次の適切なノードがその位置を埋めます。 一時的なznodeは、リーダー選挙で重要な役割を果たします。
  • シーケンシャルznode *-シーケンシャルznodeは永続的または一時的のいずれかです。 新しいznodeがシーケンシャルznodeとして作成されると、ZooKeeperは元の名前に10桁のシーケンス番号を付加してznodeのパスを設定します。 たとえば、パス */myapp を持つznodeがシーケンシャルznodeとして作成された場合、ZooKeeperはパスを /myapp0000000001 に変更し、次のシーケンス番号を0000000002に設定します。 2つの順次znodeが同時に作成される場合、ZooKeeperは各znodeに同じ番号を使用しません。 順次znodeは、ロックと同期で重要な役割を果たします。

セッション

セッションは、ZooKeeperの操作にとって非常に重要です。 セッション内のリクエストは、FIFO順で実行されます。 クライアントがサーバーに接続すると、セッションが確立され、 session id がクライアントに割り当てられます。

クライアントは、特定の時間間隔で*ハートビート*を送信して、セッションを有効に保ちます。 ZooKeeperアンサンブルが、サービスの開始時に指定された期間(セッションタイムアウト)を超えてクライアントからハートビートを受信しない場合、クライアントが死んだと判断します。

通常、セッションタイムアウトはミリ秒単位で表されます。 何らかの理由でセッションが終了すると、そのセッション中に作成された一時znodeも削除されます。

時計

ウォッチは、クライアントがZooKeeperアンサンブルの変更に関する通知を取得するためのシンプルなメカニズムです。 クライアントは、特定のznodeの読み取り中に監視を設定できます。 ウォッチは、znode(クライアントが登録する)の変更について登録されたクライアントに通知を送信します。

Znodeの変更は、znodeに関連付けられたデータの変更、またはznodeの子の変更です。 ウォッチは一度だけトリガーされます。 クライアントが通知を再度必要とする場合は、別の読み取り操作で行う必要があります。 接続セッションの有効期限が切れると、クライアントはサーバーから切断され、関連するウォッチも削除されます。

Zookeeper-ワークフロー

ZooKeeperアンサンブルが開始されると、クライアントの接続を待機します。 クライアントは、ZooKeeperアンサンブルのノードの1つに接続します。 リーダーノードまたはフォロワーノードの場合があります。 クライアントが接続されると、ノードは特定のクライアントにセッションIDを割り当て、クライアントに確認応答を送信します。 クライアントが確認を受け取らない場合、ZooKeeperアンサンブル内の別のノードに接続しようとします。 ノードに接続すると、クライアントは定期的にノードにハートビートを送信して、接続が失われないようにします。

  • クライアントが特定のznodeを読みたい場合、 znodeパスを持つノードに read request を送信し、ノードは自身のデータベースから取得することで要求されたznodeを返します。 このため、ZooKeeperアンサンブルでは読み取りが高速です。
  • クライアントがZooKeeperアンサンブルにデータを保存する場合、znodeパスとデータをサーバーに送信します。 接続されたサーバーはリクエストをリーダーに転送し、リーダーはすべてのフォロワーに書き込みリクエストを再発行します。 過半数のノードのみが正常に応答した場合、書き込み要求は成功し、成功した戻りコードがクライアントに送信されます。 そうでない場合、書き込み要求は失敗します。 厳密な過半数のノードは Quorum と呼ばれます。

ZooKeeper Ensembleのノード

ZooKeeperアンサンブルに異なる数のノードを配置した場合の効果を分析してみましょう。

  • *単一のノード*がある場合、そのノードに障害が発生すると、ZooKeeperアンサンブルは失敗します。 これは「単一障害点」の一因となり、実稼働環境では推奨されません。
  • * 2つのノード*があり、1つのノードに障害が発生した場合、2つのうち1つが過半数ではないため、過半数もありません。
  • * 3つのノード*があり、1つのノードで障害が発生した場合、過半数であるため、これが最小要件です。 実稼働環境では、ZooKeeperアンサンブルに少なくとも3つのノードが必要です。
  • * 4つのノード*があり、2つのノードに障害が発生すると、再び障害が発生し、3つのノードを持つことに似ています。 追加のノードは目的を果たさないため、奇数、たとえば3、5、7のノードを追加することをお勧めします。

すべてのノードがデータベースに同じデータを書き込む必要があるため、書き込みプロセスはZooKeeperアンサンブルの読み取りプロセスよりもコストがかかることがわかっています。 したがって、バランスの取れた環境では、ノードの数を増やすよりも、ノードの数を少なくする(3、5、または7)方が適切です。

次の図は、ZooKeeperのワークフローを示しており、次の表はそのさまざまなコンポーネントを説明しています。

ZooKeeper Ensemble

Component Description
Write Write process is handled by the leader node. The leader forwards the write request to all the znodes and waits for answers from the znodes. If half of the znodes reply, then the write process is complete.
Read Reads are performed internally by a specific connected znode, so there is no need to interact with the cluster.
Replicated Database It is used to store data in zookeeper. Each znode has its own database and every znode has the same data at every time with the help of consistency.
Leader Leader is the Znode that is responsible for processing write requests.
Follower Followers receive write requests from the clients and forward them to the leader znode.
Request Processor Present only in leader node. It governs write requests from the follower node.
Atomic broadcasts Responsible for broadcasting the changes from the leader node to the follower nodes.

Zookeeper-リーダー選挙

ZooKeeperアンサンブルでリーダーノードを選択する方法を分析しましょう。 クラスターには N 個のノードがあると考えてください。 リーダー選挙のプロセスは次のとおりです-

  • すべてのノードは、同じパス /app/leader_election/guid_ を使用して、シーケンシャルな一時znodeを作成します。
  • ZooKeeperアンサンブルは10桁のシーケンス番号をパスに追加し、作成されるznodeは*/app/leader_election/guid_0000000001、/app/leader_election/guid_0000000002、*などになります。
  • 特定のインスタンスでは、znodeで最小の番号を作成するノードがリーダーになり、他のすべてのノードはフォロワーになります。 各フォロワーノードは、次に小さい番号を持つznodeを監視します。 たとえば、znode/app/leader_election/guid_0000000008 を作成するノードはznode */app/leader_election/guid_0000000007 を監視し、znode /app/leader_election/guid_0000000007 を作成するノードはznode /appを監視します/leader_election/guid_0000000006. リーダーがダウンすると、対応するznode/app/leader_electionN *が削除されます。
  • 次のインラインフォロワーノードは、リーダーの削除に関するウォッチャーを介して通知を取得します。
  • 次の行フォロワーノードは、最小数の他のznodeがあるかどうかを確認します。 ない場合は、リーダーの役割を引き継ぎます。 それ以外の場合、リーダーとして最小の番号を持つznodeを作成したノードを見つけます。
  • 同様に、他のすべてのフォロワーノードは、最小の番号を持つznodeを作成したノードをリーダーとして選択します。

リーダー選挙は、ゼロから行われる場合、複雑なプロセスです。 ただし、ZooKeeperサービスを使用すると非常に簡単になります。 次の章では、開発目的でZooKeeperのインストールに進みましょう。

Zookeeper-インストール

ZooKeeperをインストールする前に、システムが次のオペレーティングシステムのいずれかで実行されていることを確認してください-

  • *任意のLinux OS *-開発と展開をサポートします。 デモアプリケーションに適しています。
  • Windows OS -開発のみをサポートします。
  • Mac OS -開発のみをサポートします。

ZooKeeperサーバーはJavaで作成され、JVM上で実行されます。 JDK 6以降を使用する必要があります。

次に、以下の手順に従って、ZooKeeperフレームワークをマシンにインストールします。

ステップ1:Javaインストールの検証

システムにJava環境がすでにインストールされていると考えています。 次のコマンドを使用して確認してください。

$ java -version

マシンにJavaがインストールされている場合、インストールされているJavaのバージョンを確認できます。 それ以外の場合は、以下の簡単な手順に従って、最新バージョンのJavaをインストールしてください。

ステップ1.1:JDKをダウンロードする

次のリンクにアクセスしてJDKの最新バージョンをダウンロードし、最新バージョンをダウンロードします。 Java

(このチュートリアルの作成中の)最新バージョンはJDK 8u 60で、ファイルは「jdk-8u60-linuxx64.tar.gz」です。 マシンにファイルをダウンロードしてください。

ステップ1.2:ファイルを抽出する

通常、ファイルは downloads フォルダーにダウンロードされます。 それを確認し、次のコマンドを使用してtarセットアップを抽出します。

$ cd/go/to/download/path
$ tar -zxf jdk-8u60-linux-x64.gz

ステップ1.3:optディレクトリに移動する

すべてのユーザーがJavaを使用できるようにするには、抽出されたJavaコンテンツを「/usr/local/java」フォルダーに移動します。

$ su
password: (type password of root user)
$ mkdir/opt/jdk
$ mv jdk-1.8.0_60/opt/jdk/

ステップ1.4:パスを設定する

パスとJAVA_HOME変数を設定するには、次のコマンドを〜/.bashrcファイルに追加します。

export JAVA_HOME =/usr/jdk/jdk-1.8.0_60
export PATH=$PATH:$JAVA_HOME/bin

次に、すべての変更を現在実行中のシステムに適用します。

$ source ~/.bashrc

ステップ1.5:Javaの代替

Javaの代替を変更するには、次のコマンドを使用します。

update-alternatives --install/usr/bin/java java/opt/jdk/jdk1.8.0_60/bin/java 100

ステップ1.6

手順1で説明した検証コマンド*(java -version)*を使用して、Javaインストールを検証します。

ステップ2:ZooKeeper Frameworkのインストール

ステップ2.1:ZooKeeperをダウンロードする

ZooKeeperフレームワークをマシンにインストールするには、次のリンクにアクセスして、ZooKeeperの最新バージョンをダウンロードしてください。 http://zookeeper.apache.org/releasesl

現在、ZooKeeperの最新バージョンは3.4.6(ZooKeeper-3.4.6.tar.gz)です。

ステップ2.2:tarファイルを抽出する

次のコマンドを使用してtarファイルを抽出します-

$ cd opt/
$ tar -zxf zookeeper-3.4.6.tar.gz
$ cd zookeeper-3.4.6
$ mkdir data

ステップ2.3:構成ファイルを作成する

コマンド vi conf/zoo.cfg と開始点として設定する以下のすべてのパラメーターを使用して、 conf/zoo.cfg という名前の構成ファイルを開きます。

$ vi conf/zoo.cfg

tickTime = 2000
dataDir =/path/to/zookeeper/data
clientPort = 2181
initLimit = 5
syncLimit = 2

構成ファイルが正常に保存されたら、再びターミナルに戻ります。 これで、zookeeperサーバーを起動できます。

ステップ2.4:ZooKeeperサーバーを起動する

次のコマンドを実行します-

$ bin/zkServer.sh start

このコマンドを実行した後、次のように応答を取得します-

$ JMX enabled by default
$ Using config:/Users/../zookeeper-3.4.6/bin/../conf/zoo.cfg
$ Starting zookeeper ... STARTED

ステップ2.5:CLIを開始する

次のコマンドを入力します-

$ bin/zkCli.sh

上記のコマンドを入力すると、ZooKeeperサーバーに接続され、次の応答が返されます。

Connecting to localhost:2181
................
................
................
Welcome to ZooKeeper!
................
................
WATCHER::
WatchedEvent state:SyncConnected type: None path:null
[zk: localhost:2181(CONNECTED) 0]

ZooKeeper Serverを停止します

サーバーを接続してすべての操作を実行した後、次のコマンドを使用してzookeeperサーバーを停止できます。

$ bin/zkServer.sh stop

Zookeeper-CLI

ZooKeeperコマンドラインインターフェイス(CLI)は、開発目的でZooKeeperアンサンブルと対話するために使用されます。 デバッグやさまざまなオプションの回避に役立ちます。

ZooKeeper CLI操作を実行するには、まずZooKeeperサーバー(“ bin/zkServer.sh start” _)をオンにしてから、ZooKeeperクライアント(“ bin/zkCli.sh” _)をオンにします。 クライアントが起動したら、次の操作を実行できます-

  • znodeを作成する
  • データを入手する
  • 変更についてznodeを監視する
  • 設定データ
  • znodeの子を作成します
  • znodeの子をリストする
  • ステータスを確認 *znodeの削除/削除

次に、上記のコマンドを1つずつ例を挙げて見てみましょう。

Znodeを作成する

指定されたパスでznodeを作成します。* flag *引数は、作成されたznodeが一時、永続、または順次のいずれであるかを指定します。 デフォルトでは、すべてのznodeは永続的です。

  • Ephemeral znodes (フラグ:e)は、セッションが期限切れになるか、クライアントが切断すると自動的に削除されます。
  • sequential znodes は、znodeパスが一意であることを保証します。
  • ZooKeeperアンサンブルは、znodeパスに10桁のパディングとともにシーケンス番号を追加します。 たとえば、znodeパス_/myappは/myapp0000000001_に変換され、次のシーケンス番号は_/myapp0000000002_になります。 フラグが指定されていない場合、znodeは persistent と見なされます。

構文

create/path/data

サンプル

create/FirstZnode “Myfirstzookeeper-app”

出力

[zk: localhost:2181(CONNECTED) 0] create/FirstZnode “Myfirstzookeeper-app”
Created/FirstZnode
*sequential znode* を作成するには、以下に示すように *-s flag* を追加します。

構文

create -s/path/data

サンプル

create -s/FirstZnode second-data

出力

[zk: localhost:2181(CONNECTED) 2] create -s/FirstZnode “second-data”
Created/FirstZnode0000000023
*Ephemeral Znode* を作成するには、以下に示すように* -eフラグ*を追加します。

構文

create -e/path/data

サンプル

create -e/SecondZnode “Ephemeral-data”

出力

[zk: localhost:2181(CONNECTED) 2] create -e/SecondZnode “Ephemeral-data”
Created/SecondZnode

クライアント接続が失われると、一時znodeが削除されることに注意してください。 ZooKeeper CLIを終了してから、CLIを再度開くことで試すことができます。

データを取得する

znodeの関連データと指定されたznodeのメタデータを返します。 データが最後に変更された日時、変更された場所、データに関する情報などの情報を取得します。 このCLIは、ウォッチを割り当ててデータに関する通知を表示するためにも使用されます。

構文

get/path

サンプル

get/FirstZnode

出力

[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

順次znodeにアクセスするには、znodeのフルパスを入力する必要があります。

サンプル

get/FirstZnode0000000023

出力

[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

時計

ウォッチは、指定されたznodeまたはznodeの子データが変更されたときに通知を表示します。 get コマンドでのみ watch を設定できます。

構文

get/path [watch] 1

サンプル

get/FirstZnode 1

出力

[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

出力は通常の get コマンドに似ていますが、バックグラウンドでznodeの変更を待機します。 <ここから始めます>

データを設定する

指定されたznodeのデータを設定します。 このセット操作を終了すると、 get CLIコマンドを使用してデータを確認できます。

構文

set/path/data

サンプル

set/SecondZnode Data-updated

出力

[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

(前のコマンドのように) get コマンドで watch オプションを割り当てた場合、出力は次のようになります-

出力

[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

子/サブノードを作成

子の作成は、新しいznodeの作成に似ています。 唯一の違いは、子znodeのパスにも親パスがあることです。

構文

create/parent/path/subnode/path/data

サンプル

create/FirstZnode/Child1 firstchildren

出力

[zk: localhost:2181(CONNECTED) 16] create/FirstZnode/Child1 “firstchildren”
created/FirstZnode/Child1
[zk: localhost:2181(CONNECTED) 17] create/FirstZnode/Child2 “secondchildren”
created/FirstZnode/Child2

子のリスト

このコマンドは、znodeの children をリストおよび表示するために使用されます。

構文

ls/path

サンプル

ls/MyFirstZnode

出力

[zk: localhost:2181(CONNECTED) 2] ls/MyFirstZnode
[mysecondsubnode, myfirstsubnode]

ステータスを確認

*Status* は、指定されたznodeのメタデータを記述します。 タイムスタンプ、バージョン番号、ACL、データ長、子znodeなどの詳細が含まれます。

構文

stat/path

サンプル

stat/FirstZnode

出力

[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

Znodeを削除する

指定されたznodeおよびそのすべての子を再帰的に削除します。 これは、そのようなznodeが使用可能な場合にのみ発生します。

構文

rmr/path

サンプル

rmr/FirstZnode

出力

[zk: localhost:2181(CONNECTED) 10] rmr/FirstZnode
[zk: localhost:2181(CONNECTED) 11] get/FirstZnode
Node does not exist:/FirstZnode

削除*(delete/path)コマンドは *remove コマンドに似ていますが、子のないznodeでのみ機能するという点が異なります。

Zookeeper-API

ZooKeeperには、JavaとCの公式APIバインディングがあります。 ZooKeeperコミュニティは、ほとんどの言語(.NET、pythonなど)に非公式のAPIを提供しています。 ZooKeeper APIを使用すると、アプリケーションは、ZooKeeperアンサンブルとの接続、対話、データの操作、調整、および最終的な切断を行うことができます。

ZooKeeper APIには、ZooKeeperアンサンブルのすべての機能をシンプルかつ安全な方法で取得するための豊富な機能セットがあります。 ZooKeeper APIは、同期メソッドと非同期メソッドの両方を提供します。

ZooKeeperアンサンブルとZooKeeper APIは、あらゆる面でお互いを完全に補完し、開発者に大きなメリットをもたらします。 この章では、Javaバインディングについて説明します。

ZooKeeper APIの基本

ZooKeeperアンサンブルと対話するアプリケーションは、 ZooKeeper Client または単に Client と呼ばれます。

ZnodeはZooKeeperアンサンブルのコアコンポーネントであり、ZooKeeper APIはZooKeeperアンサンブルでznodeのすべての詳細を操作するためのメソッドの小さなセットを提供します。

クライアントは、以下に示す手順に従って、ZooKeeperアンサンブルと明確かつクリーンな対話を行う必要があります。

  • ZooKeeperアンサンブルに接続します。 ZooKeeperアンサンブルは、クライアントにセッションIDを割り当てます。
  • サーバーにハートビートを定期的に送信します。 そうでない場合、ZooKeeperアンサンブルはセッションIDを失効させ、クライアントは再接続する必要があります。
  • セッションIDがアクティブである限り、znodeを取得/設定します。
  • すべてのタスクが完了したら、ZooKeeperアンサンブルから切断します。 クライアントが長時間アクティブでない場合、ZooKeeperアンサンブルは自動的にクライアントを切断します。

Javaバインディング

この章で、ZooKeeper APIの最も重要なセットを理解しましょう。 ZooKeeper APIの中心部分は* ZooKeeperクラス*です。 ZooKeeperアンサンブルをコンストラクターで接続するオプションを提供し、次のメソッドがあります-

  • connect -ZooKeeperアンサンブルに接続します
  • create -znodeを作成します
  • exists -znodeが存在するかどうかとその情報を確認します
  • getData -特定のznodeからデータを取得する
  • setData -特定のznodeにデータを設定します
  • getChildren -特定のznodeで利用可能なすべてのサブノードを取得します
  • delete -特定のznodeとそのすべての子を取得します
  • close -接続を閉じる

ZooKeeper Ensembleに接続する

ZooKeeperクラスは、コンストラクターを介して接続機能を提供します。 コンストラクタの署名は次のとおりです-

ZooKeeper(String connectionString, int sessionTimeout, Watcher watcher)

どこで、

  • connectionString -ZooKeeperアンサンブルホスト。
  • sessionTimeout -ミリ秒単位のセッションタイムアウト。
  • watcher -「Watcher」インターフェースを実装するオブジェクト。 ZooKeeperアンサンブルは、ウォッチャーオブジェクトを介して接続ステータスを返します。

新しいヘルパークラス ZooKeeperConnection を作成し、メソッド connect を追加しましょう。 connect メソッドは、ZooKeeperオブジェクトを作成し、ZooKeeperアンサンブルに接続して、オブジェクトを返します。

ここで、 CountDownLatch は、クライアントがZooKeeperアンサンブルに接続するまでメインプロセスを停止(待機)するために使用されます。

ZooKeeperアンサンブルは、* Watcherコールバック*を介して接続ステータスを返信します。 クライアントがZooKeeperアンサンブルに接続すると、Watcherコールバックが呼び出され、Watcherコールバックは、 CountDownLatchcountDown メソッドを呼び出して、メインプロセスでロック、 await を解放します。

ZooKeeperアンサンブルに接続するための完全なコードは次のとおりです。

コーディング: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();
   }
}

上記のコードを保存すると、次のセクションでZooKeeperアンサンブルを接続するために使用されます。

Znodeを作成する

ZooKeeperクラスは、ZooKeeperアンサンブルに新しいznodeを作成する* createメソッド*を提供します。 *作成*メソッドの署名は次のとおりです-

create(String path, byte[] data, List<ACL> acl, CreateMode createMode)

どこで、

  • path -Znodeパス。 たとえば、/myapp1、/myapp2、/myapp1/mydata1、myapp2/mydata1/myanothersubdata
  • data -指定されたznodeパスに保存するデータ
  • acl -作成されるノードのアクセス制御リスト。 ZooKeeper APIは、基本的なACLリストの一部を取得するための静的インターフェイス ZooDefs.Ids を提供します。 たとえば、ZooDefs.Ids.OPEN_ACL_UNSAFEは、開いているznodeのaclのリストを返します。
  • createMode -一時的、シーケンシャル、またはその両方のノードのタイプ。 これは enum です。

ZooKeeper APIの*作成*機能を確認するために、新しいJavaアプリケーションを作成しましょう。 ファイル ZKCreate.java を作成します。 mainメソッドで、タイプ ZooKeeperConnection のオブジェクトを作成し、 connect メソッドを呼び出してZooKeeperアンサンブルに接続します。

connectメソッドは、ZooKeeperオブジェクト zk を返します。 次に、カスタム path および data を使用して zk オブジェクトの create メソッドを呼び出します。

znodeを作成するための完全なプログラムコードは次のとおりです-

コーディング: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
      }
   }
}

アプリケーションがコンパイルおよび実行されると、指定されたデータを持つznodeがZooKeeperアンサンブルに作成されます。 ZooKeeper CLI zkCli.sh を使用して確認できます。

cd/path/to/zookeeper
bin/zkCli.sh
>>> get/MyFirstZnode

存在する-Znodeの存在を確認する

ZooKeeperクラスは、znodeの存在を確認する* existsメソッド*を提供します。 指定されたznodeが存在する場合、znodeのメタデータを返します。 *存在する*メソッドの署名は次のとおりです-

exists(String path, boolean watcher)

どこで、

  • path -Znodeパス
  • watcher -指定されたznodeを監視するかどうかを指定するブール値

ZooKeeper APIの「存在する」機能を確認する新しいJavaアプリケーションを作成しましょう。 ファイル_“ ZKExists.java” を作成します。 メインメソッドで、“ ZooKeeperConnection” オブジェクトを使用してZooKeeperオブジェクト“ zk” を作成します。 次に、カスタム“パス” “ zk” オブジェクトの“ exists” _メソッドを呼び出します。 完全なリストは次のとおりです-

コーディング: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
      }
   }
}

アプリケーションをコンパイルして実行すると、次の出力が得られます。

Node exists and the node version is 1.

getDataメソッド

ZooKeeperクラスは、指定されたznodeに添付されたデータとそのステータスを取得する getData メソッドを提供します。 getData メソッドのシグネチャは次のとおりです-

getData(String path, Watcher watcher, Stat stat)

どこで、

  • path -Znodeパス。
  • watcher -タイプ Watcher のコールバック関数。 ZooKeeperアンサンブルは、指定されたznodeのデータが変更されると、Watcherコールバックを介して通知します。 これは1回限りの通知です。
  • stat -znodeのメタデータを返します。

ZooKeeper APIの getData 機能を理解するために、新しいJavaアプリケーションを作成しましょう。 ファイル ZKGetData.java を作成します。 mainメソッドで、 ZooKeeperConnection オブジェクトを使用してZooKeeperオブジェクト zk を作成します。 次に、カスタムパスを使用してzkオブジェクトの getData メソッドを呼び出します。

指定されたノードからデータを取得するための完全なプログラムコードは次のとおりです-

コーディング: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());
      }
   }
}

アプリケーションをコンパイルして実行すると、次の出力が得られます

My first zookeeper app

そして、アプリケーションは、ZooKeeperアンサンブルからのさらなる通知を待ちます。 ZooKeeper CLI zkCli.sh を使用して、指定したznodeのデータを変更します。

cd/path/to/zookeeper
bin/zkCli.sh
>>> set/MyFirstZnode Hello

これで、アプリケーションは次の出力を出力して終了します。

Hello

setDataメソッド

ZooKeeperクラスは、指定されたznodeに添付されたデータを変更するための setData メソッドを提供します。 setData メソッドのシグネチャは次のとおりです-

setData(String path, byte[] data, int version)

どこで、

  • path -Znodeパス
  • data -指定されたznodeパスに保存するデータ。
  • version -znodeの現在のバージョン。 ZooKeeperは、データが変更されるたびにznodeのバージョン番号を更新します。

ZooKeeper APIの setData 機能を理解するために、新しいJavaアプリケーションを作成しましょう。 ファイル ZKSetData.java を作成します。 mainメソッドで、 ZooKeeperConnection オブジェクトを使用してZooKeeperオブジェクト zk を作成します。 次に、指定されたパス、新しいデータ、ノードのバージョンを使用して、 zk オブジェクトの setData メソッドを呼び出します。

以下は、指定されたznodeに添付されたデータを変更するための完全なプログラムコードです。

コード: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());
      }
   }
}

アプリケーションをコンパイルして実行すると、指定したznodeのデータが変更され、ZooKeeper CLIの zkCli.sh を使用して確認できます。

cd/path/to/zookeeper
bin/zkCli.sh
>>> get/MyFirstZnode

getChildrenメソッド

ZooKeeperクラスは、特定のznodeのすべてのサブノードを取得する getChildren メソッドを提供します。 getChildren メソッドのシグネチャは次のとおりです-

getChildren(String path, Watcher watcher)

どこで、

  • path -Znodeパス。
  • watcher -タイプ「Watcher」のコールバック関数。 ZooKeeperアンサンブルは、指定されたznodeが削除されるか、znodeの下の子が作成/削除されると通知します。 これは1回限りの通知です。

コーディング: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());
      }

   }

}

プログラムを実行する前に、ZooKeeper CLI zkCli.sh を使用して、 /MyFirstZnode の2つのサブノードを作成します。

cd/path/to/zookeeper
bin/zkCli.sh
>>> create/MyFirstZnode/myfirstsubnode Hi
>>> create/MyFirstZnode/mysecondsubmode Hi

これで、プログラムをコンパイルして実行すると、上記で作成したznodeが出力されます。

myfirstsubnode
mysecondsubnode

Znodeを削除する

ZooKeeperクラスは、指定されたznodeを削除する delete メソッドを提供します。 *削除*メソッドの署名は次のとおりです-

delete(String path, int version)

どこで、

  • path -Znodeパス。
  • version -znodeの現在のバージョン。

ZooKeeper APIの*削除*機能を理解するために、新しいJavaアプリケーションを作成しましょう。 ファイル ZKDelete.java を作成します。 mainメソッドで、 ZooKeeperConnection オブジェクトを使用してZooKeeperオブジェクト zk を作成します。 次に、指定された path とノードのバージョンで zk オブジェクトの delete メソッドを呼び出します。

znodeを削除するための完全なプログラムコードは次のとおりです-

コーディング: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-アプリケーション

Zookeeperは、分散環境に柔軟な調整インフラストラクチャを提供します。 ZooKeeperフレームワークは、今日の最高の産業用アプリケーションの多くをサポートしています。 この章では、ZooKeeperの最も注目すべきアプリケーションのいくつかについて説明します。

Yahoo!

ZooKeeperフレームワークは元々「Yahoo!」で構築されました。 適切に設計された分散アプリケーションは、データの透過性、パフォーマンスの向上、堅牢性、一元化された構成、調整などの要件を満たす必要があります。 そのため、これらの要件を満たすようにZooKeeperフレームワークを設計しました。

Apache Hadoop

Apache Hadoopは、ビッグデータ業界の成長を支える原動力です。 Hadoopは、構成の管理と調整をZooKeeperに依存しています。 HadoopでのZooKeeperの役割を理解するシナリオを考えてみましょう。

  • Hadoopクラスタ*が* 100以上のコモディティサーバー*をブリッジすると仮定します。 そのため、調整およびネーミングサービスが必要です。 多数のノードの計算が関係するため、各ノードは相互に同期し、サービスにアクセスする場所と、それらの構成方法を知る必要があります。 この時点で、Hadoopクラスターにはクロスノードサービスが必要です。 ZooKeeperは、*ノード間同期*の機能を提供し、Hadoopプロジェクト全体のタスクがシリアル化および同期されるようにします。

複数のZooKeeperサーバーが大規模なHadoopクラスターをサポートします。 各クライアントマシンは、ZooKeeperサーバーの1つと通信して、同期情報を取得および更新します。 リアルタイムの例のいくつかは-

  • ヒトゲノムプロジェクト-ヒトゲノムプロジェクトにはテラバイトのデータが含まれています。 Hadoop MapReduceフレームワークを使用して、データセットを分析し、人間開発の興味深い事実を見つけることができます。
  • Healthcare -病院は、通常テラバイト単位の膨大な患者医療記録を保存、取得、分析できます。

Apache HBase

Apache HBaseは、大規模なデータセットのリアルタイムの読み取り/書き込みアクセスに使用されるオープンソースの分散型NoSQLデータベースであり、HDFS上で実行されます。 HBaseは、*マスター-スレーブアーキテクチャ*に従い、HBaseマスターがすべてのスレーブを管理します。 スレーブは*リージョンサーバー*と呼ばれます。

HBase分散アプリケーションのインストールは、実行中のZooKeeperクラスターに依存しています。 Apache HBaseは、ZooKeeperを使用して、*集中構成管理*および*分散ミューテックス*メカニズムの助けを借りて、マスターサーバーおよびリージョンサーバー全体の分散データのステータスを追跡します。 HBaseのユースケースの一部を次に示します-

  • Telecom -テレコム業界は数十億のモバイルコールレコード(約30 TB/月)を保存しており、これらのコールレコードにリアルタイムでアクセスすることは大きなタスクになります。 HBaseを使用すると、すべてのレコードをリアルタイムで簡単かつ効率的に処理できます。
  • ソーシャルネットワーク-通信業界と同様に、Twitter、LinkedIn、Facebookなどのサイトは、ユーザーが作成した投稿を通じて大量のデータを受け取ります。 HBaseを使用して、最近の傾向やその他の興味深い事実を見つけることができます。

Apache Solr

Apache Solrは、Javaで書かれた高速でオープンソースの検索プラットフォームです。 これは、非常に高速でフォールトトレラントな分散検索エンジンです。 Lucene の上に構築された、高性能でフル機能のテキスト検索エンジンです。

Solrは、構成管理、リーダー選出、ノード管理、データのロックおよび同期化など、ZooKeeperのすべての機能を広範囲に使用します。

Solrには、 indexingsearching の2つの異なる部分があります。 インデックス付けは、後で検索できるように、データを適切な形式で保存するプロセスです。 Solrは、ZooKeeperを使用して、複数ノードのデータのインデックス作成と複数ノードからの検索の両方を行います。 ZooKeeperは次の機能を提供します-

  • 必要に応じてノードを追加/削除します
  • ノード間のデータの複製と、その後のデータ損失の最小化
  • 複数のノード間でデータを共有し、検索結果を高速化するために複数のノードから検索する

Apache Solrのユースケースには、eコマース、求人検索などが含まれます。