MemStoreFlusher源代码分析

private final BlockingQueue<FlushQueueEntry> flushQueue = new DelayQueue<FlushQueueEntry>();private final Map<HRegion, FlushRegionEntry> regionsInQueue = new HashMap<HRegion, FlushRegionEntry>();@Override public long getDelay(TimeUnit unit) {return unit.convert(this.whenToExpire – EnvironmentEdgeManager.currentTime(), TimeUnit.MILLISECONDS); } public FlushRegionEntry requeue(final long when) {this.whenToExpire = EnvironmentEdgeManager.currentTime() + when;this.requeueCount++;return this; }public MemStoreFlusher(final Configuration conf, final HRegionServer server) {super();this.server = server;//hbase.server.thread.wakefrequency,默认值10sthis.threadWakeFrequency =conf.getLong(HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000);long max = ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getMax();//hbase.regionserver.global.memstore.size的值,默认为0.4,且该值必须小于等于0.8,大于0,即(0.0,0.8]float globalMemStorePercent = HeapMemorySizeUtil.getGlobalMemStorePercent(conf, true);this.globalMemStoreLimit = (long) (max * globalMemStorePercent);//hbase.regionserver.global.memstore.size.lower.limitthis.globalMemStoreLimitLowMarkPercent = HeapMemorySizeUtil.getGlobalMemStoreLowerMark(conf,globalMemStorePercent);//RS Xmx * hbase.regionserver.global.memstore.size * hbase.regionserver.global.memstore.size.lower.limitthis.globalMemStoreLimitLowMark = (long) (this.globalMemStoreLimit * this.globalMemStoreLimitLowMarkPercent);//默认值为90s,如果任何一个Store总的StoreFile数量大于hbase.hstore.blockingStoreFiles值,,HRegion将阻塞更新直到该参数//设置的时间到达或者Compaction完成。在该参数设置的时间到期后,即使Compaction没有完成,HRegion也将不再阻塞更新this.blockingWaitTime = conf.getInt("hbase.hstore.blockingWaitTime", 90000);int handlerCount = conf.getInt("hbase.hstore.flusher.count", 2);this.flushHandlers = new FlushHandler[handlerCount]; }

(因为仅仅是某个Region需要执行刷写操作)。如果第二个方法的参数为true,则将该Region从刷写队列中移除,如果为false,则

的说明,当Region的某个MemStore大于

找寻隐藏在山间的纯净和那“鸟鸣山更幽”的飞鸟。

MemStoreFlusher源代码分析

相关文章:

你感兴趣的文章:

标签云: