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

【大数据知识】HBase入门知识

文章目录

      • HBase核心特性:
      • HBase架构组成:
      • HBase数据模型:
        • 1. 命名空间(Namespace)
        • 2. 表(Table)
        • 3. 行(Row)
        • 4. 列族(Column Family)
        • 5. 列限定符(Column Qualifier)
        • 6. 单元格(Cell)
        • 7. 时间戳(Timestamp)
      • HBase的读写流程:
        • HBase写数据流程
        • HBase读数据流程
    • HBase和Hadoop的关系
      • Hadoop
      • HBase
      • HBase 和 Hadoop 的关系
    • 🤔 HBase 如何保证数据的一致性和高可用性?
      • 数据一致性
      • 高可用性
    • 🧐 HBase中列族和表之间的关系是怎样的?
    • 命令行示例
      • 连接到HBase Shell
      • 查看当前HBase Shell版本
      • 创建表
      • 删除表
      • 列出所有表
      • 启用表
      • 禁用表
      • 查看表的详细信息
      • 插入数据
      • 获取单行数据
      • 获取多行数据
      • 扫描表
      • 扫描表并使用过滤器
      • 删除单行中的单个单元格
      • 删除整行数据
      • 清空表(删除所有行)
      • 检查表是否存在
      • 添加列族
      • 修改列族
      • 删除列族
      • 退出HBase Shell
      • 查看集群状态
      • 批量执行命令
    • 相关文献

HBase是一个分布式、面向列的开源NoSQL数据库,它基于Google的BigTable模型构建,运行在Hadoop的HDFS之上。以下是HBase的一些核心特性和架构组成:

HBase核心特性:

  1. 面向列的存储:HBase的数据模型包括行键、列族、列限定符和时间戳。数据按列族存储,这使得对列族级别的数据操作更加高效。
  2. 高可靠性:HBase通过WAL(Write-Ahead Logging)和HDFS的多副本机制来保证数据的可靠性。
  3. 高性能:HBase利用LSM树(Log-Structured Merge-tree)数据结构来优化写入性能,并通过BlockCache和Bloom Filter等技术提高读取性能。
  4. 易扩展性:HBase可以在廉价的硬件上水平扩展,通过增加RegionServer节点来提升处理能力和存储能力。
  5. 稀疏性:HBase中的表可以设计得非常稀疏,空值列不占用存储空间。
  6. 多版本:HBase支持每个单元格的多版本数据,每个版本通过时间戳来标识。

HBase架构组成:

hbase-arc

  1. HMaster:负责管理RegionServer,实现负载均衡,管理和分配Region,以及处理RegionServer的故障转移。
  2. RegionServer:负责响应用户的I/O请求,向HDFS文件系统中读写数据,是HBase中最核心的模块。
  3. ZooKeeper:用于维护HBase集群的状态和元数据信息,实现HMaster的主从选举。
  4. HDFS:为HBase提供底层的数据存储服务。

HBase数据模型:

HBase是一个分布式、可扩展、高性能的NoSQL数据库,它基于Google的BigTable模型构建。以下是HBase数据模型的详细说明:

1. 命名空间(Namespace)

在HBase中,命名空间用于组织表。类似于关系型数据库中的数据库(Database)概念,每个命名空间下可以有多个表。HBase有两个自带的命名空间,分别是hbasedefaulthbase命名空间中存放的是HBase内置的表,而default命名空间是用户默认使用的命名空间 。
hbase-namespace

2. 表(Table)

HBase中的表由多行数据组成。表中的每一行都有一个唯一的行键(Row Key),并且可以有不同的列。HBase的表是稀疏的,意味着表中可以有大量的空列,而不会占用存储空间 。

3. 行(Row)

HBase表中的每行由一个行键和一个或多个列组成。行中的数据所属列族只能从该表所定义的列族中选取。行键的设计非常重要,因为数据是按照行键的字典顺序存储的 。

4. 列族(Column Family)

列族是HBase中的一个核心概念,它是多个列的集合。出于性能原因,列族通常在物理上拥有一簇列及其值。每个列族都有一组存储属性,例如是否应将其值缓存在内存中,如何压缩其数据或对其行键进行编码等。表中的每一行都具有相同的列族,但给定的行可能不会在给定的列族中存储任何内容 。
列族

5. 列限定符(Column Qualifier)

列限定符将添加到列族中,以提供给定数据段的索引。列族和列限定符经常用Column Family:Column Qualifier来一起表示。列是可以随意定义的,一个行中的列不限名字、不限数量,只限定列族 。

6. 单元格(Cell)

单元格是行、列族和列限定符的组合,它包含一个值和一个时间戳,时间戳表示值的版本。HBase中的数据细粒度比传统数据结构更细一级,同一个位置的数据还细分成多个版本 。

7. 时间戳(Timestamp)

