java - 文件只能写入1个minReplication节点中的0个

标签 java hadoop

服务器A:192.168.96.130,OS:centos7.x
服务器B:Localhost,我的计算机,操作系统:windows10

我在serverA上安装Hadoop3.1.2,并编写Java应用程序以将数据写入服务器A上的HDFS中。
将Java应用程序部署在服务器A上后,它可以将包含内容的文件成功写入HDFS。
当Java应用程序部署在服务器B上时,它可以将文件写入HDFS,但是不能将内容写入文件。总是得到错误:

2020-03-18 20:56:43,460 INFO org.apache.hadoop.ipc.Server: IPC Server handler 9 on 9000, call Call#4 Retry#0 org.apache.hadoop.hdfs.protocol.ClientProtocol.addBlock from 192.168.96.1:53463
java.io.IOException: File /canal/canal_1/canal_1-2020-3-19-4.txt could only be written to 0 of the 1 minReplication nodes. There are 1 datanode(s) running and 1 node(s) are excluded in this operation.
        at org.apache.hadoop.hdfs.server.blockmanagement.BlockManager.chooseTarget4NewBlock(BlockManager.java:2121)
        at org.apache.hadoop.hdfs.server.namenode.FSDirWriteFileOp.chooseTargetForNewBlock(FSDirWriteFileOp.java:295)
        at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:2702)
        at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.addBlock(NameNodeRpcServer.java:875)
        at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.addBlock(ClientNamenodeProtocolServerSideTranslatorPB.java:561)
        at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java)
        at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:523)
        at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:991)
        at org.apache.hadoop.ipc.Server$RpcCall.run(Server.java:872)
        at org.apache.hadoop.ipc.Server$RpcCall.run(Server.java:818)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:422)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1729)
        at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2678)

下面是我的Java应用程序代码:

Configuration conf = new Configuration();
FileSystem fs= FileSystem.get(new URI("hdfs://192.168.96.1:9000/"),conf,"root");
FSDataOutputStream out = fs.create(new Path("/canal/canal_1/canal_1-2020-03-10.txt"));
out.writeBytes("15, kevin15, 2020.3.15");
out.flush();
out.close();
fs.close();

如何解决这个问题?

最佳答案

我认为您应该首先检查群集的健康状况。 http://namenode1:50070那么也许您还没有关闭iptables,因此在server2上无法远程登录端口。您可以尝试在server1和server2上执行命令telnet SERVER1_IP 50020进行检查。

关于java - 文件只能写入1个minReplication节点中的0个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60750028/

相关文章:

scala - 如何使用Spark Scala将HiveContext作为参数从一个函数传递到另一个函数

java - 获取 ArrayIndexOutOfBoundsException : 3 while executing Hadoop Pragram on cloudera

循环中的 Java-8 线程

java - 为什么此 Java 转换会引发错误?

java - 在纯 HTML 文本周围包装标签

hadoop - 无法在 hadoop 0.23.0 上启动节点管理器

java - 如何从map/reduce函数输出不同类型的键,值对?

java - Spring - MVC - 在重新显示给用户之前清理 URL

java - 没有这样的 bean 定义并且不可能创建 bean

hadoop - 在 hdinsight 配置单元编辑器上使用什么命令连接到特定存储