当前位置: 首页 > news >正文

HBase数据库面试知识点:第一部分 - 基础概念与特点(持续更新中)

目录

一、HBase基础概念

1. HBase定义

2. 核心组件

3. HBase的特点

二、HBase与传统RDBMS的区别

1. 数据类型

2. 数据操作

3. 存储方式

4. 伸缩性

5. 事务性

三、HBase数据模型

四、HBase的特点

五、HBase与Hadoop生态系统的关系


一、HBase基础概念

1. HBase定义

HBase是一个开源的、分布式的、面向列的NoSQL数据库,它是Apache Hadoop生态系统中的一部分。HBase基于Hadoop的分布式文件系统(HDFS)来存储数据,并提供了高可靠性、高性能、可伸缩性和面向列的数据存储能力。HBase的设计初衷是为了解决传统关系型数据库(RDBMS)在处理大规模数据集时的性能瓶颈和扩展性问题。

2. 核心组件

  • HBase Master:负责处理客户端的写请求,管理Region的分配和负载均衡,以及维护集群的状态信息。
  • HBase RegionServer负责数据的存储和读取,管理多个Region。
  • RegionHBase数据表在物理存储上的划分单元,每个Region由多个Store组成。
  • Store存储某个列族(ColumnFamily)数据的场所,包含多个MemStore和一个或多个HFile。
  • MemStore位于RegionServer内存中,用于暂存新写入的数据,待数据达到一定大小或达到触发条件后,会将其刷新到HFile中。
  • HFileHBase中数据的物理存储格式,是存储在HDFS上的二进制文件。

3. HBase的特点

  • 高可扩展性HBase通过水平扩展可以支持PB级别的数据存储,集群中的节点数量可以动态增加或减少,以应对数据增长和访问压力的变化。
  • 高可靠性HBase通过数据复制和分布存储实现高可靠性。默认情况下,每个Region的数据会复制三份存储在不同的RegionServer上,确保数据的冗余和容错。此外,HBase还利用ZooKeeper来实现集群的协调和管理,确保服务的高可用性和稳定性。
  • 高性能HBase支持高速的读写操作,尤其适用于实时数据访问和处理场景。其面向列的存储模式使得在读取特定列数据时具有更高的效率,减少了不必要的IO开销。
  • 面向列与传统的行式存储数据库不同,HBase采用面向列的存储模式。每个表由多个列族组成,每个列族包含多个列。这种存储模式使得HBase在处理大规模数据和高并发访问时具有优势,能够更有效地利用磁盘空间和网络带宽资源。

二、HBase与传统RDBMS的区别

1. 数据类型

  • HBase主要存储字符串类型的数据,而传统的关系数据库管理系统(RDBMS)支持多种数据类型(如整数、浮点数、日期等)。在HBase中,数据通常以字节数组(byte array)的形式存储和传输,这使得HBase在处理非结构化数据和半结构化数据时更加灵活和高效。

2. 数据操作

  • HBase仅支持表内数据的操作,不支持复杂的表间关系操作(如JOIN操作)。而RDBMS支持复杂的SQL查询和表间关系操作,提供了更丰富的数据处理和分析能力。

3. 存储方式

  • HBase采用面向列的存储模式,将同一列的数据存储在一起。这种存储方式使得在读取特定列数据时具有更高的效率,因为只需要读取和解析包含该列数据的部分数据块即可。而RDBMS采用行式存储模式,将同一行的数据存储在一起。这种存储方式在处理包含多列数据的记录时具有较高的效率,但在读取特定列数据时可能需要读取和解析整个记录的数据块。

4. 伸缩性

  • HBase支持水平扩展,可以通过增加节点数量来扩展集群的处理能力和存储容量。而RDBMS的扩展性相对较差,通常需要通过升级硬件或采用分区等技术来提高性能和容量。

5. 事务性

  • HBase没有事务支持,对数据的更新和删除操作是异步的,并且不保证数据的一致性。而RDBMS支持事务管理,可以通过ACID属性来保证数据的一致性和可靠性。在HBase中,对于需要强一致性的数据操作,需要借助外部工具或框架来实现(如HBase的Coprocessor或与其他系统(如Kafka、Flink等)集成)。

三、HBase数据模型

HBase的数据模型与关系型数据库有显著的不同。它基于行键(RowKey)、列族(ColumnFamily)、列(Column)和单元格(Cell)的层次结构。

  • 行键(RowKey)
    • 是HBase表中每条记录的唯一标识。
    • 设计原则:长度建议10~100字节,但越短越好,避免超过16字节,以提高存储和查询效率。
    • 重要性:决定了数据在HBase中的物理存储顺序和访问方式。
  • 列族(ColumnFamily)
    • 是HBase中数据的逻辑分组,可以包含多个列。
    • 特点是所有列族的数据在物理存储上是分开的,但属于同一列族的数据会存储在一起。
    • 设计时,列族的数量不宜过多,一般建议每个表不超过几个列族。
  • 列(Column)
    • 列是列族下的具体字段,列名和时间戳组成。
    • 在HBase中,列的数量可以动态增加,同一表中的不同行可以有不同的列。
  • 单元格(Cell)
    • 是行、列、时间戳和数据值的组合。
    • 数据值以字节数组的形式存储,可以是任意类型的数据,但HBase内部只处理字节数组。

