Hbase之基础知识
一、高可用
1.1、配置高可用
touch conf/backup-masters
echo hadoop103 > conf/backup-masters
1.2、分发文件
scp -r conf/backup-masters hpsk@hadoop103:/opt/module/hbase/conf/
scp -r conf/backup-masters hpsk@hadoop104:/opt/module/hbase/conf/
1.3、重新启动
bin/stop-hbase.sh
bin/start-hbase.sh
二、RowKey设计
一条数据的唯一标识就是 rowkey,那么这条数据存储于哪个分区,取决于 rowkey 处于哪个一个预分区的区间内,设计 rowkey的主要目的 ,就是让数据均匀的分布于所有的 region中,在一定程度上防止数据倾斜。
-
rowkey 常用的设计方案:
1)生成随机数、hash、散列值
2)时间戳反转
3)字符串拼接 -
设计规则
总体设计需要看业务表的检索需求,业务表常用的字段,设计时考虑scan范围扫描,那么rowkey的前缀最好是可以枚举的字段或者时间字段,例如年、月、日、事件类型、商品类型等可穷举的类型。 -
需求举例
hbase有一张通话表,包含员工手机号、目标手机号、通话时间、通话时长等字段,现要求检索员工一段时间内的通话记录。
针对上诉需求在对rowkey设计的时候需要考虑到同一员工的通话记录尽量集中在几个region中,这样在检索时可以快速响应。 -
需求实现
1、假设我们设定预分区数量120个,从[000…060…119]
2、手机号_年_月 % 120得到对应的预分区号
3、每个手机号_年_月格式的通话记录只会出现在一个分区中
4、例如:Math.abs(“15979542126-2022-02”.hashCode()) % 120 = 67
5、那么rowkey设计时:067|15979542126-2022-02-年月日时分秒等其他属性确保唯一
6、一年的数据只需检索12个不同的分区,这样就满足检索需求了
二、预分区
2.1、预分区数量规则
需要根据机器数量和数据量来定,一般是机器数量的2到3倍
2.2、手动设定预分区
create 'stu','info', SPLITS => ['1000','2000','3000','4000']
2.3、生成 16 进制序列预分区
create 'stu2','info',{NUMREGIONS => 15, SPLITALGO => 'HexStringSplit'}
2.4、按照文件中设置的规则预分区
-
创建 splits.txt 文件内容如下:
aaaa bbbb cccc dddd
-
执行预分区
create 'staff3', 'info',SPLITS_FILE => 'splits.txt'
2.5、使用 JavaAPI 创建预分区
package com.hpsk.hbase<