我爱编程

hbase 模型

2017-04-21  本文已影响40人  lmem

[官方文档]http://hbase.apache.org/book.html#regions.arch
[模型论文]http://0b4af6cdc2f0c5998459-c0245c5c937c5dedcca3f1764ecc9b2f.r43.cf2.rackcdn.com/9353-login1210_khurana.pdf

大数据量存储,大数据量高并发操作
需要对数据随机读写操作
读写访问均是非常简单的操作

1.HBase数据模型术语

Table(表格)

一个HBase表格由多行组成。

Row(行)

HBase中的行里面包含一个key和一个或者多个包含值的列。行按照行的key字母顺序存储在表格中。因为这个原因,行的key的设计就显得非常重要。数据的存储目标是相近的数据存储到一起。一个常用的行的key的格式是网站域名。如果你的行的key是域名,你应该将域名进行反转(org.apache.www, org.apache.mail, org.apache.jira)再存储。这样的话,所有Apache域名将会存储在一起,好过基于子域名的首字母分散在各处。

Column(列)

HBase中的列包含用:分隔开的列族和列的限定符。

Column Family(列族)

因为性能的原因,列族物理上包含一组列和它们的值。每一个列族拥有一系列的存储属性,例如值是否缓存在内存中,数据是否要压缩或者他的行key是否要加密等等。表格中的每一行拥有相同的列族,尽管一个给定的行可能没有存储任何数据在一个给定的列族中。

Column Qualifier(列的限定符)

列的限定符是列族中数据的索引。例如给定了一个列族content,那么限定符可能是content:html,也可以是content:pdf。列族在创建表格时是确定的了,但是列的限定符是动态地并且行与行之间的差别也可能是非常大的。

Cell(单元)

单元是由列族列限定符和代表值版本的时间戳组成的。

Timestamp(时间戳)

时间戳是写在值旁边的一个用于区分值的版本的数据。默认情况下,时间戳表示的是当数据写入时RegionSever的时间点,但你也可以在写入数据时指定一个不同的时间戳。

2.概念视图

一个名为webable的表格,表格中有两行(com.cnn.www 和 com.example.www)和三个列族(contents, anchor, 和 people)。在这个例子当中,第一行(com.cnn.www)中anchor包含两列(anchor:cssnsi.com, anchor:my.look.ca)和content包含一列(contents:html)。这个例子中com.cnn.www拥有5个版本而com.example.www有一个版本。contents:html列中包含给定网页的整个HTML。anchor限定符包含能够表示行的站点以及链接中文本。People列族表示跟站点有关的人。
在HBase中,表格中的单元如果是空将不占用空间或者事实上不存在。这就使得HBase看起来“稀疏”。

Paste_Image.png Paste_Image.png

下面的方式以多维度映射的方式来表达相同的信息。下面只是一个用于说明目的的模型可能不是百分百的精确。

{
  "com.cnn.www": {
    contents: {
      t6: contents:html: "<html>..."
      t5: contents:html: "<html>..."
      t3: contents:html: "<html>..."
    }

    anchor: {
      t9: anchor:cnnsi.com = "CNN"
      t8: anchor:my.look.ca = "CNN.com"
    }
    people: {}
  }

  "com.example.www": {
    contents: {
      t5: contents:html: "<html>..."
    }
    anchor: {}
    people: {
      t5: people:author: "John Doe"
    }
  }
}


```
####2.物理视图
尽管一个概念层次的表格可能看起来是由一些列稀疏的行组成,但他们是通过**列族来存储**的。一个新建的限定符(column_family:column_qualifier)可以随时地添加到已存在的列族中。

![Paste_Image.png](https://img.haomeiwen.com/i2061490/62349c9b0833d1a7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
概念视图中的空单元实际上是没有进行存储的。因此对于返回时间戳为t8的contents:html的值的请求,结果为空。同样的,一个返回时间戳为t9的anchor:my.look.ca的值的请求,结果也为空。然而,如果没有指定时间戳的话,那么会返回特定列的最新值。对有多个版本的列,优先返回最新的值,因为时间戳是按照递减顺序存储的。因此对于一个返回com.cnn.www里面所有的列的值并且没有指定时间戳的请求,返回的结果会是时间戳为t6的contents:html 的值、时间戳 t9的anchor:cnnsi.com f的值和时间戳t8的 anchor:my.look.ca 。
####物理存储

![Paste_Image.png](https://img.haomeiwen.com/i2061490/5788eaad8f2d5718.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


![Paste_Image.png](https://img.haomeiwen.com/i2061490/c505aabb2f3dbe1b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

```
 1.Table 中所有行按照row key 的字典排序
 2.Table 在行的分割方向上分割为多个Region
 3. Region 按大小分割的,每个表开始只有一个Region 随着数据增多,region 不断增大,当增
