高可用(high available->HA)
在HBase中HMaster负责监控RegionServer的生命周期,均衡RegionServer的负载,如果HMaster挂掉了,那么整个HBase集群将陷入不健康的状态,并且此时的工作状态并不会维持太久。所以HBase支持对HMaster的高可用配置。
1.关闭HBase集群(如果没有开启则跳过此步)
[[email protected] hbase-1.3.1]$ bin/stop-hbase.sh
2.在conf目录下创建backup-masters文件
[[email protected] hbase-1.3.1]$ touch conf/backup-masters
3.在backup-masters文件中配置高可用HMaster节点
[[email protected] hbase-1.3.1]$ echo hadoop103 > conf/backup-masters
4.将backup-masters分发到其他节点
5.启动集群并打开页面测试查看
RowKey设计(rowkey design)
一条数据的唯一标识就是rowkey,那么这条数据存储于哪个分区,取决于rowkey处于哪个一个预分区的区间内,设计rowkey的主要目的 ,就是让数据均匀的分布于所有的region中,在一定程度上防止数据倾斜。接下来我们就谈一谈rowkey常用的设计方案。
注意:RowKey如何设计必须结合实际业务场景
案例一
|
|
案例二
|
|
-
rowkey涉及三原则:
- 长度原则
- 散列原则
- 唯一原则
- 在哪几个方面进行考虑?
|
foo0001 foo0002 foo0003 foo0004 |
a、Salt(加盐)
|
a-boo0003 b-foo0001 c-foo0003 c-foo0004 d-foo0002 |
b、hash (hash算法)
c、Reversing the Key(倒序:身份证号|手机号)
|
7.3预分区 每一个region维护着startRowKey与endRowKey[1,100),如果加入的数据符合某个region维护的rowKey范围,则该数据交给这个region维护。那么依照这个原则,我们可以将数据所要投放的分区提前大致的规划好,以提高HBase性能。 1.手动设定预分区 hbase> create 'staff1','info',SPLITS => ['1000','2000','3000','4000'] |
内存优化
HBase操作过程中需要大量的内存开销,毕竟Table是可以缓存在内存中的,一般会分配整个可用内存的70%给HBase的Java堆。但是不建议分配非常大的堆内存,因为GC(gabage collection)过程持续太久会导致RegionServer处于长期不可用状态,一般16~48G内存(128G)就可以了,如果因为框架占用内存过高导致系统内存不足,框架一样会被系统服务拖死。
内存:堆内内存(JVM)[on-heap]、堆外内存(受操作系统管理)[off-heap]