hbase DroppedSnapshotException

hbase夯机问题:

 FATAL org.apache.hadoop.hbase.regionserver.HRegionServer: ABORTING region server : Replay of WAL required. Forcing server shutdown?
 Caused by: org.apache.hadoop.hbase.exceptions.TimeoutIOException: Failed to get sync result after  ms for ringBufferSequence=, WAL system stuck?

解决思路:

一:Memstore Flush触发条件

HBase会在如下几种情况下触发flush操作,需要注意的是MemStore的最小flush单元是HRegion而不是单个MemStore。可想而知,如果一个HRegion中Memstore过多,每次flush的开销必然会很大,因此我们也建议在进行表设计的时候尽量减少ColumnFamily的个数。

Memstore级别限制:当Region中任意一个MemStore的大小达到了上限(hbase.hregion.memstore.flush.size,默认128MB),会触发Memstore刷新。

Region级别限制:当Region中所有Memstore的大小总和达到了上限(hbase.hregion.memstore.block.multiplier * hbase.hregion.memstore.flush.size,默认 2* 128M = 256M),会触发memstore刷新。

Region Server级别限制:当一个Region Server中所有Memstore的大小总和达到了上限(hbase.regionserver.global.memstore.upperLimit * hbase_heapsize,默认 40%的JVM内存使用量),会触发部分Memstore刷新。Flush顺序是按照Memstore由大到小执行,先Flush Memstore最大的Region,再执行次大的,直至总体Memstore内存使用量低于阈值(hbase.regionserver.global.memstore.lowerLimit * hbase_heapsize,默认 38%的JVM内存使用量)。

当一个Region Server中HLog数量达到上限(可通过参数hbase.regionserver.maxlogs配置)时,系统会选取最早的一个 HLog对应的一个或多个Region进行flush

HBase定期刷新Memstore:默认周期为1小时,确保Memstore不会长时间没有持久化。为避免所有的MemStore在同一时间都进行flush导致的问题,定期的flush操作有20000左右的随机延时。

手动执行flush:用户可以通过shell命令 flush ‘tablename’或者flush ‘region name’分别对一个表或者一个Region进行flush。

二:hbase源码;

> /**
>    * Flush a region.
>    * @param region Region to flush.
>    * @param emergencyFlush Set if we are being force flushed. If true the region
>    * needs to be removed from the flush queue. If false, when we were called
>    * from the main flusher run loop and we got the entry to flush by calling
>    * poll on the flush queue (which removed it).
>    * @param forceFlushAllStores whether we want to flush all store.
>    * @return true if the region was successfully flushed, false otherwise. If
>    * false, there will be accompanying log messages explaining why the region
was
>    * not flushed.
>    */
>   private boolean flushRegion(HRegion region, boolean emergencyFlush, boolean forceFlushAllStores,
>       FlushLifeCycleTracker tracker) {
>     synchronized (this.regionsInQueue) {
>       FlushRegionEntry fqe = this.regionsInQueue.remove(region);
>       // Use the start time of the FlushRegionEntry if available
>       if (fqe != null && emergencyFlush) {
>         // Need to remove from region from delay queue. When NOT an
>         // emergencyFlush, then item was removed via a flushQueue.poll.
>         flushQueue.remove(fqe);
>       }
>     }
>     tracker.beforeExecution();
>     lock.readLock().lock();
>     try {
>       notifyFlushRequest(region, emergencyFlush);
>       FlushResult flushResult = region.flushcache(forceFlushAllStores, false, tracker);
>       boolean shouldCompact = flushResult.isCompactionNeeded();
>       // We just want to check the size
>       boolean shouldSplit = region.checkSplit() != null;
>       if (shouldSplit) {
>         this.server.compactSplitThread.requestSplit(region);
>       } else if (shouldCompact) {
>         server.compactSplitThread.requestSystemCompaction(region, Thread.currentThread().getName());
>       }
>     } catch (DroppedSnapshotException ex) {
>       // Cache flush can fail in a few places. If it fails in a critical
>       // section, we get a DroppedSnapshotException and a replay of wal
>       // is required. Currently the only way to do this is a restart of
>       // the server. Abort because hdfs is probably bad (HBASE-644 is a case
>       // where hdfs was bad but passed the hdfs check).
>       server.abort("Replay of WAL required. Forcing server shutdown", ex);
>       return false;
>     } catch (IOException ex) {
>       ex = ex instanceof RemoteException ? ((RemoteException) ex).unwrapRemoteException() : ex;
>       LOG.error(
>         "Cache flush failed"
>             + (region != null ? (" for region " +
>                 Bytes.toStringBinary(region.getRegionInfo().getRegionName()))
>               : ""), ex);
>       if (!server.checkFileSystem()) {
>         return false;
>       }
>     } finally {
>       lock.readLock().unlock();
>       wakeUpIfBlocking();
>       tracker.afterExecution();
>     }
>     return true;
>   }
>

三:其中失败代码:

catch (DroppedSnapshotException ex) {

       // Cache flush can fail in a few places. If it fails in a critical
       // section, we get a DroppedSnapshotException and a replay of wal
      // is required. Currently the only way to do this is a restart of
      // the server. Abort because hdfs is probably bad (HBASE-644 is a case
       // where hdfs was bad but passed the hdfs check).
       server.abort("Replay of WAL required. Forcing server shutdown", ex);
      return false;
    }

四:解决方案:

1.设置memstore大小;HloG数量设置;

2.check hdfs 并且修复

3.重启server。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 222,252评论 6 516
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,886评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,814评论 0 361
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,869评论 1 299
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,888评论 6 398
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,475评论 1 312
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 41,010评论 3 422
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,924评论 0 277
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,469评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,552评论 3 342
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,680评论 1 353
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,362评论 5 351
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,037评论 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,519评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,621评论 1 274
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,099评论 3 378
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,691评论 2 361