Hbaseについてのそれらのことについて話します

インタビュー指向のブログは、Q / Aスタイルで提示されます。


質問1:Hbaseを簡単に紹介しますか?

回答1:

Hbaseは、大量の安価なマシンを通じて大量のデータの高速ストレージと読み取りを解決する分散データベースソリューションです。

baseは、分散型の列指向のオープンソースデータベースです(実際には、列ファミリー向けです)。HDFSはHbaseに信頼できる低レベルのデータストレージサービスを提供し、MapReduceはHbaseに高性能コンピューティング機能を提供し、ZookeeperはHbaseに安定したサービスとフェイルオーバーメカニズムを提供します。したがって、Hbaseは高速ストレージであり、大量の安価なマシンを介して大量のデータを読み取る分散データベースソリューション。

HBaseカラムストレージ

Hbaseは列ストレージを使用します。列アプローチの重要な利点の1つは、クエリの選択ルールが列によって定義されるため、データベース全体に自動的にインデックスが作成されることです。
ここに画像の説明を挿入

ここでの列ストレージは実際には列ファミリーのストレージを指し、Hbaseは列ファミリーに従ってデータを格納します。列ファミリーの下には多くの列が存在する可能性があり、列ファミリーはテーブルの作成時に指定する必要があります。Hbase列ファミリーの理解を深めるために、以下は単純なリレーショナルデータベーステーブルとHbaseデータベーステーブルです。

ここに画像の説明を挿入
ここに画像の説明を挿入

Hbaseのコアコンセプト

1、列ファミリー列族

列ファミリーは列ファミリーとも呼ばれます。Hbaseはデータストレージを列ファミリーごとに分割します。列ファミリーには以下の列をいくつでも含めることができ、柔軟なデータアクセスを実現できます。Hbaseテーブルを作成するときは、列ファミリーを指定する必要があります。リレーショナルデータベースの作成時に特定の列を指定する必要があるのと同じように。Hbaseの列ファミリーが多いほど良いです。公式の推奨事項は、列ファミリーは3以下にすることです。私たちが使用するシナリオは、通常1カラムファミリです。

2. Rowkey(Rowkeyクエリ、Rowkey範囲スキャン、全表スキャン)

Rowkeyの概念はmysqlの主キーとまったく同じです。HbaseはRowkeyを使用してデータの行を一意に区別します。Hbaseは3つのクエリメソッドのみをサポートします。Rowkeyに基づく単一行クエリ、Rowkeyに基づく範囲スキャン、およびフルテーブルスキャンです。

3.リージョンパーティション

リージョン:リージョンの概念は、リレーショナルデータベースのパーティショニングまたはシャーディングに似ています。Hbaseは、Rowkeyのさまざまな範囲に基づいて、大きなテーブルのデータをさまざまなリージョンに割り当てます。各リージョンは、特定の範囲のデータアクセスとストレージを担当します。このように、巨大なテーブルであっても、別のリージョンにカットされるため、アクセス遅延が非常に低くなります。

4. TimeStampの複数のバージョン

TimeStampは、Hbaseの複数のバージョンを実現するための鍵です。Hbaseで異なるタイムスタンプを使用して、同じ行キー行に対応するデータの異なるバージョンを識別します。データを書き込むときに、ユーザーが対応するタイムスタンプを指定しない場合、Hbaseは自動的にタイムスタンプを追加し、タイムスタンプとサーバー時間は同じままです。
HBaseの、同じデータが、タイムスタンプのrowKey逆に配置されています。デフォルトでは、最新バージョンが照会され、ユーザーは指定されたタイムスタンプの値で古いバージョンのデータを読み取ることができます。


質問2:Hbaseのコアアーキテクチャについて話しますか?

回答2:

Hbaseは、クライアント、Zookeeper、マスター、HRegionServer、HDFSなどのいくつかのコンポーネントで構成されています。

Hbaseアーキテクチャを以下に示します。

ここに画像の説明を挿入

1. Hbaseコンポーネント:クライアント

