flush触发方式

1.
Server端执行更新操作(put、delete、multi(MultiAction<R>multi)、(private)checkAndMutate、mutateRow (byte[] regionName, RowMutations rm))执行前后触发内存检查

  • 操作执行前

MemStoreFlusher .reclaimMemStoreMemory,如果regionserver使用memstore大于upper,则循环创建flush任务加入flushQueue,每次循环sleep5秒钟,这种检查是调用flushOneForGlobalPressure的flush

  • 操作执行前

HRegion. checkResources(),如果当前region的memstore大于flushsize
* multiplier,则循环调用requestFlush(),每次循环sleep(hbase.server.thread.wakefrequency),否则直接返回。

  • 执行操作HRegion的internal*
  • 执行操作后

如果当前region达到flushsize,则触发requestFlush() 生成FlushRegionEntry包含当前region信息并加入flushQueue进行对指定region的flush。

所有执行flush操作的过程都是通过MemStoreFlusher的flushRegion完成。

HRegion.flushRegion过程

1.    判断文件数是否达到block要求hbase.hstore.blockingStoreFiles

如果达到的话,判断是否超过block时长hbase.hstore.blockingWaitTime

如果已经超过,则执行HRegion.flushcache()

如果没有超时

并且是第一次进入queue,则检查是否执行split和compact。

否则重新加入flushQueue延迟blockingWaitTime/100

2.    执行

HRegion.flushcache()->HRegion.internalFlushcache()

执行完成后再检查一次是否需要split和compact

HRegion.internalFlushcache过程

1.    为Region下的每个store创建一个StoreFlusherImpl

2.    为memstore生成snapshot,实际就是把集合赋值给flusher的内部集合,然后给memstore重新new一个集合。

3.    Store. internalFlushCache,生成memstoreScanner将数据通过StoreFile.Writer写成HFile

MemStoreFlusher周期性检查flushQueue,触发队列的region flush或者根据内存使用情况选择region来进行flush。

如果queue为空并且server内存使用高于lower的限制,则调用flushOneForGlobalPressure flush一个region。

flushOneForGlobalPressure

首先找到如下2个region

bestFlushableRegion:选择内存使用最大且文件数未达到compact block文件数限制的region,并且没有在flush队列中region。

bestAnyRegion:选择内存使用最大,不管文件数是否达到compact block文件数限制的region,并且没有在flush队列中region。

这俩中再二选一,策略如下


if
(bestFlushableRegion != null &&

bestAnyRegion.memstoreSize.get() > 2 * bestFlushableRegion.memstoreSize.get()) {

regionToFlush = bestAnyRegion;

}else {

if (bestFlushableRegion ==
null) {

regionToFlush = bestAnyRegion;

}else {

regionToFlush = bestFlushableRegion;

}

}

选择好region后进行flush完成后返回。如果失败的话则会选择其他region flush。

如果queue不为空,则从queue中poll一个region flush。

最后一种触发flush的方式是client端执行HBaseAdmin.flush(HRegionInfo regionInfo)

这种方式会判断client端flush的表名还是region名

如果是region,则调用HRegionServer的flushRegion(HRegionInfo regionInfo)

如果是表名,则通过MetaReader获取此表的所有region,循环flush

