hbase 客户端_大数据hbase面试宝典(上)

43c155f0e5aa158d5363eafabe93bb22.png

1、Hbase调优

① 高可用

在HBase中,Hmaster负责监控RegionServer的生命周期,均衡RegionServer的负载,如果Hmaster挂掉了,那么整个HBase集群将陷入不健康的状态,并且此时的工作状态并不会维持太久。所以HBase支持对Hmaster的高可用配置。

② 预分区

每一个region维护着startRow与endRowKey,如果加入的数据符合某个region维护的rowKey范围,则该数据交给这个region维护。那么依照这个原则,我们可以将数据所要投放的分区提前大致的规划好,以提高HBase性能。

③ 优化RowKey设计

一条数据的唯一标识就是rowkey,那么这条数据存储于哪个分区,取决于rowkey处于哪个预分区的区间内,设计rowkey的主要目的,就是让数据均匀的分布于所有的region中,在一定程度上防止数据倾斜。

④ 内存优化

HBase操作过程中需要大量的内存开销,毕竟Table是可以缓存在内存中的,一般会分配整个可用内存的70%给HBase的Java堆。但是不建议分配非常大的堆内存,因为GC过程持续太久会导致RegionServer处于长期不可用状态,一般16~48G内存就可以了,如果因为框架占用内存过高导致系统内存不足,框架一样会被系统服务拖死。

f1dabecb08c429e56685d1dcda511db8.png

2、hbase的rowkey怎么创建好?列族怎么创建比较好?

hbase存储时,数据按照Row key的字典序(byte order)排序存储。设计key时,要充分排序存储这个特性,将经常一起读取的行存储放到一起(位置相关性)。

一个列族在数据底层是一个文件,所以将经常一起查询的列放到一个列族中,列族尽量少,减少文件的寻址时间。

设计原则

① rowkey 长度原则

② rowkey 散列原则

③ rowkey 唯一原则

如何设计

① 生成随机数、hash、散列值

② 字符串反转

③ 字符串拼接

e6573704bce468f7d68955943efb0635.png

3、hbase过滤器实现用途

增强hbase查询数据的功能

减少服务端返回给客户端的数据量

4、HBase宕机如何处理

宕机分为HRegisoner宕机和HMaster宕机。

如果是HRegisoner宕机,HMaster会将其所管理的region重新分布到其他活动的RegionServer上。由于数据和日志都持久在HDFS中,该操作不会导致数据丢失。所以数据的一致性和安全性是有保障的。

如果是HMaster宕机,HMaster没有单点问题,HBase中可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master运行。即ZooKeeper会保证总会有一个HMaster在对外提供服务。

05c094d216ac2a3e61a649372861c92c.png

5、hive跟hbase的区别是?

共同点:

hbase与hive都是架构在hadoop之上。都是用hadoop作为底层存储。

区别:

① Hive是建立在Hadoop之上,为了减少MapReduce jobs批处理系统的编写工作,HBase是为了支持弥补Hadoop对实时操作缺陷的项目。

② 想象你在操作RMDB数据库,如果是全表扫描,就用Hive+Hadoop,如果是索引访问,就用HBase+Hadoop。

③ Hive query就是MapReduce jobs,可以从5分钟到数小时不止,HBase是非常高效的,肯定比Hive高效的多。

④ Hive本身不存储和计算数据,它完全依赖于HDFS和MapReduce,Hive中的表纯逻辑。

⑤ hive借用hadoop的MapReduce来完成一些hive中的命令的执行。

⑥ hbase是物理表,不是逻辑表,提供一个超大内存的hash表,搜索引擎通过它来存储索引,方便查询操作。

⑦ hbase是列存储。

⑧ 作为底层存储的hdfs,是存放文件的系统,而Hbase负责组织文件。

⑨ hive需要用到hdfs存储文件,需要用到MapReduce计算框架。

05e4a1f9a977e91262f452f1dd20844f.png

6.hbase写流程

① 客户端要连接zookeeper, 从zk的/hbase节点找到hbase:meta表所在的regionserver(host:port)。

② regionserver扫描hbase:meta中的每个region的起始行健,对比r000001这条数据在哪个region的范围内。

③ 从对应的info:server key中存储了region是由哪个regionserver(host:port)在负责的。

④ 客户端直接请求对应的regionserver。

⑤ regionserver接收到客户端发来的请求之后,就会将数据写入到region中。

7、hbase读流程

① Client连接zookeeper,找到hbase:meta表所在的regionserver。

② 请求对应的regionserver,扫描hbase:meta表,根据namespace、表名和rowkey,在meta表中找到r00001所在的region是由哪个regionserver负责的。

③ 找到这个region对应的regionserver。

④ regionserver收到了请求之后,扫描对应的region,返回数据到Client。

注意:先从MemStore找数据,如果没有,再到BlockCache里面读。BlockCache还没有,再到StoreFile上读(为了读取的效率)。

如果是从StoreFile里面读取的数据,不是直接返回给客户端,而是先写入BlockCache,再返回给客户端。

如果你在学习过程中或者择业时有什么问题和困惑,请一定要扫码联系我,让我来帮助你!

c73ed8f041c2fc547d53007475965954.png

点一下

您看我还有机会吗?

↓↓↓

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值