Apache HBase Master (HMaster) 无法在 Azure HDInsight 中启动
本文介绍在与 Azure HDInsight 群集交互时出现的问题的故障排除步骤和可能的解决方法。
方案:Master startup cannot progress, in holding-pattern until region comes online
问题
由于出现以下警告,HMaster 无法启动:
hbase:namespace,,<timestamp_region_create>.<encoded_region_name>.is NOT online; state={<encoded_region_name> state=OPEN, ts=<some_timestamp>, server=<server_name>}; ServerCrashProcedures=true. Master startup cannot progress, in holding-pattern until region onlined.
例如,参数值在实际消息中可能会有所不同:
hbase:namespace,,1546588612000.0000010bc582e331e3080d5913a97000. is NOT online; state={0000010bc582e331e3080d5913a97000 state=OPEN, ts=1633935993000, server=<wn fqdn>,16000,1622012792000}; ServerCrashProcedures=false. Master startup cannot progress, in holding-pattern until region onlined.
原因
在让 OPEN 区域恢复联机状态之前,HMaster 将检查区域服务器上是否存在 WAL 目录。 在这种情况下,如果该目录不存在,则表示它没有启动
解决方法
使用命令
sudo -u hbase hdfs dfs -mkdir /hbase-wals/WALs/<wn fqdn>,16000,1622012792000
创建此虚拟目录从 Ambari UI 重启 HMaster 服务。
如果使用 hbase-2.x,请参阅如何使用 hbck2 分配命名空间和元表中的详细信息
场景:原子重命名失败
问题
启动过程中识别到意外的文件。
原因
在启动过程中,HMaster 会执行许多初始化步骤,包括将数据从暂存文件夹 (.tmp) 移到数据文件夹。 HMaster 还会查看预写日志 (WAL) 文件夹中是否存在任何无响应的区域服务器。
HMaster 会对 WAL 文件夹执行一个基本的 list 命令。 在任何时候,如果 HMaster 发现其中任何一个文件夹中存在意外的文件,则会引发异常并且不会启动。
解决方法
检查调用堆栈并尝试确定哪个文件夹可能导致问题(例如,是 WAL 文件夹还是 .tmp 文件夹)。 然后,通过 Azure 存储资源管理器或 HDFS 命令尝试找到问题文件。 通常,此文件称为 *-renamePending.json
。 (*-renamePending.json
文件是用于在 WASB 驱动程序中实现原子重命名操作的日记文件。由于此实现中的 bug,在发生进程崩溃之类的问题后,这些文件可能会保留。)可以在 Cloud Explorer 中或使用 HDFS 命令强制删除此文件。
有时,此位置还可能存在名称类似于 $$$.$$$
的临时文件。 必须使用 HDFS ls
命令查看此文件;不能在 Azure 存储资源管理器中查看该文件。 若要删除此文件,请使用 HDFS 命令 hdfs dfs -rm /\<path>\/\$\$\$.\$\$\$
。
运行这些命令后,HMaster 应会立即启动。
场景:未列出服务器地址
问题
可能会看到一条消息,指示 hbase: meta
表未联机。 运行 hbck
可能会报告 hbase: meta table replicaId 0 is not found on any region.
在 HMaster 日志中,可能会看到以下消息:No server address listed in hbase: meta for region hbase: backup <region name>
。
原因
重启 HBase 后 HMaster 无法初始化。
解决方法
在 HBase shell 中输入以下命令(根据情况更改实际值):
scan 'hbase:meta' delete 'hbase:meta','hbase:backup <region name>','<column name>'
删除
hbase: namespace
条目。 此条目可能是扫描hbase: namespace
表时报告的相同错误。从 Ambari UI 重启主动 HMaster 以使 HBase 恢复运行状态。
在 HBase shell 中,运行以下命令使所有脱机表联机:
hbase hbck -ignorePreCheckPermission -fixAssignments
方案:java.io.IOException: Timedout
问题
HMaster 超时并出现如下所示的严重异常:java.io.IOException: Timedout 300000ms waiting for namespace table to be assigned
。
原因
如果有大量表和区域且在重启 HMaster 服务时未刷新,则会遇到此问题。 超时是 HMaster 中的一个已知缺陷。 一般群集启动任务可能会花费很长时间。 如果命名空间表尚未分配,HMaster 将会关闭。 如果存在大量未刷新的数据,而五分钟超时值不足以完成启动任务,则启动任务会长时间运行。
解决方法
在 Apache Ambari UI 中,转到“HBase”>“配置” 。 在自定义
hbase-site.xml
文件中添加以下设置:Key: hbase.master.namespace.init.timeout Value: 2400000
重启所需的服务(HMaster,可能还有其他 HBase 服务)。
场景:区域服务器频繁重启
问题
节点定期重新启动。 在区域服务器日志中,可能会看到如下所示的条目:
2017-05-09 17:45:07,683 WARN [JvmPauseMonitor] util.JvmPauseMonitor: Detected pause in JVM or host machine (eg GC): pause of approximately 31000ms
2017-05-09 17:45:07,683 WARN [JvmPauseMonitor] util.JvmPauseMonitor: Detected pause in JVM or host machine (eg GC): pause of approximately 31000ms
2017-05-09 17:45:07,683 WARN [JvmPauseMonitor] util.JvmPauseMonitor: Detected pause in JVM or host machine (eg GC): pause of approximately 31000ms
原因:zookeeper 会话超时
regionserver
JVM GC 长时间暂停。 暂停会导致 regionserver
无响应,并且无法在 40 秒 zookeeper 会话超时期限内向 HMaster 发送检测信号。 HMaster 认为 regionserver
已死亡,于是中止 regionserver
并重启。
要缓解这种情况,请更改 Zookeeper 会话超时:不仅需要更改 hbase-site
设置 zookeeper.session.timeout
,还要更改 Zookeeper zoo.cfg
设置 maxSessionTimeout
。
访问 Ambari UI,转到“HBase”->“配置”->“设置”,在“超时”部分,更改 Zookeeper 会话超时值。
访问 Ambari UI,转到“Zookeeper”->“配置”->“自定义
zoo.cfg
”,并添加/更改以下设置。 确保该值与 HBasezookeeper.session.timeout
相同。Key: maxSessionTimeout Value: 120000
重启所需的服务。
原因:重载 RegionServer
按照每个 RS 的区域数 - 上限计算上限。
例如: 8000 (Region server Heap -- Xmx in MB) * 0.4 (hbase.regionserver.global.memstore.size) /64 (hbase.regionserver.hlog.blocksize/2) = 50
若要缓解这种情况,请纵向扩展 HBase 群集。
场景:日志拆分失败
问题
HMasters 无法在 HBase 群集上启动。
原因
错误地配置了辅助存储帐户的 HDFS 和 HBase 设置。
解决方法
set hbase.rootdir: wasb://@.blob.core.chinacloudapi.cn/hbase
并在 Ambari 上重新启动服务。
后续步骤
如果你的问题未在本文中列出,或者无法解决问题,请访问以下渠道之一获取更多支持:
- 如果需要更多帮助,可以从 Azure 门户提交支持请求。 从菜单栏中选择“支持” ,或打开“帮助 + 支持” 中心。