前言
当用户无法启动 HMaster
服务,并且在分配 region
阶段不断崩溃。
现象
重新启动后,HMaster
服务无法启动,因为它无法在超时之前分配 hbase:namespace
表。这发生在包含大量区域的大型集群中。验证日志时观察到以下错误:
2022-03-28 21:50:41,173 FATAL org.apache.hadoop.hbase.master.HMaster: Failed to become active master
java.io.IOException: Timedout 300000ms waiting for namespace table to be assigned
问题原因
出现此问题的原因是群集包含大量region
(其中超过 10万个区域),但在配置的超时值之前,服务器的线程参数非常低。
解决方案
要解决此问题,请考虑群集的负载,请调整以下参数:
hbase.regionserver.executor.openregion.threads = 200
hbase.regionserver.executor.closeregion.threads = 200
hbase.master.namespace.init.timeout = 86400000
hbase.master.initializationmonitor.timeout = 86400000
hbase.master.executor.openregion.threads = 300
hbase.master.executor.closeregion.threads = 200
hbase.master.procedure.threads = 261
调整这些参数后,由于线程数增加,region
分配阶段的完成速度要快得多。并且 HBase:namespace
表是在配置的超时值之前分配的。这有助于HMaster服务的成功启动。