更新时间:2022-02-22 GMT+08:00

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)