什么是HBase?
HBase是一个开源的,分布式,列式存储系统,基于Google Bigtable的大规模结构化数据存储系统实现。如果需要详细了解下Google的Bigtable,可以参考这个链接:
http://static.googleusercontent.com/media/research.google.com/zh-CN//archive/bigtable-osdi06.pdf
此外HBase对Bigtable的架构设计做了相应增强,主要的features如下:
1、可以易于与Hadoop MapReduce整合的相关Classes;
2、实时查询优化;
3、提供REST-ful服务网关,支持XML, Protobuf和二进制数据编码选项;
4、基于JRuby的shell操作;
5、高效的Thrift服务网关;
6、支持导出监控点存入Ganglia或者通过JMX的形式
为什么需要使用HBase?
当你需要很强的容错性,强一致性,在大数据集上实现随机实时读写的时候,HBase是个不错的选择。HBase的目标是托管大表--数十亿行,数百万列,基于廉价服务器的存储之上。HBase底层采用HDFS,而文件系统一般是具有冗余因子的,从而在存储层上保证了数据不会丢失。
传统RDBMS在处理大数据量的表时代价高昂,很多worklods已经超出了系统处理能力,十分耗时且低效,即便采用商业版本的也是需要大额资金的投入。而HBase Scan操作所用时间线性可控。HBase采用的数据模型可动态自动化扩展,当达到一定限制自动sharding,而对使用方来说是透明的,这样同时达到了数据可用性和容错性目的。
HBase可以看做一个分布式的map,以rowkey作为key,tag和data组成的数据作为value,每一个cell都有自己的timestamp和versions,这种多版本和时间戳的方式可以避免并发编辑的冲突。行row是作为字典序byte升序排列的默认。
Tables被分为多个region托管在不同的regionserver上,hbase master负责管理region分配,达到负载均衡和故障快速恢复的目的。如果某个regionserver因为某个原因down掉了,master会重新将其上原有的region重新分配到其他存活的regionserver上,这个过程一般而言是比较快的,因为只是重新建立下内存结构,并修改下meta元信息,本身的数据还是存储到hdfs上的,可以共享。
哪些情况下不太适合HBase?
当你的数据并不是很大;
当你访问数据是顺序访问,且数据结构固定,易于用M/R;
当你离不开SQL来完成事情;
当你需要在一致性和可用性上做权衡;
当你需要跨表查询且条件很复杂;
...
z怎样尝试使用HBase?
合理的物理服务器配置参考如下:
- Dual quad core CPU
- 8 GB RAM or more (4 GB is passable, but constrain MapReduce to only 1 concurrent mapper and reducer per node)
- 4 x 250 GB data disk attached as JBOD (for the DataNode process)