HBase是一个高可靠、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。HBase利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的还来那个数据,利用Zookeeper作为协调工具。
HBase的特点
- 海量存储:HBase适合存储PB级别的海量数据。
- 列式存储:列族在创建表的时候就必须指定。
- 极易扩展:HBase的扩展性主要体现在两个方面,一个是基于上层处理能力的扩展(ReginServer),一个是基于存储的扩展(HDFS)。
- 高并发
- 记录非常稀疏:稀疏主要是针对HBase列的灵活性,在列族中,你可以指定任意多的列,在列数据为空的情况下,是不会占用存储空间的。
- 多版本数据
HBase的适用场景
- 查询简单(行级、范围、全表查询)
- 不涉及到复杂的Join查询,基于RowKey/RowKey的范围查询
- 订单流水,交易记录,需要记录历史版本的数据等
HBase不适用场景
- 几千、几百万那种还不如使用RDBMS
- 需要类型列(Phonix,scala,spark,Kafka)
- 需要跨行事务,目前HBase只支持单行事务,需要跨行必须依赖第三方服务
- SQL查询(可使用Phonix on HBase解决)
- 硬件太少,因为HBase依赖服务挺多,比如至少5个HDFS DataNode,1个HDFS NameData(为了安全还需要一个备节点),一个Zookeeper集群,然后还需要HBase自身的各节点
- 需要表间Join,HBae只适合Scan和Get,虽然Phonix支持了SQL化使用HBase,但Join性能依然很差,如果非要用HBase做Join,只能在客户端
Hive和HBase的不同
主要有五点:
- hive是建立在Hadoop之上为了降低MapReduce编程复杂度的ETL工具。
hbase是为了弥补Hadoop对实时操作的缺陷。 - hive是纯逻辑表,因为hive的本身并不能做数据存储和计算,而是完全依赖Hadoop
hbase是物理表,提供了一张超大的内存Hash表来存储索引,方便查询。 - hive是数据仓库工具,需要全表扫描,就用 hive,因为hive是文件存储。
hbase是数据库,需要索引访问,则用hbase,因为hbase是面向列的NoSQL数据库。 - hive表中存入数据(文件)时不做校验,属于读模式存储系统。
hbase表插入数据时,会和RDBMS一样做Schema校验,所以数据写模式存储系统。 - hive不支持单行记录操作,数据处理依靠MapReduce,操作延时高。
hbase支持单行记录的CRUD,而且是实时处理,效率比hive高很多。