四、HBase的特点

  1. 稀疏性
    • 在HBase中,空(null)的列并不占用存储空间,表可以设计得非常稀疏。
    • 这使得HBase非常适合存储半结构化或非结构化数据,如日志文件、用户行为数据等。
  2. 多版本数据
    • HBase支持数据的多个版本,每个单元中的数据可以有多个版本。
    • 版本号通常是数据插入时的时间戳,可以根据需要查询和恢复数据的旧版本。
  3. 数据类型单一
    • HBase中的数据都是字符串(或字节数组)类型,没有类型系统。
    • 这简化了数据处理的复杂性,但也需要用户自行处理数据类型转换和验证。
  4. 主从架构
    • HBase采用主从架构,其中HBase Master是主节点,负责管理和协调集群的运行;RegionServer是从节点,负责数据的存储和读取。
    • 这种架构使得HBase能够支持高并发的读写操作,并提供了较好的容错性和可扩展性。
  5. 与Hive的区别
    • Hive是基于Hadoop的一个数据仓库工具,提供了类似SQL的查询接口;而HBase是一个NoSQL数据库,提供了面向列的存储和访问方式。
    • Hive适用于离线批处理查询场景,而HBase适用于实时数据访问和处理场景。两者可以配合使用,如将Hive的数据导出到HBase进行实时查询。

五、HBase与Hadoop生态系统的关系

  • HBase是Hadoop生态系统中的一个重要组件,与HDFS、MapReduce、ZooKeeper等紧密集成。
  • HDFS为HBase提供底层存储支持,使得HBase能够处理大规模数据集。
  • ZooKeeper用于管理HBase集群的状态信息,如Region的位置、节点的状态等。
  • MapReduce可以与HBase结合使用,进行大规模数据分析和处理。

相关文章:

  • 电商API接口的采集实例:京东商品详情API接口的采集过程和步骤分析
  • 二叉树的算法题目
  • SolidWorks官方授权代理商亿达四方带您解读最新SW版本特性
  • Java Opencv识别图片上的虫子
  • [汇总] CentOS中查询端口终止进程的指令
  • 启动mysql 3.5时出现 MySql 服务正在启动 . MySql 服务无法启动。
  • tim定时器 输入捕获模式下 TIM–ICStructinit(TIM–ICStructinit) 这个值 解析
  • C++中的结构体——结构体嵌套结构体
  • 全球5G时代,智启未来生活
  • HandyControl的属性编辑器如何绑定自定义控件,并集成到自定义编辑器
  • 接口自动化测试框架-fixture函数使用
  • 【FreeRTOS】软件定时器 software timer(上)
  • 教你一招,告警恢复时如何拿到恢复时的值?
  • 代理模式与静态代理、动态代理的实现(Proxy.newProxyInstance、InvocationHandler)
  • 网站选择定制化的优缺点
  • Android开源项目规范总结
  • go append函数以及写入
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • IndexedDB
  • js中forEach回调同异步问题
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • SwizzleMethod 黑魔法
  • tensorflow学习笔记3——MNIST应用篇
  • 给新手的新浪微博 SDK 集成教程【一】
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • # 服务治理中间件详解:Spring Cloud与Dubbo
  • ## 1.3.Git命令
  • #Linux(Source Insight安装及工程建立)
  • #图像处理
  • (11)(2.1.2) DShot ESCs(四)
  • (2015)JS ES6 必知的十个 特性
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (C语言)球球大作战
  • (ros//EnvironmentVariables)ros环境变量
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (论文阅读40-45)图像描述1
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • (译)计算距离、方位和更多经纬度之间的点
  • (原創) 物件導向與老子思想 (OO)
  • (转)【Hibernate总结系列】使用举例
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .Net Core 生成管理员权限的应用程序
  • .NET MVC 验证码
  • .NET 使用 XPath 来读写 XML 文件
  • .NET 使用配置文件
  • .net操作Excel出错解决
  • .NET建议使用的大小写命名原则
  • /etc/sudoers (root权限管理)
  • @EnableConfigurationProperties注解使用
  • [c++] 自写 MyString 类
  • [C++]:for循环for(int num : nums)
  • [Contiki系列论文之2]WSN的自适应通信架构
  • [CTF夺旗赛] CTFshow Web1-12 详细过程保姆级教程~