HBase启动后HMaster挂掉的一种解决方案

本文记录了一次HBase Master出现TableExistsException异常导致服务崩溃的问题排查过程及解决方法,涉及停止集群、使用离线修复命令、清理Zookeeper中的HBase数据等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在使用HBase的时候,发现使用HBase shell的list命令时出错,jps查看了一下进程,发现HMaster挂掉了,在确认Hadoop状态正常后,查看HMaster的日志,发现报错如下:

2015-02-17 05:46:15,212 DEBUG [master:master:60000] lock.ZKInterProcessLockBase: Released /hbase/table-lock/hbase:namespace/write-master:600000000000004
2015-02-17 05:46:15,212 FATAL [master:master:60000] master.HMaster: Master server abort: loaded coprocessors are: []
2015-02-17 05:46:15,213 FATAL [master:master:60000] master.HMaster: Unhandled exception. Starting shutdown.
        org.apache.hadoop.hbase.TableExistsException: hbase:namespace
        at org.apache.hadoop.hbase.master.handler.CreateTableHandler.prepare(CreateTableHandler.java:120)
        at org.apache.hadoop.hbase.master.TableNamespaceManager.createNamespaceTable(TableNamespaceManager.java:232)
        at org.apache.hadoop.hbase.master.TableNamespaceManager.start(TableNamespaceManager.java:86)
        at org.apache.hadoop.hbase.master.HMaster.initNamespace(HMaster.java:1049)
        at org.apache.hadoop.hbase.master.HMaster.finishInitialization(HMaster.java:913)
        at org.apache.hadoop.hbase.master.HMaster.run(HMaster.java:606)
        at java.lang.Thread.run(Unknown Source)
2015-02-17 05:46:15,214 INFO  [master:master:60000] master.HMaster: Aborting
2015-02-17 05:46:15,214 INFO  [master,60000,1424180766819-BalancerChore] balancer.BalancerChore: master,60000,1424180766819-BalancerChore exiting
2015-02-17 05:46:15,215 INFO  [master,60000,1424180766819-ClusterStatusChore] balancer.ClusterStatusChore: master,60000,1424180766819-ClusterStatusChore exiting
2015-02-17 05:46:15,215 INFO  [CatalogJanitor-master:60000] master.CatalogJanitor: CatalogJanitor-master:60000 exiting
2015-02-17 05:46:15,216 DEBUG [master:master:60000] master.HMaster: Stopping service threads

出现两个FATAL(第2、3行),严重错误,直觉上感觉跟Zookeeper有关,尝试了多种方法后,终于找出了正确解决方案,此方案来自Stack Overflow上的polaris大神(原文网址附在最后,有兴趣的可以看一下)。

4个步骤解决问题:

    1、停止HBase集群;

    2、使用HBase的离线修复命令      

hbase org.apache.hadoop.hbase.util.hbck.OfflineMetaRepair

    3、删除Zookeeper中已存在的HBase的旧的信息

         进入zookeeper客户端,注意,要在zookeeper集群启动情况下进入客户端:

./opt/zookeeper/bin/zkCli.sh

        使用 ls / 查看zookeeper中的数据目录

        使用 rm /hbase 删除zookeeper中的hbase数据

    4、重启HBase集群,集群恢复正常。


思考:

    解决这个问题后,一直在反思集群为什么会突然出现这种情况,后来终于搞明白。之前对集群测试时,在主节点上部署了一个zookeeper节点(主节点之前没有部署zookeeper),后来为防止zookeeper节点总数变成偶数,又把这个zookeeper节点删掉了。可能是这个原因造成zookeeper中已存在的hbase数据有问题,所以清空zookeeper中的hbase数据,就能解决问题了。


原文网址:http://stackoverflow.com/questions/28563167/hbase-master-not-starting-correctly

转载于:https://my.oschina.net/u/1412751/blog/410943

