• 大数据 - HBase《一》- Hbase基本概念


    目录

    1.1. Hbase简介

    1.2 Hbase,Hive, Mysql对比

    1.3 Hbase数据模型

    🥙region(区域)

    🥙rowkey(行键)

    🥙列族(column family)

    🥙列(column Qualifier)

    🥙版本(version)-默认按时间戳去区分版本

    🥙cell(存储单元)

    🥙Store

    Hbase定位如何定位一条数据?

    1.4 Hbase架构模型

    🥙zookeeper作用

    🥙HMaster作用

    🥙HRegionServer作用

    Region 

    HLog

    HDFS

    1.5 Hbase百亿数据秒级查询的秘密


    1.1. Hbase简介

    H-Hadoop,base-database,故名思意Hbase就是Hadoop的数据库

    HBase是一种NoSQL(非关系)型的数据库,面向列进行存储。利用HDFS作为文件存储系统

    1.2 Hbase,Hive, Mysql对比

    • Hive是计算框架,不是数据库

    • Mysql是数据库,它的数据是落在磁盘上的,并不适用于海量数据的存储

    • Hbase的数据是存在hdfs上的,如果把数据落在磁盘上,那他就和mysql差不多

    1.3 Hbase数据模型

    Hbase是非关系型数据库,所以并没有事务、索引等机制。

    🥙region(区域)

    HBase 中的数据存储被划分为多个 Region,每个 Region 负责存储一定范围的数据。当数据量增加时,Region 会自动切分为更小的 Region,以便保持数据的均衡分布和高效访问。

    🥙rowkey(行键)

    在 HBase 中,每一行数据都由一个唯一的 Rowkey 来标识。Rowkey 是一个字节数组,通常用于按照字典顺序对数据进行排序和存储,以便快速查找和访问数据。

    🥙列族(column family)

    HBase是列式存储,就是以列族(Column Family)为基本单位进行数据的存储。每个列族包含多个列(Column Qualifier),它们共享相同的前缀。列族在创建表时需要预先定义,并且在表的生命周期内不能更改。

    在存储时,一个store对应于一个列族在磁盘上的存储结构,所以一般把数据相关性大的归为一个列族,一般数据划分三四个列族就够了

    🥙列(column Qualifier)

    列(Column Qualifier)是 HBase 表中的基本数据单元,它包含在列族(Column Family)中。每个列都与一个值相关联,可以存储任意类型的数据。列的名称是一个字节数组,通常用于表示属性或特征。

    列族下有任意列,每行的列都可以不相同。但是在企业中列族下面有哪些列都是提前约定好的

    🥙版本(version)-默认按时间戳去区分版本

    HBase 中的数据是按照版本进行存储的。每次写入数据时,都会附加一个时间戳作为版本标识。默认情况下,HBase 使用时间戳来区分不同版本的数据。可以在读取数据时指定版本号,以获取特定版本的数据。

    Hbase里面的数据是多版本的,比如zs前两年用的手机号是一个版本,后续换了一个手机号

    🥙cell(存储单元)

    在 HBase 中,每个单元格(Cell)存储一个特定的数据项,它由行键、列族、列标识和时间戳组成。每个单元格可以包含多个版本的数据,版本之间通过时间戳进行区分。

    🥙Store

    Store 是 HBase 中存储数据的物理存储单元,对应于一个列族(Column Family)在磁盘上的存储结构。每个列族包含一个或多个 Store,每个 Store 包含一个或多个 HFile 文件,用于存储数据。

    Store属于region,一个region里面有多个store

     

    Hbase 名称空间-->表-->region-->row(row_key column_family(cell(qualifier-value)))

    Hbase定位如何定位一条数据?

    一行数据有一个行键叫做rowkey,可以有若干个列族,每一个列族下面有若干个列,每个列中的数据存储支持多个版本(version)

    所以,在Hbase中定位一条数据需要通过:Rowkey->Column Family->Column Qualifier->Version

    1.4 Hbase架构模型

     

    HBase集群主要由HMaster、RegionServer和Zookeeper组成

    🥙zookeeper作用

    HBase通过Zookeeper来完成集群内各种机制的协调工作。主要工作职责如下:

    • 选举HMaster:保证任何时候,集群中只有一个Master.实现HMaster主从节点的failover.

    • 监控HRegionServer:实时监控HRegionServer的状态,将HRegionServer的上下线实时报告给HMaster.

    • 维护元数据和集群配置:存放整个HBase集群的元数据以及集群的状态信息,包括:

      • 存储所有HRegion的寻址入口,存储所有的元数据信息

      • 存储HBase的Schema,包括有哪些Table,每个Table有哪些Column Family.

     

    🥙HMaster作用

    (分配数据到底存储在哪个Region server中)

    • 管理和分配Region, 比如在Region split时分配新的region,在RegionServer退出时迁移其内的Region到其他RegionServer上。

    • 负责管理Region server,实现负载均衡

    • 发现失效的Regionserver并通过拆分LOG重新分配其上的region

    • 管理用户对table定义的各类DDL操作

     

    🥙HRegionServer作用

    • 管理master为其分配的Region

    • 处理来自客户端的读写请求

    • 负责和底层HDFS的交互,存储数据到HDFS

    • 负责Region变大以后的拆分

    • 负责Storefile的合并工作(StoreFile是抽象的,文件的引用形式)

    • 负载均衡的事情

    • 管理表的片段数据(region)

     

    Region 

    一个HRegionServer包含了多个HRegion。HBase将表中的数据基于RowKey的不同范围划分到不同的HRegion上,每个HRegion都负责一定范围的数据存储和访问。

    HRegion是HBase中分布式存储和负载均衡的最小单元,不同的HRegion可以分布在不同的HRegionServer上。每个表一开始只有一个HRegion,随着数据不断插入表,HRegion不断增大,当增大到指定阈值(10G)的时候,HRegion就会等分成两个HRegion,切分后其中一个HRegion会被转移到其他的HRegionServer上,实现负载均衡。

    当Table中的行不断增多,就会有越来越多的Region.为了防止前期数据的处理都集中在一个HRegionServer,我们可以根据自己的业务进行预分区。

    这样即使有一张百亿条数据的表,由于数据被划分到不同的HRegion上,每个HRegion都可以独立地进行读写,HBase读写数据的时候还可以与多HRegion分布式并发操作,所以访问速度并不会太大的降低。

     

    HLog

    一个HRegionServer只有一个HLog文件。负责记录数据的操作日志,当HBase出现故障的时候可以进行日志重放、故障恢复。例如磁盘掉电导致MemStore中的数据没有持久化存储到StoreFile,这时就可以通过HLog日志重放来恢复数据。

    HDFS

    HDFS为HBase提供底层数据存储服务,同时为HBase提供高可用支持。HBase将HLog存储在HDFS上,当服务器发生异常宕机时,可以重放HLog来恢复数据。

    比如:MySQL数据直接落入磁盘,HBase数据落入HDFS,HDFS数据落入磁盘。

    1.5 Hbase百亿数据秒级查询的秘密

    假设我们有100亿数据,大约10T,我们创建表时采用预分区的手段,假设有2000HRegion,一个HRegion 5G,我们只需要找这5G数据就可以找到user-1.

    一个HRegion有多个store,一个store对应一个列族,我们要查询的列肯定在一个列族中。假设我们这张表被我们分了3个列族,一个store差不多是1.7G,我们只需要找这1.7G数据就可以找到user-1.

    一个store分为0个或多个storeFile(HFile),一个StoreFile是100M,大约20个,为了公平20/2=10.我们只需要找这1G数据就可以找到user-1.

    storeFile中文又是KV映射的数据,按照1:20的比例。我们只需要找这80M数据就可以找到user-1.

    机械键盘差不多是100M/s,固态更不用说了,所以这就是HBase百亿数据秒级查询的秘密。

     

  • 相关阅读:
    小白常用几个命令记录
    RestTemplate使用笔记
    【Java】封装
    定位到叠放次序以及定位的拓展
    java中的IO缓冲流(高效流)---原始流的升级版
    Redis——Jedis的使用
    Scrapy
    卷积神经网络结合ESMM求解ctrcvr问题
    [wp]NewStarCTF 2023 WEEK5|WEB
    如何查看Pyinstaller生成的exe程序使用的是哪个Python虚拟环境?
  • 原文地址:https://blog.csdn.net/weixin_40968325/article/details/136687317