HBASE 相关问题理解

1 阐述Hbase写数据流程

     前提是主节点maser正常开启

1 首先客户端发送写数据, 请求zk写,zk找寻meta元数据位置,

2返回给客户端meta位置

3客户端拿到meta解析put数据rk在哪个region上,请求regionserver获取元素表

4 下载到客户端本地,方便下次直接拿取

5 客户端请求rs写入  put 'a' , 'rk001' ....

6 在rs 中写入, 操作写入日志文件,  数据写入store,写进本地memstore ,

然后1 单个文件达到128M 会默认flush到hdfs

       2 经过人为将数据flush到hdfs,

       3 hbase会经过一段时间flush到hdfs

       4  节点的内存到达阀值也会flush到hdfs

       (包括日志文件)


2 阐述hbase读数据流程

1客户端发送读的请求到zk ,zk返回元数据的位置信息

2 解析meta拿到元数据位置,请求rs获取元数据表

3 元数据下载到本地

4 解析 然后请求对应的rs读取数据

5 到rs节点上1 首先找寻region的memstore文件看有没有,

                     2 没有到缓存中找,

                     3 再没有就请求hdfs获取

             hdfs中有很多文件怎样找寻的呢?

                     1   存储时设计二级索引,相对会快一点,但是没有到达很快

                      2   hfile 文件底层有算法查询速度贼快,布隆过滤器,在hfile文件中会开辟一段空间给布隆,布隆底层其实和hashmap差不多,他是将拿到的rk进行hash算法得到数值然后在空间中找到位置,看是1还是0 ,1是可能有(因为有几率很小的hash碰撞,导致数据误判),0是一定没有,这样查找非常快,去hflie找rk位置

6  找到就开始读取

想了解布隆过滤器算法的可以观看博客   https://blog.csdn.net/houzuoxin/article/details/20907911


3 什么是二级索引, 意义何在 ,怎么使用

二级索引其实说白了就是一个表的最简单好查索引对应的value是另一个索引  , 查询要比单索引快

假如有一个电影类型的表,电影名movie , 时间戳 timestamp , 评分 rate ,用户uid  

设计索引一般是,电影名+时间戳或者uid+时间 ,uid+电影名+时间,不同的需求有不同的设计模式,rk的设计关系到查询的快慢,还要避免热点问题,查询热点和插入热点,你是查询多还是插入多

但是要求需要特别快速时,那我们就开始使用二级索引了,

写一个简单的二级索引   

rk设计成uid_时间  对应的value是电影_时间\

value又是下一级的rk 对应的值是所有信息,movie,timestamp,rate,uid

这样一来查询非常快,先查询uid+时间比如u001_529209   对应到992_298345

992_298345   对应992,4288543,5分,u001  这样就很快,降低了重复率

4 Hbase中的rowkey是什么,怎么设计

rowkey设计很关键,这直接影响到查询,

1   RK是一行的唯一标识

2   在写数据的时候  数据会写到memstore (按rk升序排列)写到hdfs中是有序得

3   在磁盘中数据存储的位置 关键就是rowkey

5   hflie中的数据  以rk建立索引

5   put数据到region中 确定数据的位置根据  startkey endkey 

6 查询时 依靠rowkey 

rowkey设计尽量不要太长也不要重复率特别高,

Rowkey是一个二进制码流,Rowkey的长度被很多开发者建议说设计在10~100个字节,不过建议是越短越好,不要超过16个字节。

原因如下:

(1)数据的持久化文件HFile中是按照KeyValue存储的,如果Rowkey过长比如100个字节,1000万列数据光Rowkey就要占用100*1000万=10亿个字节,将近1G数据,这会极大影响HFile的存储效率;

(2)MemStore将缓存部分数据到内存,如果Rowkey字段过长内存的有效利用率会降低,系统将无法缓存更多的数据,这会降低检索效率。因此Rowkey的字节长度越短越好。

(3)目前操作系统是都是64位系统,内存8字节对齐。控制在16个字节,8字节的整数倍利用操作系统的最佳特性。

 

根据业务避免热点问题

rowkey 可以是 前缀_时间  前缀_id_时间 反转前缀

 


5 什么是HBASE热点问题  如何避免

热点问题是同一时间大量查询上传下载在一台机器region上,也是并发问题

1  rowkey设计合理,

2  根据业务避免设计,业务是查询多还是插入多

3  加配置 ,内存(这个操作就比较溜了)

4  拆分region

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值