记录JVMINFO
RuntimeMXBean runtime = ManagementFactory.getRuntimeMXBean();
if (runtime != null) {
LOG.info("vmName=" + runtime.getVmName() + ", vmVendor=" +
runtime.getVmVendor() + ", vmVersion=" + runtime.getVmVersion());
LOG.info("vmInputArguments=" + runtime.getInputArguments());
}
根据 conf 创建HregionServer构造函数:
做一些类似rpcServer、还有配置文件中一些相关配置的初始化
执行完构造函数执行run方法:
注册到Hmaster之前做一些初始化操作
1、初始化zk即一些tracker
2、初始化一些线程、这是最重要的着重讲一下这些
2-1、初始化MemStoreFlusher
threadWakeFrequency = hbase.server.thread.wakefrequency
初始globalMemStorLimit ,hbase.regionserver.global.memstore.upperLimit * jvmheapMax ,同样获取最小值
blockingWaitTime = hbase.hstore.blockingWaitTime
2-2、初始化compactSplitThread
regionSplitLimit = hbase.regionserver.regionSplitLimit
largethread = hbase.regionserver.thread.compaction.large
smallthread = hbase.regionserver.thread.compaction.small
splitThreads = hbase.regionserver.thread.split
largeCompactions 是根据上面 largethread 创建的线程池 并设置rejected的执行,setRejectedExecutionHandler就是交给一个handler去处理线程池不执行的任务。
this.largeCompactions
.setRejectedExecutionHandler(new CompactionRequest.Rejection());
smallCompactions、splits 同理
2-3、compactionChecker 主要检查是否需要compaction,循环时间为,hbase.server.thread.wakefrequency * hbase.server.thread.wakefrequency.multiplier
2-4、periodicFlusher 定期 hbase.server.thread.wakefrequency执行Flusher,可以通过设置hbase.regionserver.optionalcacheflushinterval 为0 来禁用
2-5、初始化 lease
3、设置reservespace 预留空间 后续补充(TODO)
-----------------------------------跳到最主要的部分、自动线程startServiceThreads----------------
首先会启动RS上的 ExcuteService(参考前面事件处理那篇文章)
接下来启动线程:
hlogRoller
cacheFlusher
compactionChecker
periodicFlusher
healthCheckChore
leases
如果开启replication 执行replicationXXXXHandler
rpcServer
splitLogWorker
接下来讲每个线程是干什么的
------改天继续-----