クライアントには、
Hbase アクセスするためのインターフェースが含まれていますさらに、クライアントは、cache.META。メタデータ情報など、Hbaseアクセスを高速化するために対応するキャッシュも維持します。

2. Hbaseコンポーネント:Zookeeper

HbaseはZookeeperを使用して、マスターの高可用性、RegionServerモニタリング、メタデータエントリ、
クラスター構成のメンテナンスを行います。具体的な作業は次のとおりです。

  1. Zookeeperを使用して、クラスター内で実行されているマスターが1つだけであることを確認します。マスターが異常な場合
    、競合メカニズムを通じて新しいマスターが生成され、サービスを提供します
  2. Zookeeperを使用してRegionServerのステータスを監視します。RegionSevrerが異常な場合は
    、コールバックを通じてマスターRegionServerに上限と下限を通知します
  3. Zookeeperを介してメタデータを保管するための統合エントリー・アドレス。

3. Hbaseコンポーネント:Hmaster

マスターノードの主な役割は次のとおりです。

  1. RegionServerにリージョンを割り当てる
  2. クラスタ全体の負荷分散を維持する
  3. クラスタのメタデータ情報を維持して、失敗した領域を検出し、失敗した領域を通常のRegionServerに割り当てます。RegionSeverが失敗した場合は、対応するHlog分割を調整します。

4. Hbaseコンポーネント:HregionServer

HregionServerは、ユーザーの読み取りおよび書き込みリクエストに直接接続され、実際の「作業」ノードです。その機能は次のように要約されます。

  1. マスターによって割り当てられたリージョンを管理する
  2. クライアントからの読み取りおよび書き込み要求を処理する
  3. 基になるHDFSとの対話、HDFSへのデータの保存を担当
  4. リージョンが大きくなった後の分割を担当
  5. Storefileのマージを担当

5. Hbaseコンポーネント:HDFS

HDFSは、Hbaseに究極の低レベルデータストレージサービスを提供し、Hbaseに高可用性を提供します(Hlogは
HDFSに保存されます)。

6.地域アドレッシングモード(zookeeper .META経由)

以下に示すように、領域アドレッシングモード:
ここに画像の説明を挿入

ステップ1:クライアントはZKに、.META。が配置されているRegionServerのアドレスの取得を要求します。
ステップ2:クライアントは、.META。が配置されているRegionServerに、アクセスデータが
配置されているRegionServerのアドレスを取得するように要求します。クライアントは、.META の関連情報をキャッシュします。次のクイックアクセスのために。
ステップ3:クライアントは、必要なデータを取得するために、データが配置されているRegionServerを要求します。


質問3:Hbaseの書き込みプロセスとは何ですか?

Answer3:

以下に示すようなHbase書き込みプロセス:

ここに画像の説明を挿入

上の写真からわかるように、大気への3つのステップがあります。

ステップ1:RegionServer
クライアントを取得して、データが書き込まれるリージョンが配置されているRegionServerを取得します。

ステップ2:Hlogの書き込み要求Hlogの書き込み
要求HlogはHDFSに格納されます。RegionServerが異常な場合は、Hlogを使用してデータを回復する必要があります。

ステップ3:MemStoreの書き込み
要求MemStoreの書き込み要求。Hlogの書き込みとMemStoreの書き込みが成功した場合にのみ、要求の書き込みが完了します。MemStoreは徐々にHDFSにフラッシュします。


質問4:Hbaseでの書き込み時にMemStoreの点滅をトリガーするシーンを紹介しますか?

Answer4:

Hbaseの書き込みパフォーマンスを向上させるために、書き込みリクエストがMemStoreに書き込まれた場合、すぐにはフラッシュされません。代わりに、ブラシ操作を実行するために一定の時間待機します。これは、次のシナリオに要約されています。

