HMaster等待namespace表上线时超时退出
问题
为什么在等待namespace表上线时超时HMaster退出?
回答
在HMaster主备倒换或启动期间,HMaster为先前失败/停用的RegionServer执行WAL splitting及region恢复。
在后台运行有多个监控HMaster启动进程的线程:
- TableNamespaceManager
这是一个帮助类,用于在HMaster主备倒换或启动期间,管理namespace表及监控表region的分配。如果namespace表在规定时间(hbase.master.namespace.init.timeout,默认为3600000ms)内没有上线,那么它就会异常中断HMaster进程。
- InitializationMonitor
这是一个主HMaster初始化线程监控类,用于监控主Master的初始化。如果在规定时间(hbase.master.initializationmonitor.timeout,默认为3600000ms)内初始化线程失败,该线程会异常终止HMaster(如果该hbase.master.initializationmonitor.haltontimeout被启动,默认为false)。
在HMaster主备倒换或启动期间,如果WAL hlog文件存在,它会初始化WAL splitting任务。如果WAL hlog splitting任务完成,它将初始化表region分配任务。
HMaster通过ZooKeeper协调log splitting任务和有效的RegionServer,并追踪任务的发展。如果主HMaster在log splitting任务期间退出,新的主HMaster会尝试重发没有完成的任务,RegionServer从头启动log splitting任务。
HMaster初始化工作完成情况会由于很多原因被延迟:
- 间歇性的网络故障。
- 磁盘瓶颈。
- log split任务工作负荷较大,RegionServer运行缓慢。
- RegionServer(region openning)响应缓慢。
在以上场景中,为使HMaster更早完成恢复任务,建议增加以下配置参数,否则Master将退出导致整个恢复进程被更大程度地延迟。
- 增加namespace表在线等待超时周期,保证Master有足够的时间协调RegionServer workers split任务,避免一次次重复相同的任务。
- 通过RegionServer worker增加并行split任务执行数,保证RegionServer worker能并行处理split work(RegionServer需要有更多的核心)。在“客户端安装路径/HBase/hbase/conf/hbase-site.xml”中添加参数:
“hbase.regionserver.wal.max.splitters”(默认为2)