Hbase是一个开源的,面向列的开源数据库。基于Fay Chang所撰写的Google论文“Bigtable:一个结构化数据结构的分布式存储系统”
Hbase在hadoop之上提供了类似于Bigtable的能力。Hbase是Apache的Hadoop项目的子项目。基于列的模式提供数据存储,非常适合于非结构化数据存储的数据库。
bigtable & hbaseHbase是一个高可靠、高性能、面向列、可伸缩的分布式存储系统。利用Hbase技术可以在廉价PC Server上搭建大规模结构化存储集群。
Hbase在hadoop生态中的位置
image.png从Hadoop的生态系统图中可以看到Hbase位于结构化存储层,Hadoop Hdfs为hbase提供高可靠性的底层存储支持,Hadoop MapReduce为Hbase提供高性能的计算能力,Zookeeper为Hbase提供了稳定服务和failover机制。
Hbase和hadoop各版本之间的适配关系
hbase在生态中的位置 hbase最新版本
- √ 支持
- × 不支持
- ?未测试
Hbase各版本特性 摘自网络
1.0
1.API的变化,比如放弃了客户端几个重要的API:( HTableInterface, HTable,HBaseAdmin),建议程序升级到新的API,老的PAI会在2.X中删除。
2.不重启regionserver的情况下读取配置文件。
3.master节点也运行regionserver。master与regionserver共享RPC端口。
4.global memstore和block cache大小的自动调整。
5.Bucket cache改进(data blocks的可用性和压缩方面)
6.集群中一个新的可插拔式的终端来复制成自定义存储。(A new pluggable replication endpoint to plug in to HBase’s inter-cluster replication to replicate to a custom data store)
7.新增truncate table 命令
8.新增meta table来替代zk来进行更快的region分配(此功能默认是关闭都)
9.广泛的文档改进
10.[HBASE-12511] - namespace permissions - add support from table creation privilege in a namespace ‘C’
11.位Thrift Server添加Thrift-over-HTTPS 和 doAs支持(?)
12.bulkload复制表
13.使用前缀设置一个行的开始和结束更加easy了。
14.脚本停止regionserver使用RPC
15.客户端的原子性检查和变化的支持。
16.自动增加heap size的值如果开始没有指定大小的话。
17.regionserver协处理器终端。
18.添加了在一个regionserver上压缩所有region的命令。
19.添加LongComparator过滤器
20.[shell]在线加载配置文件的改变。
21.REST server的一些修复。
22.需要zk3.4.X的支持。
23.需要hadoop2.x的支持
24.jdk1.7,不再支持1.6
25.默认的端口号已经由600xx改成了160XX
26.默认使用hfile version3
27.Slab cache已经被移除,使用bucket cache
28.默认的regionserver堆内存由1G改为jdk默认的数值,一般为物理内存的四分之一。
29.mapred包和类已经被废除。
30.加入两个新的模块:hbase-annotations 和 hbase-rest
2.0
A new Region assignment manager
AssignmentManager V2(“AMv2”)基于Procedure V2实现,能够更快速的分配Region,维护的region状态机存储不再依赖于ZooKeeper,能够更好的应对Region长时间RIT问题。
Offheaping of Read/Write
减少对Heap内存的使用,改用Offheap区的内存,有效减少GC压力
In-Memory Compaction
重新设计了CompactingMemStore 替代 DefaultMemStore,CompactingMemStore中的数据达到一定大小以后,不是直接Flush成HDFS中的HFile文件,而是先Flush到内存中的一个不可改写的Segment,这样,内存中的多个Segments可以预先合并,当达到一定的大小以后,才Flush成HDFS中的HFile文件,这样做的好处是希望有效降低Compaction所带来的写IO放大问题。
NettyRpcServer
HBase2.0 开始默认使用NettyRpcServer
使用Netty替代HBase原生的RPC server,大大提升了HBaseRPC的吞吐能力,降低了延迟
Async RPC Client
HBase2.0 Client不在是原来同步等待,而是利用异步RPC机制,大大提高Client端请求并发度,有效提高资源利用率,扩大吞吐。
RegionServer Group
在HBase 2.0中我们可以将RegionServer划分到多个逻辑Group中,这样可以提供多租户的能力。
Support for MOB
MOB特性使得HBase支持存储小于10MB 的中等媒体对象数据,这些小对象文件采用独立的HFile文件进行存储,相比原来直接存储大对象插入hbase,其读写效率更高;Mob数据存储还是以hfile格式存储,兼容HBase现有特性,如snapshot、bulkload、replication等。MOB数据文件有独立的compaction和expire clean机制,稳定性更可控。
与1.x版本的兼容性
1.x版本的Client可以访问2.0版本的集群,进行正常的数据读写操作。但从1.x版本不停服务的情况下滚动升级到2.0版本是没法做到的,1.x版本的coprocessor/Endpoint不做改动的情况下也无法在2.0版本中正常使用。
备注:
1,结构化数据:可以用二维表结构来逻辑表达实现的数据,即行数据,行数据中的每个字段都有具体切明确的含义。参考链接
2,非结构化数据:不方便用数据库二维逻辑表来表现的数据即称为非结构化数据。包括所有格式的办公文档、图片、文本、XML、HTML、各类报表、图像和音视频。参考链接
3,failover机制:故障(失效)转移机制。是一种备份操作模式,当主要组件异常时,其功能转移到备份组件。其要点在于有主有备,且主故障时备可启用,并设置为主。例如Mysql的双Master模式。
延展
1,failfast:快速失败。尽可能发现系统中的错误,是系统能够按照事先设定好的错误执行流成执行,对应的方式是错误容忍(fail-tolerant),例如:在java中线程A通过iterator遍历集合,若该集合的内容被其他线程所改变了,那么线程A在访问集合时,就会抛出ConcurrentModificationException,即发现错误执行设定好的流程。参考链接
2,failback:失效自动恢复。在簇网络系统(有两台或多台服务器互联的网络)中,由于要对某台服务进行维修,需要网络资源和服务暂时重定向到备用系统,在此之后将网络资源和服务恢复为由原始主机提供的过程称为自动恢复。参考链接
3,failsafe:失效安全。即使在故障的时候也不会造成伤害或者减少伤害。维基百科上一个形象的例子是红绿灯的“冲突监测模块”当监测到错误或者冲突的信号时会将十字路口的红绿灯变为闪烁错误模式,而不是全部显示为绿灯。参考链接
网友评论