当前位置 博文首页 > Shockang的博客:HBase 表的预分区是什么?为什么要预分区?如何

    Shockang的博客:HBase 表的预分区是什么?为什么要预分区?如何

    作者:[db:作者] 时间:2021-08-24 13:28

    前言

    本文隶属于专栏《1000个问题搞定大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

    本专栏目录结构和参考文献请见1000个问题搞定大数据技术体系

    正文

    当一个table刚被创建的时候,Hbase默认的分配一个region给table。

    也就是说这个时候,所有的读写请求都会访问到同一个regionServer的同一个region中,这个时候就达不到负载均衡的效果了,集群中的其他regionServer就可能会处于比较空闲的状态。

    解决这个问题可以用预分区(pre-splitting),在创建table的时候就配置好,生成多个region。

    为何要预分区?

    • 增加数据读写效率
    • 负载均衡,防止数据倾斜
    • 方便集群容灾调度region
    • 优化Map数量

    如何预分区?

    每一个region维护着startRow与endRowKey,如果加入的数据符合某个region维护的rowKey范围,则该数据交给这个region维护。

    手动指定预分区

    create 'person','info1','info2',SPLITS => ['1000','2000','3000','4000']
    

    在这里插入图片描述

    • 也可以把分区规则创建于文件中
    cd /opt/bigdata/
    
    vim split.txt
    
    • 文件内容
    aaa
    bbb
    ccc
    ddd
    
    • 执行
    create 'student','info',SPLITS_FILE => '/opt/bigdata/split.txt'
    
    • 成功后查看web界面

    在这里插入图片描述

    HexStringSplit 算法

    HexStringSplit会将数据从“00000000”到“FFFFFFFF”之间的数据长度按照n等分之后算出每一段的其实rowkey和结束rowkey,以此作为拆分点。
    
    例如:
    create 'mytable','base_info','extra_info',{NUMREGIONS => 15, SPLITALGO => 'HexStringSplit'}
    

    在这里插入图片描述

    cs