Hbase学习笔记(我太难了)

什么是Hbase?

HBase是一个高可靠性,高性能,面向列,可伸缩式的分布式存储系统

HBase的目标是存储并处理大型的数据(具体说是仅需使用普通的硬件配置,就能够处理由成千上万的行和列所组成的大型数据)

Hbase特点

海量存储、

列式存储、

极易扩展(

​ 基于上层处理能力的扩展(RegionServer)
​ 基于存储的扩展(HDFS)
​ 通过横向添加RegionServer机器,进行水平扩展,进行Hbase上层处理能力,即提升Hbase服务更多Region的能力)、

高并发(指并发情况下,单个io的延迟下降并不多)、

稀疏(列数据为空不会占用存储空间)

HBase架构

Hbase物理架构

Hbase采用Master/Slave架构

HMaster、RegionServer、Zookeeper、Hbase Client、Region

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KvaSxBSV-1595333610647)(…/…/…/…/Pictures/Typora/image-20200720094831309.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PL9otZys-1595333610649)(…/…/…/…/Pictures/Typora/image-20200720102146869.png)]

HMaster

Hmaster是Hbase集群的主节点,可配置多个,实现HA(高可用)

用于管理和分配Region

负责RegionServer的负载均衡

发现失效的RegionServer并重新分配其上的Region

RegionServer

负责管理维护Region

一个RegionServer包含一个WAL(写日志用Hlog)、一个BlockCache(读缓存)、多个Region

一个Region包含多个存储区(store),每个存储区对应一个列簇

一个存储区由多个StoreFile和MemStore组成

HFile和WAL作为序列文件保存在HDFS上

Client与RegionServer交互

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g6GFuRMY-1595333610651)(…/…/…/…/Pictures/Typora/image-20200720095230125.png)]

Region 和Table

单个Table(表)被分区成大小大致相同的Region

Region是Hbase集群分布数据的最小单位

Region被分配给集群中的RegionServer

一个Region只能分配给一个RegionServer

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-De8aeIph-1595333610653)(…/…/…/…/Pictures/Typora/image-20200720095315309.png)]

Hbase逻辑架构

Row

Rowkey(行键)是唯一的并已排序

Schema可以定义合适插入记录

每个Row都可以定义自己的列,及时其他Row不使用(相关列定义为列族)

使用唯一时间戳维护多个Row版本(Hbase表具有多版本)

Hbase数据全部以字节存储

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L6foS9r4-1595333610654)(…/…/…/…/Pictures/Typora/image-20200720101248534.png)]

Hbase元数据管理

系统管理目录

系统目录表hbase:meta:存储元数据等
ZooKeeper存储hbase:meta表的位置信息

Hbase实际数据存储在HDFS上

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LN3L4kLy-1595333610656)(…/…/…/…/Pictures/Typora/image-20200720172932651.png)]

HBase数据结构

row-key

column family

cell

timestamp

命名空间

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jkqOnxHC-1595333610657)(…/…/…/…/Pictures/Typora/clip_image001.png)]

Table:表,所有的表都是命名空间的成员,即表必属于某个命名空间,如果没有指定,则在default默认的命名空间中。
RegionServer group:一个命名空间包含了默认的RegionServer Group。
Permission:权限,命名空间能够让我们来定义访问控制列表ACL(Access Control List)。例如,创建表,读取表,删除,更新等等操作。
Quota:限额,可以强制一个命名空间可包含的region的数量。

HBase原理

读流程

  1. client 访问zookeeper,从meta表中读取region的位置,然后读取meta表中的数据,meta表中存储了用户表的meta信息
  2. 根据namespace、表名和rowkey在meta表中获取对应的region信息
  3. 找到这个region对应的regionserver
  4. 查找对应的region
  5. 先从memstore找数据,如果没有,再到BlockCache里面读
  6. 如果BlockCache也没有,再到storeFile上读(为了读取效率)
  7. 从storefilel里读的数据,不是直接返回客户端,而是先写入blockcache,再返回客户端

写流程

  1. client 发送请求给 zk集群 ,获取meta表所在的RS(RegionServer)
  2. zk集群 返回meta表所在的rs 给client
  3. client 向HRegionServer发送请求获取meta表
  4. HRegionServer 返回meta表数据给 client
  5. client 向HRegionServer发送写数据请求
  6. 写入Hlog(WAL)
  7. 将数据写入memstore
  8. 反馈给client写入成功

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SEseUEMv-1595333610658)(…/…/…/…/Pictures/Typora/clip_image002-1595237990123.png)]

数据Flush过程

  1. 当memstore数据达到阀值(默认128M,老版本64M),将数据刷到硬盘,将内存中的数据删除,同时删除hlog中的历史数据

  2. 将数据存储到hdfs中

  3. 在hlog中做标记点

数据合并过程

  1. 数据块达到4块,Hmaster触发合并操作,Region将数据块加载到本地,进行合并;

  2. 当合并的数据超过256M,进行拆分,将拆分后的Region分配给不同的HregionServer管理;

  3. 当HregionServer宕机后,将HregionServer上的hlog拆分,然后分配给不同的HregionServer加载,修改.META.(宕机后,hlog拆分后划分给其他rs)

注意:HLog会同步到HDFS。

HBase API操作

环境准备

	<dependency>
      <groupId>org.apache.hbase</groupId>
      <artifactId>hbase-client</artifactId>
      <version>1.2.0</version>
    </dependency>
    <dependency>
      <groupId>org.apache.hbase</groupId>
      <artifactId>hbase-common</artifactId>
      <version>1.2.0</version>
    </dependency>
    <dependency>
      <groupId>org.apache.hbase</groupId>
      <artifactId>hbase-server</artifactId>
      <version>1.2.0</version>
    </dependency>

HBase API

获取Configuration对象
	//1.创建配置
	Configuration conf = HBaseConfiguration.create();
	//配置zookeeper的集群和端口
	conf.set("hbase.zookeeper.quorum","hadoop1");
	conf.set("hbase.zookeeper.property.clientPort", "2181");
<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值