Hbase

HBase是一个基于Hadoop的开源数据库,提供高可靠性、高性能的列式存储。它适用于大规模数据存储,支持通过行键进行检索,适合大数据的实时读写操作。HBase的表具有稀疏性和可伸缩性,行键是主键,列族预先定义,时间戳用于版本控制。数据存储在HRegion中,由HRegionServer管理。HBase与传统RDBMS相比,更适合插入密集型和简单查询的场景,但不支持复杂的SQL操作。
摘要由CSDN通过智能技术生成

Hbase定义----Hadoop Databas

HBase是一个分布式的、面向列的开源数据库,该技术来源于Google论文"Bigtable:一个结构化数据的分布式存储系统"。介于NOSQL和RDBMS之间,仅能通过主键(row key)和主键的range来检索数据,仅支持单行事务(可通过hive支持来实现多表join等复杂操作)。

  • 高可靠性、高性能、面向列、可伸缩、实时读写

HBase中的表的特点

  • 大:一个表可以有上亿行,上百万列;
  • 面向列:面向列(族)的存储和权限控制,列(族)独立检索;
  • 稀疏:对于为空(null)的列,并不占用存储空间,因此,表可以设计的非常稀疏。

HBase中的表的基本概念

  • Rowkey - 行键(主键)
  • Column family - 列簇
  • Timestamp – 时间戳
  • Cell - {row key, column(= +), version}唯一确定,无数据类型,全部是字节码形式

image.png

HBase中的表的行键

Row Key是用来检索记录的主键,访问hbase table
中的行,有三种方式:

  • 通过单个row key访问
  • 通过row key的range
  • 全表扫描

Row key行键可以是任意字符串(最大长度 64KB,实际应用一般为 10-100bytes),在hbase内部,row key保存为字节数组。存储时,数据按照Rowkey的字典顺序(byte order)排序存储

HBase中的表的列族

  • 列族在创建表的时候必须声明,一个列族(ColumnFamily)可以包含多个列(qualifier),列族名尽可能短。

  • 列族中的列可以自由定义。列中的数据都是以二进制形式存在,没有数据类型;列名都以列族作为前缀,例如列族courses 的两个列的表示 courses:history/courses:math

HBase中的时间戳

  • 时间戳的类型是 64位整型。时间戳可以由hbase(在数据写入时自动 )赋值,此时时间戳是精确到毫秒的当前系统时间。时间戳也可由客户显式赋值。
  • HBase中通过row和columns确定的为一个存贮单元称为cell。每个 cell都保存着同一份数据的多个版本(按倒序排列,读取时最先找到的是最近的版本)。版本通过时间戳来索引

image.png

hbase原理

image.png

Hbase原理-表的物理存储

Hregion是Hbase中分布式存储和负载均衡的最小单元。最小单元就表示不同的Hregion可以分布在不同的HRegion server上。但一个Hregion是不会拆分到多个server上的。

image.png
HRegion虽然是分布式存储的最小单元,但并不是存储的最小单元。HRegion由一个或者多个Store组成,每个store保存一个columns family。每个Strore又由一个memStore和0至多个StoreFile组成。StoreFile以HFile格式保存在HDFS上

image.png

hbase 系统架构

client,zookeeper,master,regionserver相互通过心跳机制相同通信。
在这里插入图片描述

Client

  1. 包含访问hbase的接口,client维护着一些cache来加快对hbase的访问,比如region的位置信息。
  2. client访问hbase上数据的过程并不需要master参与(寻址访问zookeeper和region server,数据读写访问region server),master仅仅维护table和region的元数据信息,负载很低(不参与表数据IO的过程)。

zookeeper

  1. 保证任何时候,集群中只有一个master;
  2. 存贮所有Region的寻址入口;
  3. 实时监控Region Server的状态,将Region server的上线和下线信息实时通知给Master;
  4. 存储Hbase的schema,包括有哪些table,每个table有哪些column family

Hmaster

  1. 管理用户对Table的schema操作(增删改);
  2. 管理HRegionServer的负载均衡,调整Region分布;
  3. 在Region Split后,负责新Region的分配;
  4. 在HRegionServer停机后,负责失效HRegionServer 上的Regions迁移;
  5. Hmaster可以有多个,但是Active的只有一个,其余负责Backup;当active master宕机时,zookeeper负责从backup master中选举其一作为active master

