Hbase是什么?

Hbase/Hadoop Database

是什么

概念/定义

Hbase是一个分布式,可扩展,支持海量数据存储的noSQL数据库

优点

支持大量的数据存储

易拓展

自动切片,自动故

障转移

可以使用Java API编程

缺点

没有高级查询语句

延迟较MySql等关系型数据库大

需要分布式运行,需要一定的机器数量

名词解释

namespace 类似于mysql database

rowkey:每条数据的唯一标识,hbase中的数据按照rowkey字典序排序的(1 10 100 101 11 20 21)

region:hbase分布式存储的基础,,建表时由split语句可以各region所包含startkey和stopkey,进而划分为不同的region分到不同的服务器中。

列簇:一组列的集合,同一个表中,拥有相同数量的列簇,列簇中可以拥有不同数量的列,列簇中列的宽度是动态的,在插入数据时指定。

store:每个region的每个列簇存储成为一个store,作为基础文件单元

version :Hbase对数据的修改实际上是put(时间戳,new val),这个修改不会删除旧值,而是将新值的数据加入到表中,建立列簇时可以指定version的值,Hbase最多保存该值数量的最新历史数据。

cell:由rowkey,列簇,列名,时间戳 唯一确定的单元
在这里插入图片描述

为什么

架构/原理/数据结构

Region Server

1.负责客户端的数据操作请求(DML)

2.region split,store file, compact

Master

1.监听Region Server服务器状态

2.在其故障时启动故障转移机制:在其他服务器上创建新的region,将元数据与实际存储在HDFS上的数据关联

3.负责Region Server的负载均衡

4.负责表结构的操作(DDL)

HDFS

为Hbase提供底层的数据存储服务,为Hbase提供高可用的支持

Zookeeper

1.Master的高可用

2.Region Server 的状态监听

元数据

hbase:meta这个表中存储了所有表的元数据,包括所有region所在的服务器,region的名称,以及时间戳。

flush触发条件

以下触发条件都会触发flush,但flush的最小单位是region,即每次触发flush都会flush该region的所有Store的MemStore,所以region的列簇不适合设置过多,工作中一般指定为1-2个

1.MemStore存储数据达到128M

2.region中所有的MemStore数据大小达到512M

3.RegionServer所有region的所有MemStore的数据总大小达到java_heap * 40% * 95%,此时会将当前RegionServer下的所有Region根据其所有MemStore占用大小排序,优先flush占用空间大的region

4.region距离上次flush已经达到一个小时

5.当WAL文件数量已经达到32个时

6.手动flush

标记删除

Hbase数据存储于HDFS上,并不能像关系型数据库一样随意删改,实际上的删除只是标记删除,使该值不可见,等到下次major Compact时才会真正的删除。

考虑:标记删除一个范围内的数据,然后又添加了该范围内的数据,新增数据会被删除吗?

Compact
Minor Compact

触发条件:小文件数达到3个时,会触发文件的合并

合并过程:合并时只是单纯的将多个小文件合并成一个大文件,不会删除或过滤过期版本。

合并结果:出现多个大文件

Major Compact

触发条件:7天一次

合并过程:将StoreFile的所有文件合并成一个大文件,会删除或过滤过期版本

合并结果:StoreFile下只有一个文件

Region Split

默认创建表时只有一个Region,而一个Region只能存在于一个RegionServer上,是不支持分布式的。Hbase的RegionServer会在Region数据达到一定时,自动切分,分裂Region,再由Master分配到不同的Server上。

0.9-2.0

分裂标准:min(10G(默认), memStore flush.size * RegionNum^2) RegionNum是该服务器下的该表的Region个数

写流程

在这里插入图片描述

StoreFile

Hbase保存在HDFS上具体存储数据的物理文件,每个store每次flush内存区都会产生一个,以Hfile格式保存

MemStore

写入的缓存,写入数据时先存入MemStore内存区,并在区中排序,触发flush后将区中数据落盘

WAL

Write-Ahead logfile,预写日志。为了防止MemStore内存区中的数据丢失,写入时会先数据将写到预写日志,内存区flush完成后会删除预写日志中的相应内容。也便于故障转移后的恢复。

流程

1)Client先访问Zookeeper,获取hbase:meta表位于哪个RegionServer。

2)访问对应的RegionServer,获取hbase:meta表,根据读请求的namespace:table/rowkey,查询出目标数据位于哪个RegionServer中的哪个Region中。并将该table的region信息以及meta表的位置信息缓存在客户端的meta cache,方便下次访问(当触发负载平衡或故障转移后,需要重新缓存meta表)。

3)与目标RegionServer进行通讯;

4)将数据顺序写入(追加)到WAL;

5)将数据写入对应的MemStore,数据会在MemStore进行排序;

6)向客户端发送ack;

7)等达到MemStore的刷写时机后,将数据刷写到HFile。

读流程

1.向z

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值