記事ディレクトリ
インタビュー指向のブログは、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モニタリング、メタデータエントリ、
クラスター構成のメンテナンスを行います。具体的な作業は次のとおりです。
- Zookeeperを使用して、クラスター内で実行されているマスターが1つだけであることを確認します。マスターが異常な場合
、競合メカニズムを通じて新しいマスターが生成され、サービスを提供します - Zookeeperを使用してRegionServerのステータスを監視します。RegionSevrerが異常な場合は
、コールバックを通じてマスターRegionServerに上限と下限を通知します - Zookeeperを介してメタデータを保管するための統合エントリー・アドレス。
3. Hbaseコンポーネント:Hmaster
マスターノードの主な役割は次のとおりです。
- RegionServerにリージョンを割り当てる
- クラスタ全体の負荷分散を維持する
- クラスタのメタデータ情報を維持して、失敗した領域を検出し、失敗した領域を通常のRegionServerに割り当てます。RegionSeverが失敗した場合は、対応するHlog分割を調整します。
4. Hbaseコンポーネント:HregionServer
HregionServerは、ユーザーの読み取りおよび書き込みリクエストに直接接続され、実際の「作業」ノードです。その機能は次のように要約されます。
- マスターによって割り当てられたリージョンを管理する
- クライアントからの読み取りおよび書き込み要求を処理する
- 基になるHDFSとの対話、HDFSへのデータの保存を担当
- リージョンが大きくなった後の分割を担当
- 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.便利な拡張。 |