
# 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任务，避免一次次重复相同的任务。 "hbase.master.namespace.init.timeout"（默认为3600000ms）
  

- 通过RegionServer worker增加并行split任务执行数，保证RegionServer worker能并行处理split work（RegionServer需要有更多的核心）。在"*客户端安装路径* /HBase/hbase/conf/hbase-site.xml"中添加参数：
  "hbase.regionserver.wal.max.splitters"（默认为2）
  

- 如果所有的恢复过程都需要时间，增加初始化监控线程超时时间。 "hbase.master.initializationmonitor.timeout"（默认为3600000ms）
  
 
