まず、基本的な概念
次のように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:history
、courses:math
に属しているcourses
このコラムファミリー。
1.3列修飾子(列修飾子)
列の修飾子、あなたが特定の列名として理解することができ、例えばcourses:history
、courses:math
に属しているcourses
このコラムの家族、その列は修飾子ですhistory
とmath
。表は列修飾子スキーマの一部ではないことに注意してください、あなたは動的にデータを挿入する過程で列を作成することができます。
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
。
Region
HBaseのは、分散ストレージの負荷分散および最小単位。これは、異なるがあることを意味Region
異なるで配布することが可能Region Server
に。しかし、一つは、Region
複数のサーバーに分割されていません。
2.2リージョンサーバー
Region Server
HDFSのデータノード上で実行されています。これは、次のコンポーネントがあります。
- WAL(ログ先行書き込みログ先行書き込み):障害が発生した場合、回復のための永続ストアのレコードにデータを格納するために使用されていません。
- BlockCache:キャッシュをお読みください。それは頻繁にメモリが不足している場合、続く、メモリに格納されたデータを読み込む
最近最少使用原则
余分なデータを削除します。 - Memstore:キャッシュを書きます。これは、新しいデータ・ストレージ・ディスクを作成していないと、データがディスクに書き込まれる前にソートされます。各地域の各列ファミリはMemStoreを持っています。
- HFILE:キー\値に応じてラインデータは、ファイルシステムに保存されています。
Region Server存取一个子表时,会创建一个Region对象,然后对表的每个列族创建一个Store
实例,每个Store
会有 0 个或多个StoreFile
与之对应,每个StoreFile
则对应一个HFile
,HFile 就是实际存储在HDFS上的文件。
三、Hbase系统架构
3.1 系统架构
HBase系统遵循Master/Salve架构,由三种不同类型的组件组成:
Zookeeper
- 保证任何时候,集群中只有一个Master;
- 存贮所有Region的寻址入口;
- 实时监控Region Server的状态,将Region Server的上线和下线信息实时通知给Master;
- 存储HBase的Schema,包括有哪些Table,每个Table有哪些Column Family等信息。
Master
- 为Region Server分配Region ;
- 负责Region Server的负载均衡 ;
- 发现失效的Region Server并重新分配其上的Region;
- GFS上的垃圾文件回收;
- 处理Schema的更新请求。
Region Server
- Region Server负责维护Master分配给它的Region ,并处理发送到Region上的IO请求;
- 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 写入数据的流程
- Client向Region Server提交写请求;
- Region Server找到目标Region;
- Region检查数据是否与Schema一致;
- 如果客户端没有指定版本,则获取当前系统时间作为数据版本;
- 将更新写入WAL Log;
- 将更新写入Memstore;
- 判断Memstore存储是否已满,如果存储已满则需要flush为Store Hfile文件。
更为详细写入流程可以参考:HBase - 数据写入流程解析
4.2 读取数据的流程
以下是客户端首次读写HBase上数据的流程:
- 客户端从Zookeeper获取
META
表所在的Region Server; - 客户端访问
META
表所在的Region Server,从META
表中查询到访问行键所在的Region Server,之后客户端将缓存这些信息以及META
表的位置; - 客户端从行键所在的Region Server上获取数据。
如果再次读取,客户端将从缓存中获取行键所在的Region Server。这样客户端就不需要再次查询META
表,除非Region移动导致缓存失效,这样的话,则将会重新查询并更新缓存。
注:META
表是HBase中一张特殊的表,它保存了所有Region的位置信息,META表自己的位置信息则存储在ZooKeeper上。
更为详细读取数据流程参考:
参考资料
本篇文章内容主要参考自官方文档和以下两篇博客,图片也主要引用自以下两篇博客:
官方文档:
更多大数据系列文章可以参见个人 GitHub 开源项目: 大数据入门指南