HBase的基础介绍

  HBase的介绍

HBase 是 BigTable 的开源(源码使用 Java 编写)版本。是 Apache Hadoop 的数据库,是建立在 HDFS 之上,被设计用来提供高可靠性、高性能、列存储、可伸缩、多版本的 NoSQL 的分布式数据存储系统,实现对大型数据的实时、随机的读写访问

  • HBase 依赖于 HDFS 做底层的数据存储
  • HBase 依赖于 MapReduce 做数据计算
  • HBase 依赖于 ZooKeeper 做服务协调

HBase表的特点

  • 大:一个表可以有上十亿行,上百万列。
  • 面向列:面向列(族)的存储和权限控制,列(簇)独立检索。
  • 稀疏:主要用来存储结构化和半结构化的松散数据,对于为空的列,并不占用存储空间(底层所有数据的存储都是字节数组)。
  • 无模式:每行都有一个可排序的主键和任意多的列,列可以根据需要动态的增加,同一张表中不同的行可以有截然不同的列

HBase与hive的相同和不同

相同

hbase与hive都是架构在hadoop之上的,都是用HDFS作为底层存储

不同

  • Hive是建立在Hadoop之上为了减少MapReduce jobs编写工作的批处理系统,HBase是为了支持弥补Hadoop对实时操作的缺陷的项目 。总的来说,hive是适用于离线数据的批处理hbase是适用于实时数据的处理
  • Hive本身不存储和计算数据,它完全依赖于HDFS存储数据和MapReduce处理数据,Hive中的表纯逻辑
  • hbase是物理表,不是逻辑表,提供一个超大的内存hash表,搜索引擎通过它来存储索引,方便查询操作
  • 由于HDFS的不可随机读写,hive是不支持随机写操作,而hbase支持随机写入操作
  • HBase只支持简单的键查询,不支持复杂的条件查询

HBase的优缺点

优点

  • 容量巨大:HBase的单表可以支持千亿行、百万列的数据规模,数据容量可以达到TB甚至PB级别。
  • 良好的可扩展性:HBase集群可以非常方便地实现集群容量扩展,主要包括数据存储节点扩展以及读写服务节点扩展。可以通过简单的增加RegionServer节点实现计算层的扩展
  • 稀疏性:HBase支持大量稀疏存储,即允许大量列值为空,并不占用任何存储空间。
  • 多版本:HBase支持多版本特性,即一个 KV 可以同时保留多个版本,用户可以根据需要选择最新版本或者某个历史版本。
  • 支持过期:HBase支持TTL过期特性,用户只需要设置过期时间,超过TTL的数据就会被自动清理,不需要用户写程序手动删除。
  • 高可靠性:WAL预写式日志(write-ahead log)机制保证了数据写入时不会因集群异常而导致写入数据丢失,Replication机制保证了在集群出现严重的问题时,数据不会发生丢失或损坏。而且Hbase底层使用HDFS,HDFS本身也有备份。
  • 高性能:底层的LSM数据结构和Rowkey有序排列等架构上的独特设计,使得Hbase具有非常高的写入性能。region切分,主键索引和缓存机制使得Hbase在海量数据下具备一定的随机读取性能,该性能针对Rowkey的查询能到达到毫秒级别

缺点

  • HBase本身不支持很复杂的聚合运算(如 Join、GroupBy 等)。如果业务中需要使用聚合运算,可以在HBase之上架设Phoenix组件或者Spark 组件,前者主要应用于小规模聚合的 OLTP 场景,后者应用于大规模聚合的 0LAP 场景。
  • HBase本身并没有实现二级索引功能,所以不支持二级索引查找。好在针对 HBase 实现的第三方二级索引方案非常丰富,比如目前比较普遍的使用 Phoenix 提供的二级索引功能。
  • HBase原生不支持全局跨行事务,只支持单行事务模型。同样,可以使用Phoenix提供的全局事务模型组件来弥补HBase的这个缺陷。
  • HBase哪怕只是存储少量数据,它也不会很快。可以说HBase 并不快,只是当数据量很大的时候它慢的不明显

你可能感兴趣的:(HBase,hbase,数据库,大数据)