时间戳与每个值一起写入,它是该值给定版本的标识符。默认情况下,时间戳表示写入数据时RegionServer上的时间,但是当您将数据放入单元格时,可以指定不同的时间戳值 。

HBase的数据模型设计支持了其高性能的数据存储和随机读写访问能力,特别是在处理大型数据集时。这种模型允许HBase在分布式环境中有效地存储和管理大量的结构化数据 。

HBase的读写流程:

HBase的读写流程是其核心功能的重要组成部分,以下是HBase数据读写流程的详细说明:

HBase写数据流程
  1. 客户端请求
    客户端通过ZooKeeper获取.META.表所在的RegionServer地址。

  2. 访问.META.
    客户端访问.META.表,确定要写入数据的Region信息。

  3. 发送写请求
    客户端向目标RegionServer发送写入数据请求。

  4. 写入WAL
    RegionServer首先将数据写入到HLog(Write-Ahead Log),确保数据的持久性。

  5. 写入MemStore
    数据随后写入到MemStore中,MemStore是内存中的结构,用于缓存新写入的数据。

  6. 响应客户端
    写入HLogMemStore成功后,向客户端发送写入成功的响应。

  7. 数据刷写
    MemStore达到一定阈值后,数据会被刷写到磁盘上的StoreFile中。

  8. Compaction操作
    随着时间的推移,StoreFile会不断增加,最终会触发Compaction操作,将多个StoreFile合并为一个,同时进行版本合并和数据删除。

  9. Region分裂
    StoreFile的大小超过一定阈值后,Region会分裂成两个新的Region,以保持数据的可管理性和访问效率。

HBase读数据流程
  1. 客户端请求
    客户端通过ZooKeeper获取.META.表所在的RegionServer地址。

  2. 访问.META.
    客户端访问.META.表,确定要读取数据的Region信息。

  3. 发送读请求
    客户端向目标RegionServer发送读取数据请求。

  4. 构建Scanner体系
    RegionServer构建一个RegionScanner,根据列族构建StoreScanner,每个StoreScanner为每个StoreFile构造一个StoreFileScanner

  5. 读取数据
    MemStoreBlockCacheStoreFile中查询目标数据,并将查到的所有数据进行合并。

  6. 返回结果
    将合并后的最终结果返回给客户端。

  7. 缓存数据
    StoreFile中读取到数据后,不是直接把结果数据返回给客户端,而是先把数据写入到BlockCache中,以加快后续的查询,然后再返回结果给客户端。

HBase的读写流程涉及到其核心的数据模型和架构组件,如HMasterRegionServerZooKeeper等,这些组件协同工作,确保了HBase的高可用性、高性能和易扩展性。更多详细信息可以参考HBase的官方文档和相关博客文章。

HBase和Hadoop的关系

HBase 和 Hadoop 是 Apache 软件基金会旗下的两个开源项目,它们都设计用来处理大规模数据集,但它们的关注点和用途有所不同。以下是 HBase 和 Hadoop 之间的关系和区别:

Hadoop

Hadoop 是一个由 Java 语言开发的开源框架,它允许跨分布式计算环境进行数据存储和处理。Hadoop 的核心包括两个主要组件:

  1. HDFS (Hadoop Distributed File System)

    • 一个高度可靠的存储系统,设计用于在低成本硬件上存储大量数据。
    • 数据在 HDFS 中以块的形式存储,并且每个块在多个节点上复制以提供容错能力。
  2. MapReduce

    • 一个分布式计算框架,用于处理和生成大型数据集。
    • MapReduce 通过将任务分解为映射(Map)和归约(Reduce)两个阶段来并行处理数据。

HBase

HBase 是一个开源的非关系型分布式数据库(NoSQL),它建立在 Hadoop 生态系统之上,特别是使用 HDFS 作为其底层存储系统。HBase 的特点包括:

  1. 列式存储

    • HBase 按列族存储数据,这使得对特定列族的数据访问更加高效。
  2. 低延迟访问

    • HBase 提供了对数据的快速随机访问,响应时间通常在毫秒级。
  3. 高可用性

    • HBase 设计了主从架构(Master/RegionServer)来保证高可用性。
  4. 自动分片

    • 表在物理上按行键范围分割成多个区域(Region),并可以在数据量增长时自动分裂。

HBase 和 Hadoop 的关系

  1. 存储依赖

    • HBase 依赖 HDFS 作为其底层存储,这意味着 HBase 中的数据实际上是存储在 Hadoop 分布式文件系统中的。
  2. 数据兼容性

    • HBase 表中的数据文件是以 Hadoop 的 HDFS 兼容格式存储的,这使得 HBase 可以利用 HDFS 的高可靠性和可扩展性。
  3. MapReduce 集成

    • HBase 可以与 Hadoop 的 MapReduce 框架集成,允许使用 MapReduce 进行批量数据处理和分析。
  4. 生态系统

    • HBase 和 Hadoop 都是 Hadoop 生态系统的一部分,它们可以与其他生态系统组件(如 Hive、Pig、Hue 等)一起工作,提供综合的数据处理解决方案。
  5. 互补性

    • Hadoop 擅长于批量处理大规模数据集,而 HBase 擅长于实时读写操作。它们可以互补使用,Hadoop 处理离线批量处理任务,而 HBase 处理实时或近实时的查询和分析。