HBase flush的更多相关文章

  1. Hbase的flush机制

    Hbase Flush机制最小Flush单元为HRegion,尽量减少CF数量以减少HStrore数量从而减少MemStore的数量,最终减少每次Flush的开销.1.Region级别触发条件:   ...

  2. Hbase flusher源码解析(flush全代码流程解析)

    版权声明:本文为博主原创文章,遵循版权协议,转载请附上原文出处链接和本声明. 在介绍HBASE flush源码之前,我们先在逻辑上大体梳理一下,便于后续看代码.flush的整体流程分三个阶段 1.第一 ...

  3. HBase 入门之数据刷写(Memstore Flush)详细说明

    接触过 HBase 的同学应该对 HBase 写数据的过程比较熟悉(不熟悉也没关系).HBase 写数据(比如 put.delete)的时候,都是写 WAL(假设 WAL 没有被关闭) ,然后将数据写 ...

  4. HBase:Shell

    HBase shell commands As told in HBase introduction, HBase provides Extensible jruby-based (JIRB) she ...

  5. HBASE SHELL 命令使用

    HBASE SHELL命令的使用 在hbase shell客户端有许多的操作命令,今天回顾并且总结一二,希望和广大读者共同进步,并且悉心聆听你们的意见.在此的hbase版本是:HBase 1.2.0- ...

  6. HBase 数据迁移方案介绍

    一.前言 HBase数据迁移是很常见的操作,目前业界主要的迁移方式主要分为以下几类: 图1.HBase数据迁移方案 从上面图中可看出,目前的方案主要有四类,Hadoop层有一类,HBase层有三类.下 ...

  7. HBase 数据迁移方案介绍 (转载)

    原文地址:https://www.cnblogs.com/ballwql/p/hbase_data_transfer.html 一.前言 HBase数据迁移是很常见的操作,目前业界主要的迁移方式主要分 ...

  8. HBase操作(Shell与Java API)

    版权声明:本文为博主原创文章,未经博主允许不得转载.     转: http://blog.csdn.net/u013980127/article/details/52443155 下面代码在Hado ...

  9. 从hbase到hive,以及sqoop转到mysql解析

    https://blog.csdn.net/qq_33689414/article/details/80328665 hive关联hbase的配置文件 hive和hbase同步https://cwik ...

随机推荐

  1. memcached实战系列(三)memcached命令使用

    memcached命令的使用,在这里我们最好了解一下命令的含义,对命令有一个大致的了解,在了解的基础上进行使用.这里的命名是常用的crud命令的演示. 1.1.1. memcached命令的格式 标准 ...

  2. Android打包遇到的那些坑

    说说今天打包遇到的坑,由于线上有个支付的bug需要紧急修复,而我们的项目又没有使用热修复,所以只能通过编译打包等传统流程,还好android上线比较快. 说说我进早上打包遇到的几个问题吧,首先我使用b ...

  3. SpringMVC实现用户登录实例

    今天分享一下SpringMVC的一个登陆小案例 准备工作 创建一个Dynamic Web Project(本人是Eclipse) 添加相关的jar包,构建路径 创建springMVC-servlet. ...

  4. ios zxing扫码问题

    在ios 中 扫瞄二维码,条形码基本有 2中第三方的库,一个是zbar 一个是zxing,zxing 在android中表现的比较出色,但是在ios 中不是很好用,扫瞄效率低,我们一般都用zbar,但 ...

  5. iOS 南京互联网大会分享及个人见解 韩俊强的博客

    首先分两大块: 1.如何打造高效/稳定的App (重点): 2.软件自动化测试: 每日更新关注:http://weibo.com/hanjunqiang  新浪微博! 每日更新关注:http://we ...

  6. iOS中 按钮和标题完美各种排列/完美教程 韩俊强的博客

    每日更新关注:http://weibo.com/hanjunqiang  新浪微博! 前言:最近常常用到按钮和相应标题的组合,当按钮设置图片加标题时,触发范围较小,不易触发,最重要的是还要调试偏移量, ...

  7. Android的SeekBar和RateBar的使用-android学习之旅(三十二)

    SeekBar简介 SeekBar允许用户拖动,进行调节经常用于音量调节等方面. android:thumb设置drawable对象来表示拖动的物体. setOnSeekBarChangeListen ...

  8. 打Patch实践

    一.找到相应PATCH 确认系统已安装模块版本. SELECTapp.application_short_name, app.application_name, pi.patch_level   FR ...

  9. iOS中 WGAFN_网络监控 技术分享

    需要用到第三方AFNetworking/SVProgressHUD 没有的可以关注我微博私信我.http://weibo.com/hanjunqiang AppDelegate.m #import & ...

  10. ROS_Kinetic_04 ROS基础内容(一)

    ROS_Kinetic_04 ROS基础内容(一) 在开始基础内容之前,假定您已经完成了ROS kinetic版本的安装, 如果没有请参考ROS kinetic安装说明. 1. 环境变量 在使用ROS ...