对于hbase节点可以正常启动,但是无法查看webui界面,并且一段时间后Hmaster挂了
我们查看hbase的日志文件,例如(
/opt/en/hbase/logs/hbase-root-master-hadoop1.out
)
2024-05-04 01:18:49,466 INFO [Thread-13] regionserver.HRegionServer: ***** STOPPING region server 'hadoop1,16000,1714756720219' ***** 2024-05-04 01:18:49,466 INFO [Thread-13] regionserver.HRegionServer: STOPPED: Stopped by Thread-13 2024-05-04 01:18:51,901 INFO [master/hadoop1:16000] ipc.NettyRpcServer: Stopping server on /192.168.88.111:16000 2024-05-04 01:18:51,904 INFO [master/hadoop1:16000] regionserver.HRegionServer: Stopping infoServer 2024-05-04 01:18:51,922 INFO [master/hadoop1:16000] handler.ContextHandler: Stopped o.e.j.w.WebAppContext@2954b5ea{/,null,UNAVAILABLE}{file:/opt/en/hbase-2.1.0/hbase-webapps/master} 2024-05-04 01:18:51,930 INFO [master/hadoop1:16000] server.AbstractConnector: Stopped ServerConnector@4339e0de{HTTP/1.1,[http/1.1]}{0.0.0.0:16010} 2024-05-04 01:18:51,931 INFO [master/hadoop1:16000] handler.ContextHandler: Stopped o.e.j.s.ServletContextHandler@8b91134{/static,file:///opt/en/hbase-2.1.0/hbase-webapps/static/,UNAVAILABLE} 2024-05-04 01:18:51,932 INFO [master/hadoop1:16000] handler.ContextHandler: Stopped o.e.j.s.ServletContextHandler@c6da8bb{/logs,file:///opt/en/hbase-2.1.0/logs/,UNAVAILABLE} 2024-05-04 01:18:51,934 INFO [master/hadoop1:16000] regionserver.HRegionServer: stopping server hadoop1,16000,1714756720219 2024-05-04 01:18:51,937 INFO [master/hadoop1:16000] regionserver.HRegionServer: stopping server hadoop1,16000,1714756720219; all regions closed. 2024-05-04 01:18:51,937 INFO [master/hadoop1:16000] hbase.ChoreService: Chore service for: master/hadoop1:16000 had [] on shutdown 2024-05-04 01:18:51,952 WARN [master/hadoop1:16000] master.ActiveMasterManager: Failed get of master address: java.io.IOException: Can't get master address from ZooKeeper; znode data == null 2024-05-04 01:18:51,970 INFO [master/hadoop1:16000] zookeeper.ZooKeeper: Session: 0x30000044bb00001 closed 2024-05-04 01:18:51,972 INFO [master/hadoop1:16000] regionserver.HRegionServer: Exiting; stopping=hadoop1,16000,1714756720219; zookeep
从日志来看,HBase的RegionServer(在这里也被错误地标记为Master,尽管从日志内容来看它实际上是RegionServer)和(可能是)Master服务正在正常关闭。然而,关闭过程中出现了警告,指出从ZooKeeper获取Master地址时失败,并且znode数据为null。
这里有几个步骤来解决或诊断这个问题:
- 检查ZooKeeper集群: - 确保ZooKeeper集群中的所有节点都正在运行,并且集群是健康的。- 使用ZooKeeper客户端(如
zkCli.sh
)连接到ZooKeeper,并检查HBase相关的znode是否存在且状态正常。 - 检查HBase配置: - 验证
hbase-site.xml
中的ZooKeeper配置是否正确,包括hbase.zookeeper.quorum
和hbase.zookeeper.property.clientPort
。- 确保ZooKeeper集群的地址和端口与HBase配置中指定的相匹配。 - 检查网络问题: - 确保HBase节点可以访问ZooKeeper集群,并且没有防火墙或网络配置阻止它们之间的通信。
- 检查HBase状态: - 在尝试重新启动HBase之前,确保没有残留的HBase进程在运行。可以使用
jps
或ps
命令结合grep
来查找和杀死任何残留的HBase进程。 - 重新启动HBase: - 在确保ZooKeeper集群运行正常且HBase配置正确后,尝试重新启动HBase。- 使用HBase的启动脚本(如
start-hbase.sh
)来启动HBase服务。 - 查看日志文件: - 在HBase和ZooKeeper的日志文件中查找任何与连接失败或znode数据为null相关的错误或异常。- 这些日志文件通常位于HBase和ZooKeeper的安装目录下的
logs
子目录中。 - 考虑版本兼容性: - 确保您使用的HBase版本与ZooKeeper版本兼容。- 如果您最近升级了HBase或ZooKeeper,请查阅相关文档以确保正确配置和迁移。
- 查看HBase的znode: - 使用ZooKeeper客户端检查HBase创建的znode是否存在且状态正常。- 如果znode丢失或状态异常,可能需要手动删除并重新启动HBase服务来重新创建它们。但是,请小心操作,因为这可能会影响到正在运行的工作负载和数据一致性。
但是,我检查一遍之后,我的配置文件并没有写错,这里呢我们往上翻一下日志文件得到:
2024-05-04 01:18:49,465 ERROR [Thread-13] master.HMaster: ***** ABORTING master hadoop1,16000,1714756720219: Unhandled exception. Starting shutdown. ***** org.apache.hadoop.security.AccessControlException: Permission denied: user=root, access=WRITE, inode="/":hadoop:supergroup:drwxr-xr-x
这个错误日志显示 HBase 的 Master 进程(在机器
hadoop1
上,使用端口
16000
,并且具有唯一的会话ID
1714756720219
)由于一个未处理的异常而启动关闭流程。异常是一个
AccessControlException
,指出用户
root
没有权限向 HDFS(Hadoop Distributed FileSystem)的根目录
/
写入数据。
在 Hadoop 和 HBase 的安全上下文中,HDFS 的文件和目录具有与 UNIX 系统类似的权限和所有权模型。在这个案例中,根目录
/
被拥有者
hadoop
和组
supergroup
所拥有,并且权限设置为
drwxr-xr-x
,这意味着只有拥有者
hadoop
用户才有写入权限(
w
),而组
supergroup
和其他用户只有读取和执行权限(
r-x
)。
由于
root
用户尝试写入 HDFS 的根目录但没有足够的权限,因此 HBase Master 进程无法继续运行,并启动了关闭流程。
要解决这个问题,你可以考虑以下几个步骤:
- 修改HDFS权限: 如果你确定需要
root
用户能够写入 HDFS 的根目录(这通常不推荐,因为root
用户权限过高,可能引发安全问题),你可以使用 Hadoop 的hdfs dfs -chmod
命令来修改权限。但请注意,这通常不是一个好主意。 - 使用正确的用户运行HBase: 更常见的做法是确保 HBase 使用正确的用户(例如
hbase
或hadoop
)来运行其服务。确保 HBase 进程由具有适当 HDFS 权限的用户启动。
由于我之前创建了一个名为hadoop的用户,然后我只需要更改en文件夹下的文件权限就可以了:
chown -R hadoop:hadoop /opt/en
将其用户与用户组修改为hadoop的用户与用户组,之后我们启动hbase,并打开WEBUI界面,我们可以看到正常打开了
**总的来说我的错误就是权限问题! **
版权归原作者 是啊柒呢 所有, 如有侵权,请联系我们删除。