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内存就可以了,如果因为框架占用内存过高导致系统内存不足,框架一样会被系统服务拖死。
2、hbase的rowkey怎么创建好?列族怎么创建比较好?
hbase存储时,数据按照Row key的字典序(byte order)排序存储。设计key时,要充分排序存储这个特性,将经常一起读取的行存储放到一起(位置相关性)。
一个列族在数据底层是一个文件,所以将经常一起查询的列放到一个列族中,列族尽量少,减少文件的寻址时间。
设计原则
① rowkey 长度原则
② rowkey 散列原则
③ rowkey 唯一原则
如何设计
① 生成随机数、hash、散列值
② 字符串反转
③ 字符串拼接
3、hbase过滤器实现用途
增强hbase查询数据的功能
减少服务端返回给客户端的数据量
4、HBase宕机如何处理
宕机分为HRegisoner宕机和HMaster宕机。
如果是HRegisoner宕机,HMaster会将其所管理的region重新分布到其他活动的RegionServer上。由于数据和日志都持久在HDFS中,该操作不会导致数据丢失。所以数据的一致性和安全性是有保障的。
如果是HMaster宕机,HMaster没有单点问题,HBase中可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master运行。即ZooKeeper会保证总会有一个HMaster在对外提供服务。
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计算框架。
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,再返回给客户端。
如果你在学习过程中或者择业时有什么问题和困惑,请一定要扫码联系我,让我来帮助你!
点一下
您看我还有机会吗?
↓↓↓