HBaseのシリーズ(二) - HBaseのシステムアーキテクチャおよびデータ構造

まず、基本的な概念

次のようにHBaseの表Aの典型的な表です。

1.1行キー(OKキー)

Row Keyこれは、レコードを取得するために使用されるプライマリキーです。あなただけの、次の三つの方法、HBaseのテーブル内のデータにアクセスします:

  • 指定することでRow Keyアクセスを。

  • 範囲指定された範囲内、すなわちアクセスラインを介して行アクセスキー。

  • 全表スキャン。

Row Keyにデータを格納する任意の文字列、できRow Key辞書順。それは以下の2点ことに留意すべきです。

  • Int結果1,10,100,11,12,13,14,15,16,17,18,19,2,20,21、...、9,91,92,93,94,95の辞書式ソートため、 、96,97,98,99。あなたが行キーとして整数文字列を使用する場合は、整数の自然な順序を維持するために、0行キーは埋めるために残されている必要があります。

  • アトミック(かかわらず、カラムを書く何の)場合に読み取りおよび書き込み操作の行。

1.2列ファミリー(列ファミリー)

各カラムHBaseのテーブルには、家族の行に属します。スキーマの列ファミリテーブルの一部であるテーブルを作成するときに、列ファミリを定義する必要があります。すべての列の列の家族がプレフィックスとして、列ファミリ名であり、例えばcourses:historycourses:mathに属しているcoursesこのコラムファミリー。

1.3列修飾子(列修飾子)

列の修飾子、あなたが特定の列名として理解することができ、例えばcourses:historycourses:mathに属しているcoursesこのコラムの家族、その列は修飾子ですhistorymath表は列修飾子スキーマの一部ではないことに注意してください、あなたは動的にデータを挿入する過程で列を作成することができます。

1.4カラム(列)

ある列と行グループ修飾子、によってHBaseのカラム:分離(コロン)、すなわち、完全な名前は、列として表現されなければなりません列族名 :列限定符

1.5セル

Cell行、列と行の組み合わせ修飾子基、およびタイムスタンプ値を含みます。あなたが指定された行と、リレーショナルデータベースの指定された列によって決定されたセルの等価として理解、しかし、異なるセルHBaseのデータの複数のバージョンであることができ、各データタイムスタンプのバージョンのその区別をします。

1.6タイムスタンプ(タイムスタンプ)

HBaseのによってrow keyおよびcolumn決定は、メモリセルと呼ばれますCellそれぞれがCell同じデータの複数のバージョンで保存されます。タイムスタンプのバージョンでインデックス付け、型は64ビット整数値のタイムスタンプで、スタンプが自動的にデータが割り当てることができた時間は、明示的に顧客によって指定することができ、HBaseのを書きます。それぞれにおいてCell、データの異なるバージョンは、逆タイムスタンプ、上部に、すなわち最新のデータに配置されています。

第二に、ストレージ構造

2.1地域

すべての行HBaseのテーブルに従ってRow Key辞書並び順。範囲によってHBaseのテーブルは(キー範囲行)キーの列は、複数のレベルに切断されるRegion一方は、Region開始キー及び終了キーの間のすべての行を含みます。

各テーブルには、唯一の開始であるRegionデータは、増加し続けて、Region時間のしきい値の増加が、とき、増加していきますRegionそれは新しい二つに分かれますRegion表の行に成長しているときに、より多くのがあるでしょうRegion

RegionHBaseのは、分散ストレージの負荷分散および最小単位これは、異なるがあることを意味Region異なるで配布することが可能Region Serverに。しかし、一つは、Region複数のサーバーに分割されていません。

2.2リージョンサーバー

Region ServerHDFSのデータノード上で実行されています。これは、次のコンポーネントがあります。

  • WAL(Write Ahead Log,预写日志):用于存储尚未进持久化存储的数据记录,以便在发生故障时进行恢复。
  • BlockCache:读缓存。它将频繁读取的数据存储在内存中,如果存储不足,它将按照 最近最少使用原则 清除多余的数据。
  • MemStore:写缓存。它存储尚未写入磁盘的新数据,并会在数据写入磁盘之前对其进行排序。每个 Region 上的每个列族都有一个 MemStore。
  • HFile :将行数据按照 Key\Values 的形式存储在文件系统上。

