什么是hbase

HBASE是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBASE技术可在廉价PC Server上搭建起大规模结构化存储集群。
HBASE的目标是存储并处理大型的数据,更具体来说是仅需使用普通的硬件配置,就能够处理由成千上万的行和列所组成的大型数据。
HBASE是Google Bigtable的开源实现,但是也有很多不同之处。比如:Google Bigtable利用GFS作为其文件存储系统,HBASE利用Hadoop HDFS作为其文件存储系统;Google运行MAPREDUCE来处理Bigtable中的海量数据,HBASE同样利用Hadoop MapReduce来处理HBASE中的海量数据;Google Bigtable利用Chubby作为协同服务,HBASE利用Zookeeper作为对应。
MapReduce:离线计算
HBASE:可看做缓存(列式)数据库(内存中)
Hbase理论 - 图2
Hbase理论 - 图3
Hbase理论 - 图4

与传统数据库的对比

1、传统数据库遇到的问题:
1)数据量很大的时候无法存储
2)没有很好的备份机制
3)数据达到一定数量开始缓慢,很大的话基本无法支撑
2、HBASE优势:
1)线性扩展,随着数据量增多可以通过节点扩展进行支撑
2)数据存储在hdfs上,备份机制健全
3)通过zookeeper协调查找数据,访问速度块。
RDBMS:关系型数据库管理系统

hbase集群中的角色

1、一个或者多个主节点,Hmaster
2、多个从节点,HregionServer

hbase依赖zookeeper

  1. 保存Hmaster的地址和backup-master地址

    • hmaster:
  2. 管理HregionServer

  3. 做增删改查表的节点

  4. 管理HregionServer中的表分配

  5. 保存表-ROOT-的地址

  • hbase默认的根表,检索表。

    1. HRegionServer列表
  • 表的增删改查数据。

  • 和hdfs交互,存取数据。

过滤器的种类

过滤器的种类:
列植过滤器—SingleColumnValueFilter
过滤列植的相等、不等、范围等
列名前缀过滤器—ColumnPrefixFilter
过滤指定前缀的列名
多个列名前缀过滤器—MultipleColumnPrefixFilter
过滤多个指定前缀的列名
rowKey过滤器—RowFilter
通过正则,过滤rowKey值。

列植过滤器—SingleColumnValueFilter

SingleColumnValueFilter 列值判断
相等 (CompareOp.EQUAL ),
不等(CompareOp.NOT_EQUAL),
范围 (e.g., CompareOp.GREATER)…………
下面示例检查列值和字符串’values’ 相等…
SingleColumnValueFilter f = new SingleColumnValueFilter(
Bytes.toBytes(“cFamily”) Bytes.toBytes(“column”), CompareFilter.CompareOp.EQUAL,
Bytes.toBytes(“values”));
s1.setFilter(f);
注意:如果过滤器过滤的列在数据表中有的行中不存在,那么这个过滤器对此行无法过滤。

列名前缀过滤器—ColumnPrefixFilter

过滤器—ColumnPrefixFilter
ColumnPrefixFilter 用于指定列名前缀值相等
ColumnPrefixFilter f = new ColumnPrefixFilter(Bytes.toBytes(“values”));
s1.setFilter(f);

多个列值前缀过滤器—MultipleColumnPrefixFilter

MultipleColumnPrefixFilter 和 ColumnPrefixFilter 行为差不多,但可以指定多个前缀
byte[][] prefixes = new byte[][] {Bytes.toBytes(“value1”),Bytes.toBytes(“value2”)};
Filter f = new MultipleColumnPrefixFilter(prefixes);
s1.setFilter(f);

rowKey过滤器—RowFilter

RowFilter 是rowkey过滤器
通常根据rowkey来指定范围时,使用scan扫描器的StartRow和StopRow方法比较好。
Filter f = new RowFilter(CompareFilter.CompareOp.EQUAL, new RegexStringComparator(“^1234”)); //匹配以1234开头的rowkey
s1.setFilter(f);