总的来说,HBase 可以被视为 Hadoop 生态系统的一个上层应用,它利用 Hadoop 的存储和计算能力,提供了一个适合于随机实时读写访问的数据库解决方案。

🤔 HBase 如何保证数据的一致性和高可用性?

HBase是一种分布式、可扩展、面向列的NoSQL数据库,它基于Google的BigTable模型构建,并运行在Hadoop的HDFS之上。以下是HBase如何保证数据的一致性和高可用性的一些关键机制:

数据一致性

  1. 写入先行日志(WAL)
    HBase使用Write-Ahead Logging(WAL)来确保数据的一致性。在数据写入到MemStore之前,首先将其写入到WAL中。如果RegionServer发生故障,可以使用WAL中的日志来恢复数据,确保数据不会丢失。

  2. MemStore和StoreFile
    数据首先写入MemStore,这是一个位于内存中的数据结构,提供快速的写入性能。当MemStore达到一定大小时,其内容会被刷新到磁盘上,形成StoreFile。由于StoreFile是不可变的,因此在StoreFile生成后,所有的读操作都可以看到最新的写入。

  3. 版本控制
    HBase支持多版本数据存储,每个数据单元可以有多个时间戳版本。这意味着对同一行、同一列的多次写入将被存储为不同的版本,而不会覆盖之前的值,从而解决并发写入可能引发的冲突。

高可用性

  1. 自动故障转移
    HBase使用ZooKeeper来监控集群状态,包括Master和各个RegionServer的状态。当RegionServer失败时,ZooKeeper会检测到这一情况,并通知HBase Master。Master随后将失败的RegionServer上的数据Region分配给其他的RegionServer,从而恢复服务。这个过程是自动的,无需人工干预。

  2. Region复制
    HBase提供了Region复制(Region Replication)功能,允许用户为表中的数据设置多个副本(Replica)。每个副本都存储在不同的RegionServer上,这不仅提高了读取性能,而且增强了容错能力,因为一个副本的失效可以通过其他副本来补偿。

  3. 负载均衡
    HBase Master定期进行负载均衡操作,重新分配Region,以确保RegionServer之间的负载均匀。这有助于避免某些服务器因负载过重而导致性能下降或服务不可用。

  4. Master的高可用配置
    在生产环境中,通常配置多个HBase Master以实现高可用性。其中一个Master作为主Master运行,其他的保持在待命状态。如果主Master失败,一个备用Master将自动接管成为新的主Master,从而确保管理操作的连续性。

  5. 定期的数据快照和备份
    HBase的Snapshot机制允许用户在某一时刻对表进行快照,以便进行数据备份和恢复。快照机制确保了在快照创建时,表中的数据状态被固定,提供了一致的视图。

通过这些机制,HBase能够在分布式环境中提供高数据一致性和高可用性,使其成为大规模数据存储和处理的理想选择。

🧐 HBase中列族和表之间的关系是怎样的?

在HBase中,列族(Column Family)和表(Table)之间的关系是密切且定义明确的。以下是列族和表之间的关系详细说明:

  1. 表的结构

    • HBase中的表是由行(Row)和列(Column)组成的,这些行和列存储非结构化或半结构化的大数据。
    • 表中的所有数据都是按照列族来组织的。在HBase中,列族是数据存储和管理的基本单位。
  2. 列族的定义

    • 列族是一组具有相同属性的列(Column)的集合。列族在HBase中的定义是静态的,即在创建表时必须定义列族,而列(Column)是动态的,可以在表创建后随时添加。
    • 列族的概念类似于关系型数据库中的“表”,但是它们在结构和性能上有显著差异。
  3. 列族的存储

    • 在HBase的物理存储中,每个列族的数据存储在不同的HFile中。这些HFile存储在底层的Hadoop分布式文件系统(HDFS)上。
    • 同一列族中的数据会被存储在同一块磁盘空间上,这有助于提高数据的读写性能,因为相关的数据操作可以在同一列族内进行。
  4. 表的划分

    • HBase中的表可以根据行键(Row Key)的范围被水平分割成多个区域(Region)。每个Region负责表中的一部分数据。
    • 每个Region可以进一步划分为多个Store,每个Store对应一个列族。因此,一个Region包含多个Store,每个Store存储该列族的所有数据。
  5. 列族的属性

    • 列族具有一些属性,如版本数量(VERSIONS)、存活时间(TTL)、布隆过滤器(BLOOMFILTER)、数据块大小(BLOCKSIZE)等,这些属性可以在创建表时设置,并且对整个列族生效。
    • 这些属性有助于优化数据的存储和访问性能,以及控制数据的生命周期。
  6. 表的读写操作

    • 在HBase中,对表的读写操作通常是针对特定的列族进行的。例如,你可以读取或写入某个特定行的某个列族中的数据。
    • 由于列族的设计,HBase可以高效地执行批量读写操作,特别是当操作涉及整个列族时。
  7. 表的扩展性

    • HBase表的设计支持动态扩展。你可以在不影响现有数据和操作的情况下,向表中添加新的列族。
    • 这种灵活性使得HBase能够适应不断变化的数据需求和业务场景。

