Hbase优化方案

本文介绍了HBase的预分区策略,包括手动设置、16进制方式和按文件规则预分区,强调了rowkey设计的重要性以避免数据倾斜。硬件优化方面,建议合理分配内存,调整DataNode配置以提升文件打开数和降低延迟,同时通过压缩和调整HStore文件大小提高数据写入效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


1、预分区
    真正存储数据的是region要维护一个区间段段rowkey
    startRow-endRowkey

    1)手动设置与分区
        create 'user_p', 'info', 'partition', SPLITS => ['101', '102', '103', '104']
        存在-∞和+∞,所以会存在5个区间
        第一个分区:-∞~101
        第二个分区:101_102
        ~~~
        第五个分区:104~+∞

    2)生成16进制的预分区
        create 'user_p2', 'info', 'partition', {NUMREGIONS => 15, SPLITALGO => 'HexStringSplit'}
        设置了NUMGREGIONS为15,所以会有15个区间,而不是16

    3)按照文件中设置的规则设置与分区(文件需要在hbase终端目录下
        vi splits.txt
            a1
            b2
            c3
            d4
        create 'user_p', 'info', 'partition', SPLITS_FILE => 'splits.txt'

    注:这里的partition只是列族,并不是分区的关键字,可以改成别的,不要瞎猜

2、rowkey设计
    一条数据的唯一标识是rowkey,此rowkey存储在哪个分区取决于属于哪个预分区内。
    为什么要设计rowkey?
        为了防止出现数据倾斜

    1、生成随机数/hash/散列值

    2、字符串反转

    3、字符串拼接

3、硬件优化
    1)从内存优化
        一般分配70%内存给HBase的java堆
        不建议分配非常大的堆内存
        一般设置为16-48G内存即可

        设置:export HADOOP_FORMAT_OPTS = "-Xmx512m $HADOOP_PORTMAP_OPTS"
        注意:etc/hadoop下 hadoop-env.sh

    2)基础优化
        优化DataNode

        hdfs-site.xml

        最大文件打开数
            属性:dfs.datanode.max.transfer.threads
            默认是:4096    设置大于4096

        优化延迟高的数据操作等待时间
        hdfs-site.xml
            属性:dfs.image.transfer.timeout
            默认是:60000ms    设置大于60000

        数据写入效率
        mapred-site.xml
        压缩
            属性:mapreduce.map.output.compress
            值:org.apache.hadoop.io.compress.GzipCodec

        优化hstore的文件大小
            属性:hbase.hregion.max.filesize
            默认值:10G
            调小

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值