hbase原理

体系图

Hbase理论 - 图5

写流程

  1. client向hregionserver发送写请求。

  2. hregionserver将数据写到hlog(write ahead log)。为了数据的持久化和恢复。

  3. hregionserver将数据写到内存(memstore)

  4. 反馈client写成功。

  1. Client通过zookeeper的调度,向HRegionServer发送写数据的请求,在HRegion中写数据。
    2. 数据写入到HRegion的MemStore,直到MemStore达到预定的阈值。
    3. MEMStore中的数据会被flush成一个StoreFile。
    4. 随着storeFile的数量的增多,当达到一定的阈值会触发Compact合并操作,将多个StoreFile合成一个storeFile,同时把版本更新数据删除。
    5. StoreFile通过不断的compact合并,逐渐形成越来越多越大的StoreFile。
    6. 单个的StoreFile大小超过一定的阈值,会触发一个split操作,把当前HRegion Split成两个新的HRegion,老的HRegion就会下线,新生成的2个HRegion会被Hmaster分配到其他的HRegionServer上,使得一个HRegion的 压力分到2个HRegion上。

    数据flush过程

  1. 当memstore数据达到阈值(默认是64M),将数据刷到硬盘,将内存中的数据删除,同时删除Hlog中的历史数据。

  2. 并将数据存储到hdfs中。

  3. 在hlog中做标记点。

数据合并过程

  1. 当数据块达到4块,hmaster将数据块加载到本地,进行合并

  2. 当合并的数据超过256M,进行拆分,将拆分后的region分配给不同的hregionserver管理

  3. 当hregionser宕机后,将hregionserver上的hlog拆分,然后分配给不同的hregionserver加载,修改.META.

  4. 注意:hlog会同步到hdfs

hbase的读流程

  1. 通过zookeeper和-ROOT- .META.表定位hregionserver。

  2. 数据从内存和硬盘合并后返回给client

  3. 数据块会缓存

  1. Client访问zookeeper,查看ROOT表,获取META表的信息
    2. 从META表中查找,获取存放目标数据的HRegion信息,从而找到HRegionserver的信息。
    3. 通过HRegionServer找到相应的数据信息。
    4. HRegionServer的内存分为两部分:1.MemStore 2.blockcache MemStore主要用于写操作,blockcache主要用于读操作 ,请求先到Memstore读取数据,如果没有再到blockcache中读取,再没有就会到StoreFile中读取。并把读取的数据放入到blockcache中。

    hmaster的职责

    1、管理用户对Table的增、删、改、查操作;
    2、记录region在哪台Hregion server上
    3、在Region Split后,负责新Region的分配;
    4、新机器加入时,管理HRegion Server的负载均衡,调整Region分布
    5、在HRegion Server宕机后,负责失效HRegion Server 上的Regions迁移。
    6、管理namespace和table的元数据
    7、权限控制(ACL)

    hregionserver的职责

  1. HRegion Server主要负责响应用户I/O请求,向HDFS文件系统中读写数据,是HBASE中最核心的模块。
  2. HRegion Server管理了很多table的分区,也就是region。
  3. HRegionserver负责切分在运行过程中变得过大的Hregion
  4. HRegionServer维护HRegion,处理对这些HRegion的IO请求
  5. Client直接通过HRegionServer读写数据(从HMaster中获取元数据,找到RowKey所在的HRegion/HRegionServer后)

    client职责

    Client 包含访问HBase的接口,并维护cache来加快对HBase的访问,比如HRegion的位置信息。
    HBASE Client使用HBASE的RPC机制与HMaster和RegionServer进行通信
    管理类操作:Client与HMaster进行RPC;
    数据读写类操作:Client与HRegionServer进行RPC。

    Hbase读写操作总结:

  6. Client访问HBase上的数据的过程并不需要master参与(寻址访问zookeeper和region server)。

  7. Master仅仅维护table和region的元数据信息,负载比较低。

Hbase理论 - 图6

