`
zhangxiong0301
  • 浏览: 359660 次
社区版块
存档分类
最新评论

实时系统HBase读写优化--大量写入无障碍

 
阅读更多

在使用hbase过程中发现在写入hbase的数据量很大时,经常发生写不进去的情况。而我们基于hbase的应用是对实时性要求很高的,一旦hbase不能读写则会大大影响系统的使用。下面将记录hbase写优化的过程。

 

1.禁止Major Compaction

在hbase进行Major Compaction时,该region将合并所有的storefile,因此整个region都不可读,所有对此region的查询都会block。HBase默认一天左右执行一次Major Compaction。我们将Major Compaction禁掉并用Cron脚本每天在系统空闲时对所有表执行major compaction。

 

Major Compaction的配置:

 

[html] view plaincopy
 
  1. <span style="font-size:18px;"><property>  
  2. <name>hbase.hregion.majorcompaction</name>  
  3. <value>0</value>  
  4. </property></span>  

 

默认是1天,每个region会在创建时以当前时间初始化regionMajorCompactionTime,并将下一次的major compaction时间设为1+-0.2天。配置中将此值设为0禁止major compaction。

 

major_compaction的脚本:取出所有table,一一执行major_compact:

 

[java] view plaincopy
 
  1. <span style="font-size:18px;">TMP_FILE=tmp_tables  
  2. TABLES_FILE=tables.txt  
  3.   
  4. echo "list" | hbase shell > tmp_tables  
  5. sleep 2  
  6. sed '1,6d' $TMP_FILE | tac | sed '1,2d' | tac > $TABLES_FILE  
  7. sleep 2  
  8.   
  9. for table in $(cat $TABLES_FILE); do  
  10.         echo "major_compact '$table'" | hbase shell  
  11.         sleep 10  
  12. done</span>  

2.禁掉split

 

hbase通过split region实现水平的sharding,但在split的过程中旧的region会下线,新region还会做compaction,中间有一段时间大量的数据不能被读写,这对于我们这种online系统是不能忍受的。我们同样禁掉自动的split,而在晚上系统空闲时执行我们的splittool手动的split。

 

禁止split的配置:

 

[html] view plaincopy
 
  1. <span style="font-size:18px;"> <property>  
  2.  <name>hbase.hregion.max.filesize</name>  
  3.  <value>536870912000</value>  
  4.  </property></span>  

配置项的含义是当region的大小大于设定值后hbase就会开始split,我们将此值设为500G,我们认为在白天系统繁忙时一个region不会超过此大小,在晚上时运行splittool将region分割开。

 

 

splittool的逻辑比较简单。遍历所有region的信息,如果region大小大于某值(比如1G)则split该region,这样为一轮split,如果一轮后没有大于某值的region则结束,如果还有大于某个值的region则继续新一轮split,直到没有region大于某个阈值为止。这里提一下判断split完成的方法:通过检查hdfs上旧region的文件夹是否被清除来判断split是否结束。

 

3.设置blockingStoreFiles

这个参数的重要性是在我们的性能测试中发现的。我们禁掉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的数据写入。

 

[java] view plaincopy
 
  1. <span style="font-size:18px;">private boolean flushRegion(final FlushRegionEntry fqe) {  
  2.     HRegion region = fqe.region;  
  3.     if (!fqe.region.getRegionInfo().isMetaRegion() &&  
  4.         isTooManyStoreFiles(region)) {  
  5.       if (fqe.isMaximumWait(this.blockingWaitTime)) {  
  6.         LOG.info("Waited " + (System.currentTimeMillis() - fqe.createTime) +  
  7.           "ms on a compaction to clean up 'too many store files'; waited " +  
  8.           "long enough... proceeding with flush of " +  
  9.           region.getRegionNameAsString());  
  10.       } </span>  

默认值为7

[java] view plaincopy
 
  1. <span style="font-size:18px;">this.blockingStoreFilesNumber =  
  2.       conf.getInt("hbase.hstore.blockingStoreFiles"7);  
  3.     if (this.blockingStoreFilesNumber == -1) {  
  4.       this.blockingStoreFilesNumber = 1 +  
  5.         conf.getInt("hbase.hstore.compactionThreshold"3);  
  6.     }</span>  

 

 

我们将此值设为很大的值,使得此问题不会block我们的写入。

 

[html] view plaincopy
 
  1. <span style="font-size:18px;"><property>  
  2. <name>hbase.hstore.blockingStoreFiles</name>  
  3. <value>2100000000</value>  
  4. </property></span>  
分享到:
评论

相关推荐

    HBase(hbase-2.4.9-bin.tar.gz)

    HBase(hbase-2.4.9-bin.tar.gz)是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System...

    hbase的hbase-1.2.0-cdh5.14.2.tar.gz资源包

    `hbase-1.2.0-cdh5.14.2.tar.gz` 是针对Cloudera Distribution Including Apache Hadoop (CDH) 5.14.2的一个特定版本的HBase打包文件。CDH是一个流行的Hadoop发行版,包含了多个大数据组件,如HDFS、MapReduce、YARN...

    phoenix-hbase-2.2-5.1.2-bin.tar.gz

    例如,在实时监控、日志分析、用户行为追踪等领域,用户可以借助Phoenix的SQL接口实时查询HBase中的大量数据,快速获取所需信息。此外,Phoenix还支持索引,进一步提高了查询性能,对于需要频繁查询的场景尤其有用。...

    phoenix-hbase-1.4-4.16.1-bin

    《Phoenix与HBase的深度解析:基于phoenix-hbase-1.4-4.16.1-bin的探讨》 Phoenix是一种开源的SQL层,它为Apache HBase提供了高性能的关系型数据库查询能力。在大数据领域,HBase因其分布式、列式存储的特性,常被...

    phoenix-hbase-2.4-5.1.2

    《Phoenix与HBase的深度解析:基于phoenix-hbase-2.4-5.1.2版本》 在大数据处理领域,Apache HBase和Phoenix是两个至关重要的组件。HBase作为一个分布式、列式存储的NoSQL数据库,为海量数据提供了高效、实时的访问...

    hbase-2.4.17-bin 安装包

    总结来说,HBase-2.4.17-bin安装包提供了一个强大且高效的NoSQL数据库,适合大数据场景下的实时读写操作。通过理解并掌握上述概念、安装步骤及操作方法,用户可以有效地利用HBase处理海量数据。

    hbase-hadoop-compat-1.1.3-API文档-中文版.zip

    赠送jar包:hbase-hadoop-compat-1.1.3.jar; 赠送原API文档:hbase-hadoop-compat-1.1.3-javadoc.jar; 赠送源代码:hbase-hadoop-compat-1.1.3-sources.jar; 赠送Maven依赖信息文件:hbase-hadoop-compat-1.1.3....

    hbase-prefix-tree-1.1.3-API文档-中文版.zip

    赠送jar包:hbase-prefix-tree-1.1.3.jar; 赠送原API文档:hbase-prefix-tree-1.1.3-javadoc.jar; 赠送源代码:hbase-prefix-tree-1.1.3-sources.jar; 赠送Maven依赖信息文件:hbase-prefix-tree-1.1.3.pom; ...

    hbase-metrics-api-1.4.3-API文档-中文版.zip

    赠送jar包:hbase-metrics-api-1.4.3.jar; 赠送原API文档:hbase-metrics-api-1.4.3-javadoc.jar; 赠送源代码:hbase-metrics-api-1.4.3-sources.jar; 赠送Maven依赖信息文件:hbase-metrics-api-1.4.3.pom; ...

    hbase-1.2.1-bin.tar.gz.zip

    总之,HBase-1.2.1的二进制压缩包提供了在Hadoop环境下部署和运行HBase所需的所有组件,适用于处理大量非结构化或半结构化数据的场景,如实时分析、日志处理、物联网应用等。正确解压并配置后,用户可以充分利用...

    phoenix-client-hbase-2.2-5.1.2.jar

    phoenix-client-hbase-2.2-5.1.2.jar

    hbase-hadoop-compat-1.1.3-API文档-中英对照版.zip

    赠送jar包:hbase-hadoop-compat-1.1.3.jar; 赠送原API文档:hbase-hadoop-compat-1.1.3-javadoc.jar; 赠送源代码:hbase-hadoop-compat-1.1.3-sources.jar; 赠送Maven依赖信息文件:hbase-hadoop-compat-1.1.3....

    hbase-2.0.2-bin.tar

    这个压缩包"**hbase-2.0.2-bin.tar**"包含了HBase 2.0.2的二进制发行版,它是针对大规模数据存储而优化的。HBase构建于Hadoop之上,充分利用了Hadoop的HDFS(Hadoop Distributed File System)作为底层存储,并且...

    hbase-meta-repair-hbase-2.0.2.jar

    HBase 元数据修复工具包。 ①修改 jar 包中的application.properties,重点是 zookeeper.address、zookeeper.nodeParent、hdfs....③开始修复 `java -jar -Drepair.tableName=表名 hbase-meta-repair-hbase-2.0.2.jar`

    hbase-2.2.6-bin.tar.gz

    hbase-2.2.6-bin.tar.gz HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所...

    hbase-common-1.4.3-API文档-中文版.zip

    赠送jar包:hbase-common-1.4.3.jar; 赠送原API文档:hbase-common-1.4.3-javadoc.jar; 赠送源代码:hbase-common-1.4.3-sources.jar; 赠送Maven依赖信息文件:hbase-common-1.4.3.pom; 包含翻译后的API文档:...

    hive-hbase-handler-1.2.1.jar

    被编译的hive-hbase-handler-1.2.1.jar,用于在Hive中创建关联HBase表的jar,解决创建Hive关联HBase时报FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. org.apache.hadoop....

    hbase-1.2.6-bin.tar.gz

    在本压缩包"**hbase-1.2.6-bin.tar.gz**"中,包含的是HBase 1.2.6版本,这是该数据库的一个非常稳定且广泛使用的版本。 **HBase 1.2.6 的主要特性:** 1. **列式存储**:与传统的关系型数据库不同,HBase以列族...

    phoenix-4.14.1-HBase-1.2-client.jar

    phoenix-4.14.1-HBase-1.2-client.jar

    hbase-1.3.1-bin.tar.gz.7z

    HBase,全称Apache HBase,是Apache软件基金会开发的一个非关系型分布式数据库(NoSQL),它构建在Hadoop文件系统(HDFS)之上,为大规模数据集提供了随机、实时的读写访问。本文将详细阐述如何在Linux环境,特别是...

Global site tag (gtag.js) - Google Analytics