hbase--面试题

  • 1.简单叙述hbase?
    

HBase是一个分布式的、面向列的开源非关系型数据库,列式存储可以解决数据的稀疏性,节省存储的开销。底层依赖于hdfs,使用hdfs作为底层存储系统。hbase主要用于存储非结构化和半结构化数据,依赖hdfs。hbase使用LSM树来作为底层的存储结构。提供了WAL和replication机制,具有很好的可靠性。

  • 2.hbase的底层体系结构
    

在这里插入图片描述
主要模块是zookeeper、regionserver、client、master。
zookeeper:负责存储master基本信息,存储所有region的寻址入口。负责监控regionserver的状态。
Hmaster:负责region分裂后新region的分配,负责regionserver发生故障时region的迁移。负责regionserver的负载均衡,负责管理用户对表的增删改查。
regionserver:负责用户的io请求,负责region分裂。
regionserver:每个regionserver由多个region组成,region由一个或者多个store组成。每个store存储一个columns family(列族)。每个store由一个memstore和blockcache和0至多个storefile.
用户请求先写入到memstore,当memstore写满后会flush成一个hfile.当hfile的数量达到一个阀值后进行compact成一个hfile.触发compact之后,hfile越来越大,最后会导致region分裂,一个变成两个。

  • 3.Hbase的表结构
    

在这里插入图片描述

  • 4.Hbase表中新建列对行键由什么影响?
    

1.增加了行键的冗余
2.hbase的flush与compact是以region为单位

  • 5.hbase中rowkey的设计原则?
    

hbase没有数据类型,所有的数据都被转成字节数组,行键以一个空的数组来表示起始和结尾。
1.rowkeyt设计不应该过长,因为rowkey是冗余存储,数据持久化到hfile是按照key-value方式存储的,memstore将缓存部分数据到内存,如果rowkey字段过长内存利用率降低。
2.rowkey尽量散列,避免热点问题访问造成性能下降。通过散列或者将rowkey进行md5加密取前6位作为前缀。因为行键是按照字典顺序递增的,若写入的行键是递增的,那么会集中某段时间对region进行写入操作。
3.必须保证rowkey的唯一性。

  • 6.hbase region的预分区?
    

在创建hbase表的时候默认一张表只有一个region。所有的put操作都会往这个region填充数据,这时所有的负载都在同一个机器上,当这个一个region过大时,就会进行split。如果在创建hbase的时候就进行预分区则减少当数据量猛增时由于region split 带来吗的资源消耗。
hbase表的预分区需要结合业务来选择分区的key值,每个region都有一个startkey和endkey来表示该region存储的rowkey范围。如果知道hbase数据表的key分布情况,就可以在创建表的时候对hbase进行region预分区。这样可以防止大数据量插入时候的热点问题,提供插入的效率。
创建预分区的方法:1.采用hbase自带的regionsplitter()工具,主要是md5算法生成md5的校验和,作为region开始键。2.使用用户自己的算法进行预分区。

  • 7.在hbase中regionserver发生故障后的处理过程?
    

每个regionserver都有一个Hlog对象,每次用户请求写入memstore之前会先写入Hlog对象,当Hlog对象写满会被flush到磁盘。当regionserver发生故障时,zookeeper不能通过心跳与regionserver保持通信,则会删除regionserver的节点。master通过watcher感知到之后,首先处理Hlog,将其中的不同region的log拆分到不同的region目录中。然后将region进行重新分配,分配这些region的regionserver机器。在加载region的过程中发现有hlog,先将hlog数据放入memstore,然后flush到hfile,完成数据恢复。region迁移要下线,一会暂时不能用,但是速度很快,不会对数据读写造成影响。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大数据学习爱好者

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值