启动hdfs报java.io.IOException: Premature EOF from inputStream错误

原因:新集群(cdh)搭建好,打算测试一下新集群的hdfs性能,于是使用hdfs自带的测试 hadoop-test-2.6.0-mr1-cdh5.6.1.jar,计划产生10T的数据量进行测试,hadoop jar hadoop-test-2.6.0-mr1-cdh5.6.1.jar TestDFSIO -write -nrFiles 10 -fileSize 10000000 -resFile /tmp/TestDFSIO_results.log;

由于时间问题,在数据量产生到2T多的时候,集群机器直接关机了,等再次开机时,hdfs启动上有两个datanode起不来,包如下错:

ERROR    DataNode    
laydca10:1004:DataXceiver error processing WRITE_BLOCK operation  src: /192.168.1.150:33090 dst: /192.168.1.151:1004
java.io.IOException: Premature EOF from inputStream
    at org.apache.hadoop.io.IOUtils.readFully(IOUtils.java:203)
    at org.apache.hadoop.hdfs.protocol.datatransfer.PacketReceiver.doReadFully(PacketReceiver.java:213)
    at org.apache.hadoop.hdfs.protocol.datatransfer.PacketReceiver.doRead(PacketReceiver.java:134)
    at org.apache.hadoop.hdfs.protocol.datatransfer.PacketReceiver.receiveNextPacket(PacketReceiver.java:109)
    at org.apache.hadoop.hdfs.server.datanode.BlockReceiver.receivePacket(BlockReceiver.java:501)
    at org.apache.hadoop.hdfs.server.datanode.BlockReceiver.receiveBlock(BlockReceiver.java:901)
    at org.apache.hadoop.hdfs.server.datanode.DataXceiver.writeBlock(DataXceiver.java:808)
    at org.apache.hadoop.hdfs.protocol.datatransfer.Receiver.opWriteBlock(Receiver.java:169)
    at org.apache.hadoop.hdfs.protocol.datatransfer.Receiver.processOp(Receiver.java:106)
    at org.apache.hadoop.hdfs.server.datanode.DataXceiver.run(DataXceiver.java:246)
    at java.lang.Thread.run(Thread.java:748)

,后来检查发现,启动不了的这两台datanode下存在几百GB的数据没删除,然后把两台机器上的datanode角色删除,然后把这两台datanode下的几百GB的数据删除,重新添加这两台机器上的datanode角色,发现还是启动不了;再查看日志发现192.168.1.150和192.168.1.151上的yarn下面有几百MB的数据,怀疑可能是由于数据已经删除,但是yarn中的任务注册信息还存在,导致的错误;然后把150和151上的nodemanager角色删除,然后把150和151上的yarn下的数据全部清空,然后重新添加这两个nodemanager角色,在重启yarn和hdfs,hdfs的所有节点就都可以正常启动了。

猜你喜欢

转载自my.oschina.net/u/3197158/blog/1786410
EOF