Region Server 存取一个子表时,会创建一个 Region 对象,然后对表的每个列族创建一个 Store 实例,每个 Store 会有 0 个或多个 StoreFile 与之对应,每个 StoreFile 则对应一个 HFile,HFile 就是实际存储在 HDFS 上的文件。

三、Hbase系统架构

3.1 系统架构

HBase 系统遵循 Master/Salve 架构,由三种不同类型的组件组成:

Zookeeper

  1. 保证任何时候,集群中只有一个 Master;

  2. 存贮所有 Region 的寻址入口;

  3. 实时监控 Region Server 的状态,将 Region Server 的上线和下线信息实时通知给 Master;

  4. 存储 HBase 的 Schema,包括有哪些 Table,每个 Table 有哪些 Column Family 等信息。

Master

  1. 为 Region Server 分配 Region ;

  2. 负责 Region Server 的负载均衡 ;

  3. 发现失效的 Region Server 并重新分配其上的 Region;

  4. GFS 上的垃圾文件回收;

  5. 处理 Schema 的更新请求。

Region Server

  1. Region Server 负责维护 Master 分配给它的 Region ,并处理发送到 Region 上的 IO 请求;

  2. Region Server 负责切分在运行过程中变得过大的 Region。

3.2 组件间的协作

HBase 使用 ZooKeeper 作为分布式协调服务来维护集群中的服务器状态。 Zookeeper 负责维护可用服务列表,并提供服务故障通知等服务:

  • 每个 Region Server 都会在 ZooKeeper 上创建一个临时节点,Master 通过 Zookeeper 的 Watcher 机制对节点进行监控,从而可以发现新加入的 Region Server 或故障退出的 Region Server;

  • 所有 Masters 会竞争性地在 Zookeeper 上创建同一个临时节点,由于 Zookeeper 只能有一个同名节点,所以必然只有一个 Master 能够创建成功,此时该 Master 就是主 Master,主 Master 会定期向 Zookeeper 发送心跳。备用 Masters 则通过 Watcher 机制对主 HMaster 所在节点进行监听;

  • 如果主 Master 未能定时发送心跳,则其持有的 Zookeeper 会话会过期,相应的临时节点也会被删除,这会触发定义在该节点上的 Watcher 事件,使得备用的 Master Servers 得到通知。所有备用的 Master Servers 在接到通知后,会再次去竞争性地创建临时节点,完成主 Master 的选举。

四、数据的读写流程简述

4.1 写入数据的流程

  1. Client 向 Region Server 提交写请求;

  2. Region Server 找到目标 Region;

  3. Region 检查数据是否与 Schema 一致;

  4. 如果客户端没有指定版本,则获取当前系统时间作为数据版本;

  5. 将更新写入 WAL Log;

  6. 将更新写入 Memstore;

  7. 判断 Memstore 存储是否已满,如果存储已满则需要 flush 为 Store Hfile 文件。

更为详细写入流程可以参考:HBase - 数据写入流程解析

4.2 读取数据的流程

以下是客户端首次读写 HBase 上数据的流程:

  1. 客户端从 Zookeeper 获取 META 表所在的 Region Server;

  2. 客户端访问 META 表所在的 Region Server,从 META 表中查询到访问行键所在的 Region Server,之后客户端将缓存这些信息以及 META 表的位置;

  3. 客户端从行键所在的 Region Server 上获取数据。

如果再次读取,客户端将从缓存中获取行键所在的 Region Server。这样客户端就不需要再次查询 META 表,除非 Region 移动导致缓存失效,这样的话,则将会重新查询并更新缓存。

注:META 表是 HBase 中一张特殊的表,它保存了所有 Region 的位置信息,META 表自己的位置信息则存储在 ZooKeeper 上。

更为详细读取数据流程参考:

HBase 原理-数据读取流程解析

HBase 原理-迟到的‘数据读取流程部分细节

参考资料

本篇文章内容主要参考自官方文档和以下两篇博客,图片也主要引用自以下两篇博客:

官方文档:

更多大数据系列文章可以参见 GitHub 开源项目大数据入门指南

おすすめ

転載: www.cnblogs.com/heibaiying/p/11403502.html
おすすめ