HBase学习笔记-入门(1)-HBase基本介绍

HBase介绍

HBase是一个开源的、分布式的、版本化的非关系型数据库(NoSQL),底层利用HDFS提供分布式数据存储。HBase可以对数据进行随机存取和检索,可以存储结构化和半结构化的数据,例如一些网站内容,日志信息等等可以存放在HBase中。

  • HBase是BigTable的开源Java版本,底层建立在HDFS之上,提供高可靠,高性能、列存储、可伸缩、实时读写等功能,属于NoSQL
  • 在HBase中仅能够通过主键和主键的range来进行数据检索,并且仅支持单行事务
  • 主要用来存储结构化和半结构化的数据
  • HBase仅提供简单的数据查询功能,不支持join等复杂操作,不支持复杂事务,相比传统的关系型数据库来说,HBase缺少很多特性,例如不支持带类型的列,不支持二级索引以及高级查询语言等
  • HBase中支持的数据类型为:byte[ ]

HBase应用场景举例:对象存储、时序数据、推荐画像、时空数据、CubeDB OLAP、消息 / 订单、爬虫数据存储、海量数据备份、短网址...

HBase的特点:

  • 数据量大:一个表可以有上十亿行,上百万列,并且可以在横向和纵向两个维度插入数据,具有很大的弹性。而HBase采用LSM树作为内部数据存储结构,这种结构会周期性地将较小文件合并成大文件,以减少对磁盘的访问

  • 面向列的存储:HBase内部使用面向列(族)的存储和权限控制,列(族)独立检索。其中的每个列是单独存储的。

    行存储的情况:一张表的数据存放在一起,进行数据的插入和更新会相对容易,但是查询操作需要读取所有(大部分)的数据

    列存储的情况:一张表按照列分开存储,查询操作仅需要读取相关列即可,可以大幅降低系统的I/O吞吐量

  • 稀疏存储:对于为空的列,并不会占用存储空间。因此,表可以设计得非常稀疏,在很大程度上节省了存储开销

  • 强扩展性:HBase底层为HDFS,支持分布式存储。HBase同样具有横向扩展性,通过增加集群中的服务器数量来提升集群的容量和性能

    HBase表根据Region大小进行分区,分别存放在集群中不同节点上。当添加新的节点时,集群会进行重新调整,在新的节点上启动HBase服务器,动态地实现扩展。

    HBase的扩展是热扩展,可以在不停止现有服务的情况下,动态增减节点。

  • 高可靠性:HBase运行在HDFS之上,HDFS的多副本存储机制可以让HBase实现出现故障时的自动恢复,同时HBase内部也提供WAL和Replication机制。当集群中的单个节点出现故障的时候,协调服务组件Zookeeper会通知集群的主节点,将故障节点的HLog中的日志信息分发到各个从节点中进行数据恢复

    WAL(Write-Ahead-Log)预写日志:在HBase服务器处理数据插入和删除的过程中用来记录操作内容的日志。在执行操作之前先写入日志,保证数据写入的时候不会因集群异常而导致写入数据的丢失。

    Replication机制:基于日志操作做数据同步。

HBase对比

HBase vs RDBMS

HBase RDBMS
数据以表的形式存在 数据以表的形式存在
支持HDFS文件系统 支持多种文件系统(FAT,NTFS,EXT...)
使用行键进行访问 使用主键进行访问
原生支持分布式存储和计算引擎 可以通过外部中间件支持分库分表,但是底层还是单机引擎
具有行、列、列族、单元格等概念 具有行、列、单元格等概念
支持横向扩展 支持向上的纵向扩展
使用API、MapReduce、Spark、Flink等来访问数据 使用SQL进行查询
面向列族的存储,每个列族都是一个连续的单元 面向行的存储
不支持事务(支持单行数据的事务操作),不支持ACID特性 支持事务,并且保证事务的ACID特性
适合结构化数据和非结构化数据 适合结构化数据
一般是分布式的 一般是中心化的
不支持join等复杂操作 支持join等复杂操作

HBase vs HDFS

HDFS是一个非常适合存储大型文件的分布式文件系统,但是不是一个通用的文件系统,无法在文件中快速查询某个数据。

HBase构建在HDFS之上,并为大型表提供快速查找(和更新)的操作。HBase内部将大量数据放在HDFS中名为StoreFiles的索引中,以便进行高速查找。HBase比较适合做快速查询等需求。

HBase vs Hive

Hive是一种数据仓库工具,它的本质相当于将HDFS中已经存储的文件在MySQL中做一个映射,以便使用HQL去管理查询。Hive通常用于数据分析和清洗,因为延迟较高,所以适用于离线的数据分析和清洗。Hive也是基于HDFS和MapReduce的,Hive存储的数据依旧在DataNode上,编写的HQL语句最终转换成MapReduce代码进行执行。

HBase是一种面向列存储的非关系型数据库,用于存储结构化和非结构化数据,不适合做关联查询等操作。HBase基于HDFS,数据持久化存储的体现形式是HFile,存放在DataNode中,被RegionServer以region等形式进行管理。同时延迟较低,适合接入在线业务使用。

总结来说,Hive和HBase是两种基于Hadoop的不同技术,Hive是一种类SQL的引擎,运行MapReduce任务;HBase是一种基于HDFS的键值对NoSQL数据库。两种技术可以同时使用,Hive用来进行统计查询,HBase用来进行实时数据查询,数据可以从Hive写入到HBase,或者从HBase写入Hive。


HBase学习笔记-入门(1)-HBase基本介绍
http://example.com/2022/04/16/HBase学习笔记-入门-1-HBase基本介绍/
作者
EverNorif
发布于
2022年4月16日
许可协议