1. HBaseの概要
- HBase は、HDFS 上に構築された分散カラム ストレージ システムです。
- HBase は Apache Hadoop エコシステムの重要なメンバーであり、主に大規模な構造化データ ストレージに使用されます。
- 論理的には、HBase はデータをテーブル、行、列に格納します。
HDFS はバッチ処理シナリオに適しています。
データのランダム検索はサポートされていません。
増分データ処理には適していません
。データの更新はサポートされていません。
HBase テーブルの特徴:
大
:テーブルには数十億の行と数百万の列を含めることができます
无模式
。各行には並べ替え可能な主キーと任意の数の列があります。列は必要に応じて動的に追加でき、同じテーブル内の異なる行にはまったく異なる列を含めることができます。:列
面向列
(ファミリ) 指向のストレージと権限制御、列 (ファミリ) に依存しない取得;
稀疏
: 空 (null) 列の場合、ストレージ領域を占有せず、テーブルを非常にまばらになるように設計できます; :
数据多版本
各ユニット内のデータを複数のバージョン。デフォルトでバージョン番号が自動的に割り当てられます。これは、セルが挿入されたときのタイムスタンプです。
数据类型单一
:Hbase のデータはすべて文字列であり、型はありません。
行ストレージと列ストレージの比較:
従来の行データベース:
- データは行ごとに保存されます
- インデックスのないクエリは大量の I/O を使用します
- インデックスとマテリアライズド ビューの構築には多くの時間とリソースがかかります
- クエリのニーズに対応するには、パフォーマンス要件を満たすためにデータベースを大規模に拡張する必要があります。
カラムデータベース:
- データは列に格納されます - 各列は個別に格納されます
- データはインデックスです
- クエリに関係する列にのみアクセスします - システム I/O を大幅に削減します
- 各列はスレッドによって処理されます - クエリの同時処理
- 一貫したデータ型と同様のデータ特性 - 効率的な圧縮
2. HBase データモデル
HBase是基于Google BigTable模型开发的,典型的key/value系统.
- HBase スキーマは複数のテーブルを持つことができ、各テーブルは複数の列ファミリーで構成できます。
- HBase は動的列を持つことができます。列名はセル内でエンコードされており、異なるセルには異なる列を含めることができます。
行キーと列ファミリー
Row Key
: テーブル内の各レコードの「主キー」。素早い検索が容易になります。各行の行キーは一意である必要があり、昇順に挿入する必要はありません。: 名前があり、1 つ以上の関連列が含まれます
Column Family
。
Column
:特定の列ファミリーに属し、列に含まれます familyName:columnName
Version Number
: 各行キーに一意、デフォルト値 -> システム タイムスタンプ、タイプ Long
Value (Cell)
: バイト配列
Hbase によってサポートされる操作
- すべての操作は行キーに基づいています。
- CRUD (作成、読み取り、更新、削除) とスキャンをサポートします。
- 単一行の操作: Put、Get、Scan
- 複数行の操作: Scan、MultiPut
- 組み込みの結合操作はなく、MapReduce を使用して解決できます。
3. HBase 物理モデル
- 各列ファミリーは HDFS 上の個別のファイルに保存されます。
- キーとバージョン番号は、各列ファミリーに 1 つのコピーがあります。
- Null値は保存されません。
- HBase は、各値、つまり <キー、列ファミリー、列名、タイムスタンプ> のマルチレベル インデックスを維持します。
- 1. テーブル内のすべての行は、行キーに従って辞書順に配置されます。
- 2. テーブルは行方向に複数の領域に分割されます。
- 3. 領域はサイズに応じて分割されます。各テーブルは 1 つの領域から始まります。データが増加するにつれて、領域は増加し続けます。しきい値まで増加すると、領域は 2 つの新しい領域に分割され、その後、地域はますます増えています。
- 4. リージョンは、HBase の分散ストレージと負荷分散の最小単位です。異なるリージョンは異なるリージョンサーバーに分散されます。
- 5、
Region虽然是分布式存储的最小单元
、ただし、ストレージの最小単位ではありません (数据存储的最小单元是cell
)。
- リージョンは 1 つ以上のストアで構成され、各ストアには列ファミリーが格納されます。
- 各ストアは、1 つの memStore と 0 個以上の StoreFiles で構成されます。
- memStore はメモリに保存され、StoreFile は HDFS に保存されます。
4. HBaseの基本構造
HBaseの基本コンポーネント
クライアント:
- HBase にアクセスするためのインターフェイスが含まれており、HBase へのアクセスを高速化するためにキャッシュを維持します。
飼育員:
- クラスター内には常にマスターが 1 つだけ存在するようにする
- すべてのリージョンのアドレス指定エントリを保存する
- リージョンサーバーのオンラインおよびオフライン情報をリアルタイムで監視します。そしてリアルタイムでマスターに通知します
- HBase スキーマとテーブルのメタデータを保存する
マスター:
- リージョンをリージョンサーバーに割り当てる
- リージョンサーバーの負荷分散を担当します
- 障害が発生したリージョン サーバーを検出し、そのサーバー上でリージョンを再割り当てします。
- ユーザーによるテーブルの追加、削除、変更、確認などの操作を管理します
地域サーバー:
- リージョンサーバーはリージョンを維持し、これらのリージョンへの IO リクエストを処理します。
- リージョン サーバーは、操作中に大きくなりすぎたリージョンを分割する役割を果たします。
動物園飼育員の役割
HBase は ZooKeeper に依存しており、
デフォルトでは、HBase は ZooKeeper インスタンスを管理します。たとえば、ZooKeeper を起動または停止すると、
マスターとリージョンサーバーは起動時に ZooKeeper に登録されます。Zookeeper
の導入により、マスターは単一障害点ではなくなりました。
ログ先行書き込み(WAL)
HBase フォールト トレランス
マスター フォールト トレランス: Zookeeper が新しいマスターを再選択します
- マスターを使用しないプロセスでも、データの読み取りは通常どおり続行されます。
- マスターのないプロセスでは、領域分割、負荷分散などが実行できません。
RegionalServer フォールト トレランス: 一定時間内にハートビートが発生しない場合、定期的にハートビートを Zookeeper に報告します。
- マスターは、RegionServer 上のリージョンを他のリージョンサーバーに再配布します。
- 障害が発生したサーバー上の「先行書き込み」ログはメイン サーバーによって分割され、新しいリージョン サーバーに送信されます。
Zookeeper の耐障害性: Zookeeper は信頼できるサービスです
- 通常、3 つまたは 5 つの Zookeeper インスタンスが構成されます。
Region定位
: RegionServer を探しています -> (ZooKeeper、-ROOT-(単一リージョン)、.META.、ユーザー テーブル)
-根-
- テーブルには、.META. テーブルが配置されているリージョンのリストが含まれています。テーブルにはリージョンが 1 つだけ含まれます。
- -ROOT- テーブルの場所は Zookeeper に記録されます。
.メタ。
- このテーブルには、すべてのユーザー空間領域のリストと、RegionServer のサーバー アドレスが含まれています。