Windows环境下使用HBase-testing-util出现All datanodes are bad错误
解决HBase Testing Utility 1.2.0在Windows 10下的Datanode异常问题
我之前在Windows环境用IntelliJ跑HBase Testing Utility的时候也踩过类似的坑,给你几个针对性的解决方案:
1. 先解决核心的Datanode报错问题
你遇到的All datanodes 127.0.0.1:54655 are bad错误,大概率是因为迷你集群的HDFS副本数配置不合理。默认HDFS的副本数是3,但你用的是单节点迷你集群,只有一个Datanode,根本满足不了3副本的要求,系统就会判定所有Datanode都不可用。
解决方法很简单,在初始化HBaseTestingUtility的时候手动设置副本数:
Configuration conf = HBaseConfiguration.create(); // 把HDFS副本数设为1,适配单节点集群 conf.set("dfs.replication", "1"); // 同时可以在这里设置mapred.max.split.size conf.set("mapred.max.split.size", "134217728"); // 示例:128MB,单位是字节 HBaseTestingUtility utility = new HBaseTestingUtility(conf); utility.startMiniCluster();
2. 修改mapred.max.split.size的文件位置
如果你不想在代码里硬编码参数,也可以通过修改Hadoop配置文件来设置:
- 找到你的
HADOOP_HOME目录下的etc/hadoop文件夹 - 如果没有
mapred-site.xml,就复制mapred-site.xml.template并重命名为mapred-site.xml - 打开文件,添加以下配置段:
<property> <name>mapred.max.split.size</name> <value>134217728</value> <!-- 按需调整数值,单位为字节 --> </property>
不过要注意:HBase Testing Utility启动的迷你集群可能会优先使用代码中设置的配置,所以如果代码里有覆盖,配置文件的修改可能不会生效。
3. Windows环境额外注意事项
- 确保
HADOOP_HOME下的bin目录里有对应版本的winutils.exe,Windows下运行Hadoop相关工具必须依赖它,版本要和你的Hadoop(这里是1.2.0)匹配,否则会出现各种权限或启动异常。 - 检查
core-site.xml里的hadoop.tmp.dir配置,路径要选没有空格的(比如D:\hadoop_tmp),且你有读写权限,避免临时目录权限不足导致Datanode启动失败。
内容的提问来源于stack exchange,提问作者Marco Catalano
相关产品推荐
相关产品推荐

