HBase では、どのリージョン サーバーに行を書き込む必要があるかを put/get 操作でどのように判断しますか? 複数の行を読み取る場合、複数のリージョン サーバーにどのように接続し、結果を取得するか?
2 に答える
この動作はユーザーから抽象化されており、気にする必要はないため、質問は単なる好奇心だと思います。
HBase では、どのリージョン サーバーに行を書き込む必要があるかを put/get 操作でどのように判断しますか?
HBase クライアント HTable は、関心のある特定の行範囲を提供している RegionServer を見つける役割を果たします。これは、.META. および -ROOT- カタログ テーブル (TODO: Explain)。必要な領域を見つけた後、クライアントはその領域を提供する RegionServer に直接接続し (つまり、マスターを経由しません)、読み取りまたは書き込み要求を発行します。この情報はクライアントにキャッシュされるため、後続のリクエストでルックアップ プロセスを実行する必要がありません。マスター ロード バランサーによって、または RegionServer が停止したためにリージョンが再割り当てされた場合、クライアントはカタログ テーブルを再クエリして、ユーザー リージョンの新しい場所を特定します。
したがって、最初のステップは、メタとルートを調べてその場所を特定し、次にその領域サーバーに接続してその作業を行います。
複数の行を読み取る場合、複数のリージョン サーバーにどのように接続し、結果を取得するか?
一般に、HBase から読み取るには、スキャナーとgetsの 2 つの方法があります。
複数の取得を実行すると、それらはそれぞれ個別にそれらのレコードを個別にフェッチします。それらのそれぞれは、おそらく異なる地域サーバーに送信されます。
スキャナーは単に範囲の開始点を探し、そこから先に進みます。場合によっては、最後に到達したときに別のリージョン サーバーに移動する必要がありますが、クライアントはそれをバックグラウンドで処理します。複数の取得が一連の取得ではなくスキャンになるようにテーブルを設計する方法があれば、おそらくパフォーマンスが向上するはずです。