Hbase

本质(是什么)(我在试着讲明白)

分布式的、面向列的开源数据库

作用(干什么)(我在试着讲明白)

用来非结构化数据存储

架构(有什么)(我在试着讲明白)

1、架构模型

在这里插入图片描述
HBASE的角色:client、master、zookeeper、regionserver、hlog五个角色组成
regionserver中有region、store
store中有memstore、storefile

client

操作hbase的接口,并维护客户端缓存

master

  • 分配region
  • 保证整个集群的所用regionserver负载均衡
  • 当发现某台regionserver宕机之后,重新分配region
  • 当region变大进行裂变的时候,master去分配region到哪一台regionserver

zookeeper

  • 保证任何时刻中集群中有且仅有一台avtive的master
  • 存储所有的region的寻址入口(所有的region元数据存储在哪一台regionserver上)
  • 监控regionserver的上线和下线信息,并实时通知master
  • 存储相关的表的schema数据

regionserver

  • 负责接收客户端的读写请求,处理对于region的io
  • 当某一个region变大之后,负责等分为两个region
regionserver中有其他节点(region、store)
region
  • 相当于表的概念,一张表至少对应一个region
  • 当表的数据过大的时候,region会裂变
store
  • 相当于列族,存储结构使用了LSM的数据模型
    store中有memstore、和storefile
memstore
  • 位于内存
  • 每一个store有一个memstore
storefile
  • 磁盘存储空间,将数据持久化的存储位置
  • 每一个region有一个或者多个storefile
  • storefile可以进行合并操作

hlog

2、数据存储模型

在这里插入图片描述
角色:rowkey,column family, qulifier , timestamp,cell

rowkey

  • 相当于Mysql的主键,唯一标识一行记录
  • rowkey是字典序
  • rowkey的长度最长是64k,但一般推荐10-100字节

column family

  • 一组列的集合
  • 列族必须作为表的schema定义给出
  • 列族是权限,存储的最小单位

qulifier

  • 可以动态的,随机插入
  • 表定义之后没有限制列,随着值的插入也把列插入
  • 列必须归属于某一个列族

timestamp

  • 时间戳,64位整数,精度是毫秒
  • 起版本号的作用,一个cell中可以存在多版本的数据
  • 时间戳可以自己定义,但是一般不推荐

cell

  • 存储数据的最小单位(逻辑概念)
  • 存储的kv格式的数据(K:rowkey+column family+qulifier+timestarmp;V:value)
  • hbase的cell存储数据的时候没有类型的区分,存放的都是字节数组

优缺点*(我在试着讲明白)*

优点

  1. 半结构化或非结构化数据
  2. 多版本号数据
  3. 仅要求最终一致性
  4. 高可用和海量数据以及很大的瞬间写入量

缺点

  1. 单一RowKey固有的局限性决定了它不可能有效地支持多条件查询
  2. 不适合于大范围扫描查询
  3. 不直接支持 SQL 的语句查询

流程(怎么运作)(我在试着讲明白)

HBASE的读写流程

读流程

  1. 客户端向zk中发送请求
  2. 从zk中拿到metadata的存储节点
  3. 去存储metadata的节点获取对应的region的位置
  4. 访问对应的region获取数据
  5. 先去metastore中查询数据,有结果就返回
  6. 没结果的话,去blockcache查找数据,有结果就返回
  7. 还是没有,就去storefile中查数据,并将查询的结果缓存到blockcache中,方便下次查询
  8. 将结果返回客户端

写流程

  1. client向zk发送请求
  2. 从zk中拿到metadata的存储节点
  3. 去存储metadata的节点获取对应的region的位置
  4. 访问对应的region写数据
  5. 首先向wal中写数据,写成功之后才会存储到memstore
  6. 当memstore中的数据量达到阈值之后,进行溢写,溢写成storefile
  7. store file 是一个个的小文件,会进行合并(minor,major)
  8. store file 是对hfile的封装,hfile是实际存储在hdfs上的数据文件

常用(必会)(我在试着讲明白)

1、常用的JavaApi

  1. HbaseAdmin 管理表(createtable、disabletable、deletetable)
  2. Htable 管理数据(put、get、scan、delete)
  3. FilerList(SingleColumnValueFiler、比较过滤器、专用过滤器、附件过滤器)

2、hbase cli 命令有哪些?

status,whoami,version,create,drop,disable,enable,put,get,delete,scan,list,flush,split

常见问题(必知)(我在试着讲明白)

1、HBASE的应用场景?

  • 非结构化或者半结构化的松散数据
  • 高并发客户端请求的数据
  • 要求实时性比较高的数据

2、HBASE速度快的原因?

  • 充分利用内存
  • 使用了LSM树
  • 缓存机制
  • 文件是顺序读

3、HBASE的特点?

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

4、hbase优化从哪些方面考虑?

优化方向:表设计,写表操作,读表操作,索引,htable和htablePool

表设计
  • 预分区
  • rowkey的设计原则(越短越好、hash、取反)
  • 不要设置过多的列族(1-2个)
  • SetMaxVersion
  • SetTTL
  • inMemory
  • 合并和切分
    合并: minor:小范围合并(3-10个文件)自动合并
    切分: 将一个region等分为两个region,分布在不同的regionserver上
写表操作
  1. 多客户端并发写,创建多个htable对象
  2. 属性设置(关闭autoFlush、设置客户端写缓存、WAL Flag·不推荐关闭·)
  3. 多线程写
读表操作
  1. 多客户端并发写,创建多个htable对象
  2. 属性设置(scan 设置抓取数据的条数;关闭resultScanner;指定查询的column和family,不要一整行的所有数据读进来)
  3. 多线程读
  4. blockCache
    一个regionserver共享一个blockCache
    blockCache默认占用0.2的内存空间,对于注重读响应的系统,可以适当调大值
    blockCache默认采用LRU的淘汰机制,默认淘汰最老的一批数据
索引

和ES做整合,步骤:

  1. 通过程序将Hbase中的数据读取存入ES中
  2. ES会创建索引,返回值是rowkey
  3. 当客户端请求进来之后,先去ES中查询获取rowkey的列表
  4. 再根据rowkey去hbase获取对应的数据
Htable和HtablePool

异议

有差错或者需要补充的地方,还望大家评论指出,并详细论证,相互学习,共同进步哈!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值