zoukankan      html  css  js  c++  java
  • 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的触发条件和处理流程后续再说。
  • 相关阅读:
    dda的fpga实现(转载)
    第四篇:数据预处理(一)
    第三篇:数据可视化
    第二篇:数据可视化
    第一篇:查阅数据
    RocketMQ集群部署记录
    使用k8s cronjob ,清除应用生成的日志文件
    使用HostAliases 添加pod 的/etc/hosts
    docker in docker 出现 libltdl.so.7 问题
    容器中JVM获取真实的CPU核数
  • 原文地址:https://www.cnblogs.com/alamps/p/8443846.html
Copyright © 2011-2022 走看看