ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Hbase2.0.5优化总结

2021-03-05 21:05:57  阅读:248  来源: 互联网

标签:总结 info splits 散列 分区 Hbase2.0 hbase 优化 手机号


Hbase2.0.5优化总结

1.Hbase优化

Hbase优化
核心就是结合分区_时间戳_关键字段联合使用。其中rowKey设计很重要。

2.实际生产中Hbase的使用

处理散列热点问题
散列热点问题即处理数据的倾斜问题,只要从事于大数据工作,解决数据倾斜问题就不可避免。
常见的散列问题:
1.“双十一”淘宝订单可能引起热点现象:处理方式:根据订单时间戳进行字符串反转,使数据更加散列
2.国庆节旅游热点问题等等。

rowKey设计的注意事项:
散列不能太散,需要稳定在一定的范围,不然数据不好进行聚合。

0. 需求: 存储手机号在某个时间打了多少分钟的电话
 
2. 2. 预分区
     -> 001|
001| -> 002|
002|
003|
...
300|

3. 对手机号进行hash,得到的值取模分区数,放到rowkey的最前端


4. 进一步散列,使用月份来划分用户的信息

对手机号和月份(202103)进行公式计算得到的值,进行hash,取模分区数,放到rowkey的最前端

001_
002_
003_
...
300_


4. 进行一个拼接得到完整的rowkey
分区号_yyyy-MM-dd HH-mm-ss_手机号



1)要求:找某某(131313131)在2021 某时刻 有没有打电话,打了几分钟
	求分区号,然后时间戳,然后手机号,三者用_下划线进行拼接==>rowKey,根据rowKey来查询统计

2)要求:找某某(131313131)在2021 某天 有没有打电话,打了几分钟
	在1)基础上使用scan扫描,按照分区号和时间扫描,按照手机号过滤,判断是否是某某,满足条件求和

3)要求:找某某(131313131)在2021 某月 有没有打电话,打了几分钟
	求出某月哈希,每个分区看一下

4)要求:找某某(131313131)在2021 某年 有没有打电话,打了几分钟
	不同月份进行哈希,每个分区看一下

3.预定分区

3.1 手动分区

create 'staff1','info', SPLITS => ['1000','2000','3000','4000']

在这里插入图片描述
5个region

手动分区有个问题,如果设定300分区,这样不好敲代码

3.2 生成16进制分区序列预分区

create 'staff2','info',{NUMREGIONS => 15, SPLITALGO => 'HexStringSplit'}

15,你给的region个数。
在这里插入图片描述
16进制分区不常用,容易引起分区数据倾斜,16进制 0-F,ASCI中数据在0-9之范围的数据,尤其是999999~aaaaaa大量使用,可能造成数据的倾斜。

因此在实际生产中压根不会用。

3.3按照文件设定的规则进行预分区

创建splits.txt文件内容如下:
aaaa
bbbb
cccc
dddd
ffff
eeee
然后执行:
create 'staff3', 'info',SPLITS_FILE => 'splits.txt'

注意不是按照a—b–c—d,随意写,但是要注意,文件不能有空行,比如eee下面空行,就会报错。
在这里插入图片描述
4.使用JavaAPI创建预分区

package com.atguigu.hbase;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;

import java.io.IOException;

/**
 * @author dxy
 * @date 2021/3/5 19:41
 */
public class HbasePrepartition_JavaAPI {
    public static void main(String[] args) throws IOException {
        //1.创建配置对象
        Configuration conf = new Configuration();

        //2.给该配置类添加配置信息
        conf.set("hbase.zookeeper.quorum", "hadoop102,hadoop103,hadoop104");

        //3.获取连接
        Connection connection = ConnectionFactory.createConnection(conf);

        //4.获取admin
        Admin admin = connection.getAdmin();


        //5.获取descriptor的builder
        TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(TableName.valueOf("default", "shuff4"));

        //6.创建列族描述对象
        ColumnFamilyDescriptor info = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("info")).build();

        //7.添加列族
        tableDescriptorBuilder.setColumnFamily(info);

        //8.创建对应的切分
        byte[][] splits = new byte[3][];
        splits[0] = Bytes.toBytes("aaa");
        splits[1] = Bytes.toBytes("bbb");
        splits[2] = Bytes.toBytes("ccc");

        //9.创建表
        admin.createTable(tableDescriptorBuilder.build(),splits);

        //9.关闭资源
        admin.close();
        connection.close();

    }
}

在这里插入图片描述
在这里插入图片描述

标签:总结,info,splits,散列,分区,Hbase2.0,hbase,优化,手机号
来源: https://blog.csdn.net/qq_43883124/article/details/114412066

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有