`
lc_koven
  • 浏览: 353321 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

hbase写入性能影响续

阅读更多
    今天发现hbase在写入一张新表时,写入过程中时常会出现一段连续的时间无法写入数据,时间长达10s以上。经过查看region server日志发现有如下记录:


2011-04-18 14:50:22,942 INFO org.apache.hadoop.hbase.regionserver.HRegion: Blocking updates for 'IPC Server handler 6 on 60020' on region data1,70712707089004,1303109282990.da1eccd9d9ebf0f8bfe1116fe7046763.: memstore size 128.1m is >= than blocking 128.0m size

2011-04-18 14:50:22,944 INFO org.apache.hadoop.hbase.regionserver.HRegion: Blocking updates for 'IPC Server handler 4 on 60020' on region data1,70712707089004,1303109282990.da1eccd9d9ebf0f8bfe1116fe7046763.: memstore size 128.3m is >= than blocking 128.0m size

2011-04-18 14:50:22,955 INFO org.apache.hadoop.hbase.regionserver.HRegion: Blocking updates for 'IPC Server handler 8 on 60020' on region data1,70712707089004,1303109282990.da1eccd9d9ebf0f8bfe1116fe7046763.: memstore size 128.3m is >= than blocking 128.0m size

2011-04-18 14:50:22,955 INFO org.apache.hadoop.hbase.regionserver.HRegion: Blocking updates for 'IPC Server handler 7 on 60020' on region data1,70712707089004,1303109282990.da1eccd9d9ebf0f8bfe1116fe7046763.: memstore size 128.3m is >= than blocking 128.0m size



    查找了原代码,在HRegion中发现如下片断:
private void checkResources() {

    // If catalog region, do not impose resource constraints or block updates.
    if (this.getRegionInfo().isMetaRegion()) return;

    boolean blocked = false;
    while (this.memstoreSize.get() > this.blockingMemStoreSize) {
      requestFlush();
      if (!blocked) {
        LOG.info("Blocking updates for '" + Thread.currentThread().getName() +
          "' on region " + Bytes.toStringBinary(getRegionName()) +
          ": memstore size " +
          StringUtils.humanReadableInt(this.memstoreSize.get()) +
          " is >= than blocking " +
          StringUtils.humanReadableInt(this.blockingMemStoreSize) + " size");
      }
      blocked = true;
      synchronized(this) {
        try {
          wait(threadWakeFrequency);
        } catch (InterruptedException e) {
          // continue;
        }
      }
    }
    if (blocked) {
      LOG.info("Unblocking updates for region " + this + " '"
          + Thread.currentThread().getName() + "'");
    }
  }

    原来是因为region server在写入时会检查每个region对应的memstore的总大小是否超过了memstore默认大小的2倍(hbase.hregion.memstore.block.multiplier决定),如果超过了则锁住memstore不让新写请求进来并触发flush,避免产生OOM。由于在flush时还会触发compact/split等操作。因此这个过程通常比较长,必须要紧持到对应的memstore完全刷新到磁盘才会结束,因此regionserver会睡眠10s再检查memstore是不是低于阀值。
    对于在线应用来说,10s的时间是不可接受的,但这个过程确实非常漫长,因此可以调整以下配置以减少或者避免这种情况的出现。
<property>
    <name>hbase.hregion.memstore.block.multiplier</name>
    <value>8</value>//内存充足确保不会产生OOM的情况下,调大此值
  </property>
  <property>
    <name>hbase.server.thread.wakefrequency</name>
    <value>100</value>//减少睡眠等待时间,默认值为10000
  </property>
分享到:
评论
3 楼 亦梦亦真 2013-08-07  
这个加大了也不好办呢?总是会出,总不能删除数据吧?有没有别的什么方法来让它不出现这种情况呢?到目前也没找着一个合适的方案
2 楼 hehe3000 2011-04-22  
hbase.hregion.memstore.block.multiplier增大,flush时,发生compact/split操作的概率和时间也会增加了,这个参数需要综合权衡了
1 楼 杨俊华 2011-04-18  
OOME的问题是必须要防止的。
没有办法。
线上的产品,只好加大内存了。

相关推荐

    HBase写性能优化策略

    批量操作是另一个显著影响HBase写入性能的因素。在单条put操作与批量put操作之间,后者可以明显减少客户端到RegionServer的RPC连接数,从而提高写入性能。HBase提供的批量put接口能够将多个写入请求打包,一起处理,...

    HBase的性能优化

    HBase的RegionServer处理器数量直接影响着写入性能。默认情况下,HBase的RegionServer处理器数量为10,可以根据实际情况调整这个值。例如,将Handler Count设置为100,可以明显提高写入性能。 调整HFile Block ...

    HBase性能深度分析

    通过对HBase数据插入性能的深度分析与实验验证,我们不仅揭示了其背后复杂而精妙的内部机制,还发现了影响性能的关键因素。HBase的Rowkey选择、集群调优策略、region split与compaction机制等,都是提升其性能表现不...

    HDFS读文件并写入Hbase

    从HDFS中读文件,用groupby进行sort,然后写入Hbase中

    hbase性能测试.docx

    - **Elapsed time in milliseconds**:460,290 毫秒,这是随机读取1048570行数据所花费的时间,比写入时间要长,说明HBase在随机读取上的性能相对较低。 - **Row count**:与写入测试相同,读取了1048570行数据,...

    某大数据公司内部Hbase性能测试详细设计文档及用例

    "HBase性能测试详细设计文档及用例" 本文档旨在详细介绍HBase性能测试的设计文档和实践经验,涵盖了HBase性能测试需要注意的一些参数设置和测试用例。下面是从该文档中提炼的相关知识点: 1.1 Pre-Creating ...

    spark读取hbase数据,并使用spark sql保存到mysql

    使用spark读取hbase中的数据,并插入到mysql中

    HBase性能优化方法总结

    本文将深入探讨HBase性能优化的各种策略,旨在帮助你提升数据操作的效率。 一、硬件优化 1. **磁盘选择**:HBase对I/O性能要求较高,因此推荐使用SSD硬盘,以减少读写延迟。 2. **内存配置**:合理分配HBase的堆...

    hadoop hbase性能报告(英文)

    - 当柱族数量达到1000时,实验出现超时,表明在大量柱族下,HBase的性能受到明显影响。 #### 结论 HBase在处理大量柱族时面临性能挑战,特别是在高柱族数量下的写入和读取操作。然而,通过合理配置和避免极端使用...

    藏经阁-HBase in Practise- 性能、监控和问题排查.pdf

    * IO 性能优化:HBase 中的 IO 操作是影响性能的关键因素。可以通过调整 HBase 的 RegionServer 配置、Compaction 机制和 Flush 机制来优化 IO 性能。 * RegionServer 配置:RegionServer 的配置对 HBase 的性能有很...

    HBase数据库性能调优

    HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。与FUJITSU Cliq等商用大数据产品不同,HBase是Google Bigtable...

    hbase性能优化

    在HBase的使用中,如果直接将时间戳作为行健,会导致写入单个region时出现热点问题。因为HBase的rowkey是有序存储,时间集中会导致同一时间戳的数据集中到一个region中,导致该region成为热点,其他region访问速度变...

    java操作Hbase之从Hbase中读取数据写入hdfs中源码

    在Java编程环境中,操作HBase并将其数据写入HDFS(Hadoop Distributed File System)是一项常见的任务,特别是在大数据处理和分析的场景下。本篇将详细介绍如何使用Java API实现这一功能,以及涉及到的关键技术和...

    HbaseTemplate 操作hbase

    在IT行业中,尤其是在大数据处理领域,HBase是一个广泛使用的分布式、高性能、列式存储的NoSQL数据库。HBase是建立在Hadoop文件系统(HDFS)之上,为处理大规模数据提供了一个高效的数据存储解决方案。而Spring Data...

    HBase性能监控及最佳实践.pptx

    同时,可以调整hbase.hregion.percolumnfamilyflush.size.lower.bound来控制最小flush阈值,避免过小的flush操作影响性能。 多盘配置也是提升性能的重要方式,如启用多个WAL(Write-Ahead Log)(HBASE-5699)。...

    Phoenix_on_HBase性能测试报告.pdf

    Phoenix on HBase 是一个基于 HBase 的高性能数据处理引擎,它可以提供快速的数据查询和写入性能。在本报告中,我们对 Phoenix on HBase 的性能进行了测试,以探索其在数据查询和写入方面的特性和限制。 测试环境 ...

Global site tag (gtag.js) - Google Analytics