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中,在一定程度上防止数据倾斜。

  1. rowkey 常用的设计方案:
    1)生成随机数、hash、散列值
    2)时间戳反转
    3)字符串拼接

  2. 设计规则
    总体设计需要看业务表的检索需求,业务表常用的字段,设计时考虑scan范围扫描,那么rowkey的前缀最好是可以枚举的字段或者时间字段,例如年、月、日、事件类型、商品类型等可穷举的类型。

  3. 需求举例
    hbase有一张通话表,包含员工手机号、目标手机号、通话时间、通话时长等字段,现要求检索员工一段时间内的通话记录。
    针对上诉需求在对rowkey设计的时候需要考虑到同一员工的通话记录尽量集中在几个region中,这样在检索时可以快速响应。

  4. 需求实现
    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、按照文件中设置的规则预分区

  1. 创建 splits.txt 文件内容如下:

    aaaa
    bbbb
    cccc
    dddd
    
  2. 执行预分区

    create 'staff3', 'info',SPLITS_FILE => 'splits.txt'
    

2.5、使用 JavaAPI 创建预分区

package com.hpsk.hbase<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值