HBase在线系统性能优化
来源:互联网 发布:如何在终端退出python 编辑:程序博客网 时间:2024/05/18 09:18
一、手工进行Major Compaction
实时系统最好关闭HBase的自动Major Compaction,HBase在进行Major Compaction时会合并所有的存储文件,整个Region都不可用。HBase默认大约每天执行一次Compaction,最好把自动Compaction禁用,采用crontab在闲时触发执行。
修改HBase配置:
<property>
<name>hbase.hregion.majorcompaction</name>
<value>0</value>
</property>
将时间设置为0,禁用自动Major Compaction。
在HBase Shell中执行脚本:
major_compact ‘table_name’
这样就能手工执行一次Major Compaction。将所有的表名称写成一个文件,然后在shell脚本中遍历这个文件,执行HBase Shell命令,就可以定时自动执行了。
for table in $(cat $TABLES_FILE); do
echo “major_compact ‘$table'” | $HBASE_HOME/bin/hbase shell
sleep 10
done
写成shell,设置一下crontab,每天夜深人静的时候跑一下就可以了。
二、手工进行Split
建议关闭HBase的自动Split,夜深人静业务量小的时候手工Split。
要关闭自动split,需要调整 “hbase.hregion.max.filesize” 参数。不建议把这个参数设置成Long.MAX_VALUE,万一忘记了做手工split会出麻烦的。可以把这个值设置成100G,100G的文件split大约需要1小时的时间。
<property>
<name>hbase.hregion.max.filesize</name>
<value>107374182400</value>
</property>
具体调成什么值要看系统的数据量,要调一个每天的数据量不可能达到、定时器万一失灵也不会造成麻烦的值。
三、设置blockingStoreFiles
转自:http://www.cfanz.cn/index.php?c=article&a=read&id=62909
这个参数的重要性是在我们的性能测试中发现的。我们禁掉major_compaction和split后理论上写入应该无障碍了,但在测试中发现写入单个region速度大于10M/s时还是会出现长时间无法写入的情况。通过查看log,我们发现了这行log“Waited 90314ms on a compaction to clean up ‘too many store files‘”,通过查看代码发现原来是blockingStoreFiles这个参数在作怪。
在flushRegion时会检测当前store中hfile的数量是否大于此值,如果大于则会block数据的写入,等待其他线程将hfile compact掉。这样,如果写入速度超过compact的速度,hbase就会阻止该region的数据写入。
private boolean flushRegion(final FlushRegionEntry fqe) {
HRegion region = fqe.region;
if (!fqe.region.getRegionInfo().isMetaRegion() && isTooManyStoreFiles(region)) {
if (fqe.isMaximumWait(this.blockingWaitTime)) {
LOG.info(“Waited ” + (System.currentTimeMillis() – fqe.createTime) + “ms on a compaction to clean up ‘too many store files'; waited ” + “long enough… proceeding with flush of ” + region.getRegionNameAsString());
}
默认值为7
this.blockingStoreFilesNumber = conf.getInt(“hbase.hstore.blockingStoreFiles”, 7);
if (this.blockingStoreFilesNumber == -1) {
this.blockingStoreFilesNumber = 1 + conf.getInt(“hbase.hstore.compactionThreshold”, 3);
}
我们将此值设为很大的值,使得此问题不会block我们的写入。
<property>
<name>hbase.hstore.blockingStoreFiles</name>
<value>2100000000</value>
</property>
- HBase在线系统性能优化
- HBase性能优化方法
- Hbase 性能优化
- Hbase性能优化
- Hbase性能优化
- Hbase 性能优化
- HBase性能优化
- hbase 优化(性能)
- HBASE性能优化方法
- HBase性能优化
- HBase性能优化
- HBase性能优化方法
- HBase性能优化指南
- HBase性能优化
- hbase性能优化
- HBase性能优化指南
- Hbase 性能优化
- HBase性能优化<转>
- Error:Minimum supported Gradle version is 2.14.1. Current version is 2.10. If using the gradle wrapp
- Fragment提交的方法
- NYOJ 541
- 使用Identity 函数选择特定行(如第3-5行、奇数行、偶数行等)
- Hibernate4之二级缓存配置
- HBase在线系统性能优化
- 石头合并学习区间dp
- Android动画案例(一) 帧动画
- 取数据库表中每一行的两个字段的较小值
- Python拾遗之迭代器和生成器(一)
- ScrollView嵌套WebView,产生的空白和不能回到顶站的问题
- C++11 并发指南一(C++11 多线程初探)
- chocolatey 的安装与安装过程中的注意事项
- 51:数组中重复的数字