<think>好的,我现在需要解决用户关于HBase启动使用hbase shellHMaster闪退的问题。首先,我得回顾用户提供的引用内容,找出可能的原因和解决方案。 引用[1]提到HMaster运行一段时间后自动关闭,但HRegionServer正常。可能的原因包括端口配置不一致。引用[2]指出HDFS和HBase的端口不匹配,导致HMaster无法与HDFS通信而退出。用户提到core-site.xml和hbase-site.xml中的端口分别为9000和8020,修改为一致后问题解决。引用[3]显示Hadoop组件正常启动,但HBase启动脚本可能存在问题。 接下来,我需要分析常见导致HMaster闪退的原因。首先检查端口配置是否正确,尤其是HBase与HDFS的通信端口。然后查看日志文件,通常日志会记录错误原因,比如ZooKeeper问题或资源不足。还要考虑时间同步问题,因为HBase依赖系统时间同步。另外,检查HBase的依赖服务如ZooKeeper和HDFS是否正常运行。 根据引用内容,用户已经遇到了端口不一致的问题,所以需要建议用户检查core-site.xml和hbase-site.xml中的端口设置是否一致,比如都设为9000。同时,查看HMaster的日志文件,通常在logs目录下,寻找错误信息。如果日志提到ZooKeeper问题,可能需要清理ZooKeeper中的HBase数据并重启。此外,检查系统资源,如内存是否足够,HMaster可能因OOM而崩溃。还要确认系统时间是否同步,使用NTP服务进行同步。最后,确保Hadoop和ZooKeeper服务运行正常,再启动HBase。 需要将这些步骤整理成清晰的解决方案,分步骤指导用户检查配置、查看日志、处理ZooKeeper问题、检查资源和时间同步。同时,生成相关问题帮助用户深入理解问题。</think>### HBase HMaster 闪退问题分析与解决方案 #### 一、问题原因分析 1. **端口配置冲突** HBase 需要与 HDFS 保持端口配置一致。若 `core-site.xml`(Hadoop)的 `fs.defaultFS` 端口与 `hbase-site.xml` 的 `hbase.rootdir` 端口不一致,HMaster 无法连接 HDFS 导致闪退[^2]。例如: - `core-site.xml` 中 `fs.defaultFS` 设为 `hdfs://localhost:9000` - `hbase-site.xml` 中 `hbase.rootdir` 应设为 `hdfs://localhost:9000/hbase` 2. **ZooKeeper 问题** ZooKeeper 会话超时或数据残留可能导致 HMaster 异常退出[^2]。例如: ```bash # 清理 ZooKeeper 中残留的 HBase 数据 zkCli.sh rmr /hbase ``` 3. **资源不足或内存溢出(OOM)** HMaster 默认内存配置较低,可能因内存不足崩溃。检查日志中是否出现 `java.lang.OutOfMemoryError`。 4. **时间不同步** HBase 依赖集群时间同步,若节点时间差异超过阈值(默认 30s),会导致 HMaster 退出。 --- #### 二、逐步解决方案 1. **检查端口配置** - 对比 `$HADOOP_HOME/etc/hadoop/core-site.xml` 和 `$HBASE_HOME/conf/hbase-site.xml` 的端口配置: ```xml <!-- core-site.xml --> <property> <name>fs.defaultFS</name> <value>hdfs://your-namenode:9000</value> </property> <!-- hbase-site.xml --> <property> <name>hbase.rootdir</name> <value>hdfs://your-namenode:9000/hbase</value> </property> ``` - 修改后重启 Hadoop 和 HBase。 2. **查看 HMaster 日志** - 日志路径:`$HBASE_HOME/logs/hbase-<user>-master-<hostname>.log` - 关键错误示例: - `Connection refused`:端口或网络问题 - `Session expired`:ZooKeeper 连接问题 - `Clock skew too great`:时间不同步 3. **处理 ZooKeeper 问题** - 清理 ZooKeeper 中的 HBase 数据: ```bash zkCli.sh deleteall /hbase quit ``` - 重启 ZooKeeper 和 HBase。 4. **调整内存配置** 修改 `$HBASE_HOME/conf/hbase-env.sh`: ```bash export HBASE_MASTER_OPTS="-Xmx4g -XX:+UseG1GC" # 根据机器配置调整 ``` 5. **同步集群时间** ```bash # 安装 NTP 服务 sudo apt install ntp sudo systemctl restart ntp ``` 6. **验证依赖服务状态** - 确保 Hadoop 和 ZooKeeper 正常运行: ```bash jps # 确认 NameNode、DataNode、QuorumPeerMain 进程存在 ``` - 启动顺序:Hadoop → ZooKeeper → HBase。 --- #### 三、操作验证 1. 依次重启服务: ```bash stop-hbase.sh stop-zookeeper.sh stop-dfs.sh start-dfs.sh start-zookeeper.sh start-hbase.sh ``` 2. 检查 HMaster 进程: ```bash jps | grep HMaster # 应显示 HMaster 进程 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值