HRegionServer

  1. HRegionServer内部管理了一系列HRegion对象;
  2. 每个HRegion对应了Table中的一个Region;
  3. HRegion中由多个HStore组成;
  4. 每个HStore对应了Table中的一个Column Family的存储;
  5. 一个物理节点机器只能有一个RegionServer;

HRegion

HBase使用RowKey将表水平切割成多个HRegion,每个HRegion都纪录各自的[StartKey和EndKey);Client可以通过HMaster快速的定位每个RowKey在哪个HRegion中。

HStore

  1. HStore存储是HBase存储核心,由两部分组成:
  • MemStore: Sorted Memory Buffer,用户写入的数据首先会放入MemStore
  • StoreFiles: 当MemStore满了以后会Flush成一个StoreFile(底层实现是HFile)
  1. 当StoreFile文件数量增长到一定阈值时,触发合并Compact操作,将多个StoreFiles合并成一个StoreFile,过程中会进行版本合并和数据删除。
  2. HBase其实只有增加数据,所有的更新和删除操作都是在后续的compact过程中进行的。

写操作

  1. client向region server提交写请求;
  2. region server找到目标region;
  3. region检查数据是否与schema一致;
  4. 如果客户端没有指定版本,则获取当前系统时间作为数据版本;
  5. 首先将数据写入WAL log;
  6. 然后将数据写入MemStore;
  7. 判断Memstore是否需要flush为Store文件

image.png

读操作

位置分析:相同的Cell可能存在的位置:

  • 对新写入的Cell,它会存在于MemStore中;
  • 对之前已经Flush到HDFS中的Cell,存在于某个或某些
    StoreFile(HFile)中;
  • 对刚读取过的Cell,可能存在于BlockCache中;

执行过程:依次扫描BlockCache、MemStore、StoreFile(HFile),将结果合并即可(Merge Read)

image.png

数据紧缩

MemStore每次Flush会创建新的HFile,而过多的HFile会引起读的性能问题,HBase采用Compaction机制来解决这个问题

minor compact

Minor Compaction 是指选取一些小的、相邻的 StoreFile 将他们合并成一个更大的StoreFile,在这个过程中不会处理已经 Deleted 或 Expired 的 Cell。一次 MinorCompaction的结果是更少并且更大的StoreFile

image.png

Major Compaction

Major Compaction是指将所有的StoreFile合并成一个StoreFile,在这个过程中,标记为Deleted的Cell会被删除,已经Expired的Cell会被丢弃,已经超过最多版本数的Cell会被丢弃。一次Major Compaction的结果是一个HStore只有一个StoreFile存在。Major Compaction可以手动或自动触发,然而由于它会引起很多的IO操作而引起性能问题,因而它一般会被安排在周末、凌晨等集群比较闲的时间

image.png

HBase 与关系型数据库的对比

HBase 有以下特点:

  • 数据类型,只有字符串;
  • 数据操作,简单操作,无复杂关联、连接操作;
  • 存储模式,列存储;
  • 数据维护,以插入替代修改删除操作;
  • 可伸缩性,可轻松增加或减少硬件数量。
    主要区别
  • Hbase 适合大量插入同时又有读的情况;
  • Hbase 的瓶颈是硬盘传输速度,Oracle 的瓶颈是硬盘寻道时间;
  • Hbase 很适合寻找按照时间排序 top n 的场景;
  • 索引不同造成行为的差异;
  • Oracle 既可以做 OLTP 又可以做 OLAP;
    Hbase 的局限
  • 只能做简单的 Key value 查询,复杂 sql 统计做不到。
  • 只能在 row key 上做快速查询。

HBase shell

image.png

image.png

image.png

image.png

image.png

image.png

HBase 的模式设计

  1. 列族的数量及列族的势:尽量使用一个列族;列族的数据多少称为势
  2. 行键(Row Key)设计
  • 加盐,给rowkey分配一个随机前缀,加盐之后的rowkey就会根据随机生成的前缀分散到各个region上;
  • 哈希,用哈希函数生成前缀加盐,使用确定的哈希可以重构完整的rowkey,可用get操作准确获取某一行数据;
  • 反转,反转固定长度或者数字格式的rowkey,使rowkey中经常改变的部分放在前面。如手机号的后四位。这样可有效的随机rowkey,但是牺牲了rowkey的有序性
  1. 尽量最小化行键和列的大小.尽量使列族名小,最好一个字符
  2. 版本的数量合适
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值