Файл может быть записан только в 0 из 1 узлов minReplication - PullRequest
0 голосов
/ 19 марта 2020

сервер A: 192.168.96.130, ОС: centos7.x сервер B: Localhost, мой компьютер, ОС: windows10

Я устанавливаю Hadoop3.1.2 на сервере A и пишу Java Приложение для записи данные в HDFS на сервере A. Когда приложение Java развертывается на сервере A, он может успешно записывать файлы с содержимым в HDFS. Когда Java Applicataion развернут на сервере 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();

Как решить этот пробник?

1 Ответ

0 голосов
/ 19 марта 2020

Я думаю, вы должны сначала проверить работоспособность вашего кластера. http://namenode1:50070 тогда, возможно, вы не закрыли свои iptables, поэтому вы не можете lnet портить, когда вы на сервере2. Вы можете попробовать выполнить команду telnet SERVER1_IP 50020 на сервере server1 и server2, чтобы проверить ее.

...