大到一个阀值的时候。Region 就会等分成2个Region 之后会有越来越多的Region
 4. Region是Hbase 中分布式存储和负载均衡的最小单元,不同的Region 分布在不同的RegionServer
5.Region虽然是分布式存储的最小单元,但并不是存储的最小单元。Region由一个或者多个Store组成,每个store保存一个columns family;每个Strore又由一个memStore和0至多个StoreFile组成,StoreFile包含HFile;memStore存储在内存中,StoreFile存储在HDFS上
```
####2.Hbase基本组件

![Paste_Image.png](https://img.haomeiwen.com/i2061490/b7893a723c270adb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
######Client
包含访问HBase的接口,并维护cache来加快对HBase的访问,比如region的位置信息

######Master
为Region server分配region
负责Region server的负载均衡
发现失效的Region server并重新分配其上的region
管理用户对table的增删改查操作
######Region Server
Regionserver维护region,处理对这些region的IO请求
Regionserver负责切分在运行过程中变得过大的region
######Zookeeper作用
通过选举,保证任何时候,集群中只有一个master,Master与RegionServers 启动时会向ZooKeeper注册
存贮所有Region的寻址入口
实时监控Region server的上线和下线信息。并实时通知给Master
存储HBase的schema和table元数据
默认情况下,HBase 管理ZooKeeper 实例,比如, 启动或者停止ZooKeeper
Zookeeper的引入使得Master不再是单点故障

![Paste_Image.png](https://img.haomeiwen.com/i2061490/aaae5aa526297252.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


![Paste_Image.png](https://img.haomeiwen.com/i2061490/fb1ce199ca026ebd.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
**该机制用于数据的容错和恢复:**
每个HRegionServer中都有一个HLog对象,HLog是一个实现Write AheadLog的类,在每次用户操作写入MemStore的同时,也会写一份数据到HLog文件中(HLog文件格式见后续),HLog文件定期会滚动出新的,并删除旧的文件(已持久化到StoreFile中的数据)。当HRegionServer意外终止后,HMaster会通过Zookeeper感知到,HMaster首先会处理遗留的HLog文件,将其中不同Region的Log数据进行拆分,分别放到相应region的目录下,然后再将失效的region重新分配,领取到这些region的HRegionServer在Load Region的过程中,会发现有历史HLog需要处理,因此ReplayHLog中的数据到MemStore中,然后flush到StoreFiles,完成数据恢复
**HBase容错性**
Master容错:Zookeeper重新选择一个新的Master
无Master过程中,数据读取仍照常进行;
无master过程中,region切分、负载均衡等无法进行;

**RegionServer容错:**
定时向Zookeeper汇报心跳,如果一旦时间内未出现心跳,Master将该RegionServer上的Region重新分配到其他RegionServer上,失效服务器上“预写”日志由主服务器进行分割并派送给新的RegionServer

***Region定位流程:***

![Paste_Image.png](https://img.haomeiwen.com/i2061490/157984e2dc5fcfe5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
**(1)寻找RegionServer**
ZooKeeper-->-ROOT-(单Region)-->.META.-->用户表

**(2)-ROOT-**
表包含.META.表所在的region列表,该表只会有一个Region;
Zookeeper中记录了-ROOT-表的location。

**(3).META.**
表包含所有的用户空间region列表,以及RegionServer的服务器地址。

上一篇下一篇

猜你喜欢

热点阅读