我们为 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
我们通过以下方式解决了这个问题:
最困难的部分是使用 java6 构建旧的 hbase 代码。我们选择的 Maven 配置文件需要更改或删除一些 Maven 依赖项。