Hbase的物理存储HRegion1

  • Table中所有行都按照row key的字典序排列

  • Table在行的方向上分割为多个HRegion(地区)

  • HRegion按大小分割的,每个表开始只有一个HRegion,随着数据增多,HRegion不断增大,当增大到一个阈值的时候,HRegion就会等分成两个新的HRegion,之后会有越来越多的Region。

  • HRegion是Hbase中分布式存储和负载均衡的最小单元,不同HRegion分布到不同HRegionSer上。

  • HFile是最小的存储单元。

  • HRegion由一个或者多个Store(存储)组成,每个Store保存一个columns family(列族)。每个columns family存储在HDFS上的一个单独文件中,空值不会被保存。

  • 每个HRtrore又由一个MemStore和0至多个StoreFile组成,StoreFile包含HFile。

  • MemStore存储在内存中,StoreFile存储在HDFS上。

  • 一个HRegionServer可以存放1000个HRegion

Hbase理论 - 图7

Hbase基本组件 Zookeeper1

  • 通过选举,保证任何时候,集群中只有一个master,Master与RegionServers启动时会向Zookeeper注册。

  • 存贮所有Region的寻址入口

  • 实时监控Region server的上线和下线信息。并实时通知给Master

  • 存储HBase的schema(概要)和table元数据。

Hbase基本组件 协同工作

  • HBase Client通过RPC方式和HMaster、HRegionServer通信。

  • 一个HRegionServer可以存放1000个HRegion。

  • 底层Table数据存储于HDFS中,而HRegion所处理的数据尽量和数据所在的DataNode在一起,实现数据的本地化。 数据本地化并不是总能实现,比如在HRegion移动(如因Split( 分裂))时,需要等下一次Compact才能继续回到本地化。

Hbase的数据恢复 HLog

  • 每个HRegionServer中都有一个HLog对象,HLog是一个实现Write Ahead Log的类。

  • 在每次用户操作写入MemStore的同时,也会写一份数据到HLog文件中。

  • HLog文件定期会滚动出新的,并删除旧的文件(已持久化到StoreFile中的数据)。

  • 优点:减少文件个数,降低磁盘的寻址次数。缺点:恢复数据时需要拆分log。

Hbase的数据恢复 恢复过程

  • 当HRegionServer意外终止后,HMaster会通过Zookeeper感知到。

  • HMaster首先会处理遗留的HLog文件,将其中不同Region的Log数据进行拆分,分别放到相应region的目录下。

  • 然后再将失效的region重新分配,领取到这些region的HRegionServer在Load Region的过程中,会发现有历史HLog需要处理。 因此会Replay HLog中的数据到MemStore中,然后flush到StoreFiles,完成数据恢复。

Hbase的容错 HRegionServer

  1. HRegionServer定时向Zookeeper汇报心跳。

  2. 如果一旦时间内未出现心跳,HMaster将该RegionServer上的Region重新分配到其他RegionServer上。

  3. 失效服务器上“预写”日志由主服务器进行分割并派送给新的HRegionServer。

Hbase的容错 HMaster

当现有Hmaster出现灾难无法运转,Zookeeper会重新选择一个新的Master,从而保障Master不再是单点故障。
无Master过程中,数据读取仍照常进行。
无master过程中,region切分、负载均衡等无法进行。

Hbase的容错 Zookeeper

Zookeeper是一个可靠地服务,一般配置3或5个Zookeeper实例。
Region定位流程:ZooKeeper—> -ROOT-(单Region)—> .META.—> 用户表
Hbase理论 - 图8

总结:

  1. Hbase的物理存储包含:Region、RegionServer、 Store、 memStore和StoreFile

  2. Hbase的基本组件包括:Client、Master、Region Server、Zookeeper

  3. HRegionServer出现错误后,HMaster可以通过Zookeeper感知到,并通过Hlog恢复数据。

  4. HRegionServer宕机可以通过HMaster重新恢复数据,HMaster宕机可以通过Zookeeper分配新的HMaster, Zookeeper可以配置多个保证安全可用。