千家信息网

HBase如何调优

发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,小编给大家分享一下HBase如何调优,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1. 表的设计1.1 提前创建多个Reg
千家信息网最后更新 2024年11月11日HBase如何调优

小编给大家分享一下HBase如何调优,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

1. 表的设计

1.1 提前创建多个Region
默认情况下,在创建HBase表的时候会自动创建一个Region分区,当导入数据的时候,所有的HBase客户端都向这一个Region写数据,直到这个Region足够大了才进行切分。一种可以加快批量写入速度的方法是通过预先创建一些空的Regions,这样当数据写入HBase时,会按照Region分区情况,在集群内做数据的负载均衡。


1.2 Row Key设计
HBase中row key用来检索表中的记录,支持以下三种方式:
(1) 通过单个RowKey访问:即按照某个RowKey键值进行Get操作;
(2) 通过RowKey的Range进行Scan:即通过设置Start RowKey和End RowKey,在这个范围内进行扫描;
(3) 全表扫描:即直接扫描整张表中所有行记录。
在HBase中,RowKey可以是任意字符串,最大长度64KB,实际应用中一般为10~100bytes,存为byte[]字节数组,一般设计成定长的。
RowKey是按照字典序存储,因此,设计RowKey时,要充分利用这个排序特点,将经常一起读取的数据存储到一块,将最近可能会被访问的数据放在一块。
举个例子:如果最近写入HBase表中的数据是最可能被访问的,可以考虑将时间戳作为RowKey的一部分,由于是字典序排序,所以可以使用Long.MAX_VALUE - timestamp作为RowKey,这样能保证新写入的数据在读取时可以被快速命中。


1.3 Column Family设计
不要在一张表里定义太多的column family。目前Hbase并不能很好的处理超过2~3个Column family的表。因为某个Column Family在Flush的时候,它邻近的Column Family也会因关联效应被触发Flush,最终导致系统产生更多的I/O。


1.4 In Memory设置(可选)
创建表的时候,可以通过HColumnDescriptor.setInMemory(true)将表放到RegionServer的缓存中,保证在读取的时候被cache命中。


1.5 版本限制
创建表的时候,可以通过HColumnDescriptor.setMaxVersions(int maxVersions)设置表中数据的最大版本,对于一些不是特别重要的数据,可以设置setMaxVersions(1)。


1.6 数据生命周期限制
创建表的时候,可以通过HColumnDescriptor.setTimeToLive(int timeToLive)设置表中数据的存储生命期,过期数据将自动被删除,例如如果只需要存储最近两天的数据,那么可以设置setTimeToLive(2 * 24 * 60 * 60)。

1.7 Compact 和Split(可选)

实际应用中,如果有必要可以手动触发Compact和split。

1.8 采用压缩(可选)

压缩需要根据实际业务和机器性能来衡量是否要采用牺牲CPU来换取存储上的节约,并且能节省I/O和网络开销,可以使用Lzo或Snappy压缩的方式,大致可以压缩4~5倍。

2. 读取

2.1 扫描缓存

在进行扫描时可以设置一次读取多条,缓存数据,减少I/O开销。代码实现:

hTable.setScannerCaching(50); // 参数50表示一次性扫描50条

2.2 扫描指定列

Scan时指定需要的Column Family,可以减少网络传输数据量,否则默认scan操作会返回整行所有Column Family的数据。

2.3 释放资源

通过scan取完数据后,记得要关闭ResultScanner,否则RegionServer可能会出现问题(对应的Server资源无法释放)。

3. 写入优化

3.1 写入缓存

写入HBase表的时候最好不要一条一条的写,采用批量的方式,在代码里设置:

hTable.setAutoFlush(false, false); // 不让hbase自动刷新数据到数据库
hTable.setWriteBufferSize(1024 * 1024 * 10);// 缓存大小10M

当缓存的数据达到10M的时候会触发flush操作,另外当hTable.flushCommits();或hTable.close();时也会flush数据到数据库中。而且Hbase的API中支持数据已list的方式插入。

4. 参数优化

4.1 连接时间

参数:zookeeper.session.timeout
RegionServer与Zookeeper间的连接超时时间,默认值:3分钟(180000ms),我们配置:300000ms(5min)。

4.2 线程数控制

参数:hbase.regionserver.handler.count
RegionServer的请求处理IO线程数,默认值:10,我们配置:200。

4.3 split阈值

参数:hbase.hregion.max.filesize
单个region触发split的大小阈值,默认值:256M,我们配置:4G。

4.4 开启mslab方案

参数:hbase.hregion.memstore.mslab.enabled
减少因内存碎片导致的Full GC,提高整体性能,默认值:true。

4.5 扫描缓存

参数:hbase.client.scanner.caching
scanner调用next方法一次获取的数据条数,默认值:1。

4.6 MemStore大小控制

参数:hbase.regionserver.global.memstore.upperLimit/lowerLimit
hbase.regionserver.global.memstore.upperLimit :防止memstore来不及flush成storefile,堆积对内存占用过大,当某region的所有memstore占用大于40%,hbase会强制block所有的更新(请求)并flush这些memstore释放内存。
hbase.regionserver.global.memstore.lowerLimit 默认值就可以,不用调。

以上是"HBase如何调优"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

数据 时候 参数 缓存 存储 设计 方式 可以通过 大小 实际 时间 篇文章 配置 最大 代码 内存 内容 单个 字典 开销 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 8cpu服务器 惠普dl 338服务器怎样列阵 海康球机监控服务器名称 安康市软件开发价格 php调用数据库图片 免费软件开发项目合同模板 哈尔滨手机软件开发公司哪家好 中医综合数据库 软件开发师实习周记 数据库 有效性规则名词解释 玩家访问服务器慢怎么排查 千千画网络安全手抄报的教程 济南oa办公软件开发电话 如何提高企业网络安全 腾讯云服务器安装需要多久 db2 管理服务器创建 用友t3数据库安装不了 华为hana网络技术的前景 软件开发公司销售招聘信息 软件开发生产率和目标质量 河北数字化城管软件开发 江苏网络技术供应商家 知道域名怎么查服务器所在地 网络安全等级保护宣传 幻塔服务器选择排队 网络安全意识图片 松江区品牌软件开发销售价格 计算机网络技术专业好的专科 大专网络技术可以考哪些证书 数据库对象的关键字有哪些
0