Hbaseflush处理流程

Posted Alamps 沁园春

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hbaseflush处理流程相关的知识,希望对你有一定的参考价值。

Hbaseflush处理流程

flush的处理是个生产者消费者模式,通过MemStoreFlusher.requestFlush或者requestDelayedFlush来收集请求,通过多个FlushHandler(个数由参数hbase.hstore.flusher.count配置默认值2)来进行flush处理。使用的消息队列是用的DelayQueue
flush前会对region的状态做一些判断,如果为关闭或者正在flushing的不能做flush处理。
整个flush的过程可以分为如下3个阶段:

    prepare阶段
    方法:internalPrepareFlushCache,这里会将region下所有的memstore都生成对应的snapshot,为防止其他的线程同时更新memstore,这里会加上一个排它锁。prepare的操作只是将cellSet赋值给snapshot,然后在new一个CellSkipListSet,所以这个锁的时间会很短。
    flush阶段
    将prepare后生成的所有snapshot持久化到hdfs上为一个hfile,存放在region目录下的.tmp目录中。
    commit阶段
    将flush阶段生成的临时文件移动到对应的columnfamily目录下,然后将这些storefile建立StoreFile对象,添加到StoreFileManager对象中,清空snapshot,注意这里会对MemStoreLAB snapshotAllocator 做close处理,如果开启了ChuckPool,会把这些chuck添加到chuckPool中。memstoreSize减去flush的大小,更新maxFlushedSeqId。

在flush完成成后如果需要split处理会做split处理,如果需要compact会做compact处理。
split和compact的触发条件和处理流程后续再说。

 

以上是关于Hbaseflush处理流程的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段15——git命令操作一个完整流程

VSCode自定义代码片段15——git命令操作一个完整流程

Android 逆向ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )(代码片段

Android 逆向ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )(代码片段

Android 逆向整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 dvmOptimizeDexFile() 方法分析 | /bin/dexopt 源码分析 )(代码片段

处理屏幕旋转上的片段重复(带有示例代码)