• 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的触发条件和处理流程后续再说。
  • 相关阅读:
    python模块学习第 0000 题
    报错The VMware Authorization Service is not running
    图像指纹的重复识别
    CSS预编译器配置-------LESS Sass Stylus webstorm
    CSS布局中的水平垂直居中
    进度与日程
    HTML5 application cache
    进度
    CC2530芯片介绍
    Linux命令工具 top详解
  • 原文地址:https://www.cnblogs.com/alamps/p/8443846.html
Copyright © 2020-2023  润新知