Hbase Region 处于 OFFLINE 状态并且不可分配

问题描述 投票:0回答:1

我们为 hbase 配置多个网卡,并将 hbase.regionserver.ipc.address 和 hbase.master.ipc.address 设置为 0.0.0.0。这导致了主机名查找问题,这是多年前的一个已知问题(我们现在知道)。

我们已经支持了这一点,但最终有 70 个区域处于离线状态,并且仍然分配给主机名为 0:0:0:0:0:0:0:0

的死亡区域服务器

重新启动主服务器应该会转换它,但它不喜欢区域名称。似乎想在过渡期间将其拆分:

2024-04-24 11:02:26,475 ERROR [MASTER_SERVER_OPERATIONS-master:60000-1] executor.EventHandler: Caught throwable while processing event M_SERVER_SHUTDOWN

java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: **0:0:0:0:0:0:0:0,60020,1713708572030-splitting**
    at org.apache.hadoop.fs.Path.initialize(Path.java:206)
    at org.apache.hadoop.fs.Path.<init>(Path.java:172)
    at org.apache.hadoop.fs.Path.<init>(Path.java:94)
    at org.apache.hadoop.fs.Path.suffix(Path.java:354)
    at org.apache.hadoop.hbase.master.MasterFileSystem.getLogDirs(MasterFileSystem.java:315)
    at org.apache.hadoop.hbase.master.MasterFileSystem.splitLog(MasterFileSystem.java:405)
    at org.apache.hadoop.hbase.master.MasterFileSystem.splitLog(MasterFileSystem.java:383)
    at org.apache.hadoop.hbase.master.MasterFileSystem.splitLog(MasterFileSystem.java:281)
    at org.apache.hadoop.hbase.master.handler.ServerShutdownHandler.process(ServerShutdownHandler.java:196)
    at org.apache.hadoop.hbase.executor.EventHandler.run(EventHandler.java:128)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.net.URISyntaxException: Relative path in absolute URI: 0:0:0:0:0:0:0:0,60020,1713708572030-splitting
    at java.net.URI.checkPath(URI.java:1823)
    at java.net.URI.<init>(URI.java:745)
    at org.apache.hadoop.fs.Path.initialize(Path.java:203)

我可以验证hadoop不喜欢这个名字:

/home/gs/Dev/hadoop/bin/hdfs dfs -mkdir /hbase/WALs_mike/0:0:0:0:0:0:0:0,60020,1713708572030-splitting

返回:/hbase/WALs_mike/0:0:0:0:0:0:0:0,60020,1713708572030 - 分割不是有效的 DFS 文件名

这是一个旧版本:0.96.1.1

我认为主要问题是代码无法处理错误的主机名:0:0:0:0:0:0:0:0

有办法在 M_SERVER_SHUTDOWN 期间禁用拆分吗? 无论如何要重命名与这些区域关联的主机吗?

在 hbck 和 shell 分配、移动、取消分配方面运气不佳:

2024-04-24 08:15:19,492 INFO  [RpcServer.handler=20,port=60000] master.AssignmentManager: Skip assigning c,\x92I$\x92I$\x92I$\x92I$\x92I$\x90,1330810355551.d31a033cd7810e347639e12833969754., it's host 0:0:0:0:0:0:0:0,60020,1713708572030 is dead but not processed yet
hbase
1个回答
0
投票

我们通过以下方式解决了这个问题:

  • 获取 hbase 代码并编辑 ServerShutdownHandler.java 以跳过以“0:0:0:0”开头的服务器名称的拆分,并忽略“跳过在其他服务器上分配转换中的区域”逻辑。
  • 然后我们换入新构建的 hbase-server-096.1.12.jar 并重新启动 master。然后主服务器重新分配了所有离线的服务器。

最困难的部分是使用 java6 构建旧的 hbase 代码。我们选择的 Maven 配置文件需要更改或删除一些 Maven 依赖项。

© www.soinside.com 2019 - 2024. All rights reserved.