总结来说,列族是HBase表的一个核心组成部分,它们定义了表的结构和存储方式,并对表的性能和可扩展性有着重要影响。在设计HBase表时,合理规划列族是至关重要的。

命令行示例

HBase提供了一个强大的命令行接口,称为HBase Shell,它允许用户执行各种管理任务和数据操作。以下是一些常用的HBase Shell命令及其说明:

连接到HBase Shell

hbase shell

查看当前HBase Shell版本

version

创建表

create 'table_name', 'column_family'

删除表

disable 'table_name'
drop 'table_name'

列出所有表

list

启用表

enable 'table_name'

禁用表

disable 'table_name'

查看表的详细信息

describe 'table_name'

插入数据

put 'table_name', 'row_key', 'column_family:column_qualifier', 'value'

获取单行数据

get 'table_name', 'row_key'

获取多行数据

get 'table_name', 'row_key1'
get 'table_name', 'row_key2'

扫描表

scan 'table_name'

扫描表并使用过滤器

scan 'table_name', {FILTER => "SingleColumnValueFilter 'column_family', 'column_qualifier', =, 'binary:your_value'"}

删除单行中的单个单元格

delete 'table_name', 'row_key', 'column_family:column_qualifier'

删除整行数据

deleteall 'table_name', 'row_key'

清空表(删除所有行)

truncate 'table_name'

检查表是否存在

exists 'table_name', 'row_key'

添加列族

alter 'table_name', 'add', 'column_family'

修改列族

alter 'table_name', 'modify', 'column_family', 'MAX_VERSIONS => 5'

删除列族

alter 'table_name', 'delete', 'column_family'

退出HBase Shell

quit

查看集群状态

status 'table_name'

批量执行命令

可以使用batch命令来执行一系列操作,例如:

batch
put 'table_name', 'row_key1', 'column_family:column_qualifier', 'value1'
put 'table_name', 'row_key2', 'column_family:column_qualifier', 'value2'
# ... 更多操作 ...
execute

这些命令提供了对HBase表的基本操作和管理能力。在使用这些命令之前,请确保HBase服务正在运行,并且你有足够的权限来执行这些操作。更多高级命令和选项可以通过在HBase Shell中输入help来获取。

相关文献

【数据库知识】今天聊聊WAL(预写日志)
【大数据】一文教你看懂什么是Hadoop


http://www.kler.cn/a/369763.html

相关文章:

  • 《深度剖析Q-learning中的Q值:解锁智能决策的密码》
  • 数字化转型-工具变量(2024.1更新)-社科数据
  • Microsoft Visual Studio 2022 主题修改(补充)
  • 【ESP32】ESP-IDF开发 | WiFi开发 | UDP用户数据报协议 + UDP客户端和服务器例程
  • 判断子序列
  • 记录 | 基于Docker Desktop的MaxKB安装
  • 一文解决单调栈的应用
  • 【无标题】 text = text.encode(“utf-8“)
  • 下载数据集用于图像分类并自动分为训练集和测试集方法
  • 解决RabbitMQ脑裂问题
  • (蓝桥杯C/C++)—— 编程基础
  • PyTorch 中常用的函数方法
  • 代码随想录:513. 找树左下角的值
  • 大数据新视界 -- 大数据大厂之大数据重塑影视娱乐产业的未来(4 - 1)
  • 项目组件:(Json\Muduo)
  • Linux系统操作篇 one -文件指令及文件知识铺垫
  • 计算机网络-MSTP的基础概念
  • 衡石分析平台系统分析人员手册-导入图表库图表
  • 数据库课程 第一周
  • 熵与信息论
  • ip命令设置固定IP(暂时设置,重启失效)
  • Ubuntu中VSCode以sudo开始GDB调试C程序方法
  • 【electron8】electron实现“图片”的另存为
  • JavaScript数组常用方法 - 2024最新版前端秋招面试短期突击面试题【100道】
  • cobalt strikemetasploit 小记
  • appium 的工作原理