码迷,mamicode.com
首页 > 其他好文 > 详细

Hbaseflush处理流程

时间:2018-02-12 13:36:13      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:body   生成   消费者   color   配置   消费   生产者消费者   完成   需要   

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处理流程

标签:body   生成   消费者   color   配置   消费   生产者消费者   完成   需要   

原文地址:https://www.cnblogs.com/alamps/p/8443846.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!