1.グローバルメモリ制御
このグローバルパラメータは、全体的なメモリ使用量を制御するために使用されます。すべてのmemstoreがヒープ全体の最大の割合を占める
と、フラッシュ操作がトリガーされます。このパラメーターはhbase.regionserver.global.memstore.upperLimitで、デフォルトではヒープメモリ全体の40%です。ただし、これはグローバルメモリによってトリガーされるフラッシュ操作がすべてのMemStoreを失うことを意味するのではなく、別のパラメーターhbase.regionserver.global.memstore.lowerLimitによって制御されます。デフォルトでは、ヒープメモリ全体の35%になります。ヒープメモリ全体の35%を占めるすべてのmemstoreにフラッシュする場合は、フラッシュを停止します。これは主に、ビジネスへのフラッシュディスクの影響を軽減し、システム負荷を平滑化する目的を達成するためです。

2. MemStoreが上限に達するMemStore
のサイズがhbase.hregion.memstore.flush.sizeのサイズに達すると、
フラッシュディスクがトリガーされ、デフォルトのサイズは128Mです。

3. RegionServerのHlogの数が上限に達しました。
前述のとおり、Hbaseデータの整合性を確保するために、Hlogが多すぎると、障害回復時間が長くなりすぎて、HbaseがHlogの最大数を制限します。Hlogの最大数に達すると、ディスクは強制的にスワイプされます。このパラメーターはhase.regionserver.max.logsで、デフォルトは32です。

4.手動トリガー
hbaseシェルまたはJava APIを使用して、フラッシュ操作を手動でトリガーできます。

5. RegionServerをトリガーしてオフにする
通常、RegionServerをトリガーしてフラッシュ操作をトリガーしますすべてのデータがフラッシュされた後、Hlogを使用し
てデータ回復する必要はありません

6. HLOGを使用してデータを復元した後、リージョンがトリガーされ
ます。RegionServerに障害が発生すると、その上のリージョンが他の通常のリージョンサーバーに移行されます。リージョンのデータが復元された後、ブラシがトリガーされます。ビジネスアクセスを提供します。


質問5:HbaseとCassandraの違いについて話してください。

回答5:

テーブルの概要(HBaseとCassandra):

HBase カサンドラ
言語 ジャワ ジャワ
出発点 BigTable BigTableとDynamo
ライセンス Apache Apache
プロトコル HTTP / REST(Thriftも) カスタム、バイナリ(Thrift)
データ配信 テーブルは複数のリージョンに分割され、異なるリージョンサーバーに存在します 一貫性のあるハッシュの改善(仮想ノード)
ストレージターゲット 大きなファイル 小さなファイル
一貫性 強い整合性 最終的な整合性、Quorum NRW戦略
アーキテクチャー マスター/スレーブ p2p
高可用性 NameNodeはHDFSの単一障害点です P2Pと分散型設計、単一障害点なし
スケーラビリティ リージョンサーバーの拡張。マスターに自身を公開することにより、マスターはリージョンを均等に分散します。 容量を拡張するには、ハッシュリング上の複数のノード間のデータ分散を調整する必要があります
読み取りおよび書き込みパフォーマンス データの読み取りと書き込みのポジショニングは、ネットワークRPCを最大6回通過しなければならず、パフォーマンスが低い場合があります。 データの読み取りと書き込みのポジショニングは非常に高速です
データ競合の処理 楽観的同時実行制御 ベクトル時計
一時的な障害処理 リージョンサーバーがダウンし、HLogをやり直す データリターンメカニズム:ノードがダウンすると、ノードにハッシュされた新しいデータは、ヒント付きハンドオフのために自動的に次のノードにルーティングされます。ソースノードが復元された後、データはソースノードに戻されます。
永続的な障害回復 リージョンサーバーが復元され、マスターがリージョンを再割り当てします マークルハッシュツリー。ゴシッププロトコルを介してマークルツリーを同期し、クラスターノード間のデータの一貫性を維持します。
メンバーのコミュニケーションとエラー検出 飼育係 ゴシップに基づく
キャップ 1.強い整合性、0データ損失。2.低可用性。3.便利な拡張。 1.一貫性が弱いと、データが失われる可能性があります。2.高可用性。3.便利な拡張。
207の元の記事を公開 80を賞賛 120,000ビュー

おすすめ

転載: blog.csdn.net/qq_36963950/article/details/105336095