初识Hbase
Posted Justin的后端书架
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初识Hbase相关的知识,希望对你有一定的参考价值。
NoSQL
简介
Hbase 是一种非SQL类型的数据库,即非传统的RDBMS数据库。 有很多的非关系型数据库,如:BerkeleyDB 是一种典型的NoSQL 数据库。Hbase 是一个分布性非常好的数据库,从技术层面讲,相对于数据库,它更像是一个数据仓库。因为它缺乏很多RDBMS数据库的特性,像字段的数据类型、辅助索引、触发器和高级的查询语言等。可是,Hbase拥有很多的特性支持线性和模块化扩展。Hbase集群依靠添加Region Server进行扩展,如果一个集群从10台Region server扩展到20台,这将会使原有的存储和处理能力双倍扩展。RDBMS关系型数据库也可以同样进行扩展,但是只能扩展到一个特定的受限临界点,特别是受到单个数据库的大小限制,同时考虑到性能,需要特别的硬件和存储设备。
HBase 特性
很强的连续读写性能,这使得它非常适合高速计数聚合运算;
自动地进行分片:Hbase 表依靠Region分布式地存储在在集群上,Region依据数据的增长自动地进行分割合并操作;
自动进行RegionServer的故障转移;
Hadoop/HDFS的集成:Hbase非常好地支持HDFS的分布式文件系统;
MapReduce: Hbase 支持通过MapReduce进行大规模并行处理;
Java客户端API:Hbase 支持简单地调用Java API程序性地访问Hbase;
Thrift/REST API:Hbase同样支持非Java 的Thrift 和REST;
数据块缓存和Bloom过滤器:Hbase支持高查询请求数据量下的数据块缓存和Bloom过滤优化;
操作管理:HBase提供了构建在Web页面中的业务洞察力以及JMX标准;
HBase是一个构建在HDFS上的分布式列存储系统;
HBase是基于Google BigTable模型开发的,典型的key/value系统;
HBase是Apache Hadoop生态系统中的重要一员,主要用于海量结构化数据存储;
Hbase数据模型
HBase 数据逻辑模型
RowKey: 是表中每条记录的"主键",方便快速查找,Rowkey的设计非常重要
Column Family: 列族,拥有一个名称,包含一个或多个相关列
Column: 属于某一特定列族,FamilyName:columnName,每条记录可动态添加
Version Number: 类型为long,默认是系统时间,可由用户自定义
Value(Cell): ByteArray
HBase 数据物理模型
Table 中所有行都按照 row key的字典序排列
Table在行的方向上分割为多个Region
Region按大小分割,每个表开始只有一个region,随着数据的增多,region 不断增大,当增大到一个阀值的时候,Region就会等分为两个新的Region. Region 数量会越来越多
Region是Hbase中分布式存储和负载均衡的最小单元,不同的Region分布到不同的RegionServer上。
Region虽然是分布式存储的最小单元,但不是存储的最小单元. Region由一个或多个Store组成,每个Store保存一个column family. 每个Store 又由一个memStore和多个storeFile组成,StoreFile包含HFile; memStore存储在内存中,StoreFile存储在HDFS上。
注释:每个column family存储在HDFS上的一个单独文件中,空值不会被保存,Key 和 Version number在每个column family中均有一份
HBase架构及基本组件
Hbase基本组件说明
Client
包含访问HBase的接口,并维护cache来加快对HBase的访问,比如region的位置信息
Master
为Region server分配region
负责Region server的负载均衡
发现失效的Region server并重新分配其上的region
管理用户对table的增删改查操作
Region Serve
Regionserver维护region,处理对这些region的IO请求
Regionserver负责切分在运行过程中变得过大的region
Zookeeper作用
通过选举,保证任何时候,集群中只有一个master,Master与RegionServers 启动时会向ZooKeeper注册
存贮所有Region的寻址入口
实时监控Region server的上线和下线信息。并实时通知给Master
存储HBase的schema和table元数据
默认情况下,HBase 管理ZooKeeper 实例,比如, 启动或者停止ZooKeeper
Zookeeper的引入使得Master不再是单点故障
Write-Ahead-Log(WAL)
提供了一种高并发、持久化的日志保存与回放机制,每一个业务数据的写入操作(PUT / DELETE)执行前,都会记账在WAL中。当出现数据恢复需求的情况下,调用日志进行数据恢复。
该机制用于数据的容错和恢复:每个HRegionServer中都有一个HLog对象,HLog是一个实现Write Ahead Log的类,在每次用户操作写入MemStore的同时,也会写一份数据到HLog文件中(HLog文件格式见后续),HLog文件定期会滚动出新的,并删除旧的文件(已持久化到StoreFile中的数据)。当HRegionServer意外终止后,HMaster会通过Zookeeper感知到,HMaster首先会处理遗留的 HLog文件,将其中不同Region的Log数据进行拆分,分别放到相应region的目录下,然后再将失效的region重新分配,领取 到这些region的HRegionServer在Load Region的过程中,会发现有历史HLog需要处理,因此会Replay HLog中的数据到MemStore中,然后flush到StoreFiles,完成数据恢复
HBase容错性
Master容错
Zookeeper重新选择一个新的Master
无Master过程中,数据读取仍照常进行;
无master过程中,region切分、负载均衡等无法进行;
RegionServer容错
定时向Zookeeper汇报心跳,如果一旦时间内未出现心跳,Master将该RegionServer上的Region重新分配到其他RegionServer上,失效服务器上“预写”日志由主服务器进行分割并派送给新的RegionServer
Zookeeper容错
Zookeeper是一个可靠地服务,一般配置3或5个Zookeeper实例
Region定位流程
寻找RegionServer
ZooKeeper--> -ROOT-(单Region)--> .META.--> 用户表
-ROOT-
表包含.META.表所在的region列表,该表只会有一个Region;
Zookeeper中记录了-ROOT-表的location。
.META.
以上是关于初识Hbase的主要内容,如果未能解决你的问题,请参考以下文章