欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

Bad connect ack with firstBadLink 192.168.*.*:50010

发布时间:2025/7/14 编程问答 51 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Bad connect ack with firstBadLink 192.168.*.*:50010 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

 今天搭建hadoop2.0 时hadoop fs  -put 文件时报错,看到网上有这样的解决方法先转载下 呵呵 已解决

 

转自:http://lykke.iteye.com/blog/1320558

Exception in thread "main" java.io.IOException: Bad connect ack with firstBadLink 192.168.1.14:50010
        at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.createBlockOutputStream(DFSClient.java:2903)
        at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.nextBlockOutputStream(DFSClient.java:2826)
        at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.access$2000(DFSClient.java:2102)
        at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream$DataStreamer.run(DFSClient.java:2288)

运行hadoop put文件 的时候 回报这个错误

这个在 DFSClient 里

 

[java] view plaincopyprint?

  • // connects to the first datanode in the pipeline  

  •   // Returns true if success, otherwise return failure.  

  •   //  

  •   private boolean createBlockOutputStream(DatanodeInfo[] nodes, String client,  

  •                   boolean recoveryFlag) {  

  •     String firstBadLink = "";  

  •     if (LOG.isDebugEnabled()) {  

  •       for (int i = 0; i < nodes.length; i++) {  

  •         LOG.debug("pipeline = " + nodes[i].getName());  

  •       }  

  •     }  

  •   

  •     // persist blocks on namenode on next flush  

  •     persistBlocks = true;  

  •   

  •     try {  

  •       LOG.debug("Connecting to " + nodes[0].getName());  

  •       InetSocketAddress target = NetUtils.createSocketAddr(nodes[0].getName());  

  •       s = socketFactory.createSocket();  

  •       int timeoutValue = 3000 * nodes.length + socketTimeout;  

  •       NetUtils.connect(s, target, timeoutValue);  

  •       s.setSoTimeout(timeoutValue);  

  •       s.setSendBufferSize(DEFAULT_DATA_SOCKET_SIZE);  

  •       LOG.debug("Send buf size " + s.getSendBufferSize());  

  •       long writeTimeout = HdfsConstants.WRITE_TIMEOUT_EXTENSION * nodes.length +  

  •                           datanodeWriteTimeout;  

  •   

  •       //  

  •       // Xmit header info to datanode  

  •       //  

  •       DataOutputStream out = new DataOutputStream(  

  •           new BufferedOutputStream(NetUtils.getOutputStream(s, writeTimeout),   

  •                                    DataNode.SMALL_BUFFER_SIZE));  

  •       blockReplyStream = new DataInputStream(NetUtils.getInputStream(s));  

  •   

  •       out.writeShort( DataTransferProtocol.DATA_TRANSFER_VERSION );  

  •       out.write( DataTransferProtocol.OP_WRITE_BLOCK );  

  •       out.writeLong( block.getBlockId() );  

  •       out.writeLong( block.getGenerationStamp() );  

  •       out.writeInt( nodes.length );  

  •       out.writeBoolean( recoveryFlag );       // recovery flag  

  •       Text.writeString( out, client );  

  •       out.writeBoolean(false); // Not sending src node information  

  •       out.writeInt( nodes.length - 1 );  

  •       for (int i = 1; i < nodes.length; i++) {  

  •         nodes[i].write(out);  

  •       }  

  •       checksum.writeHeader( out );  

  •       out.flush();  

  •   

  •       // receive ack for connect  

  •       firstBadLink = Text.readString(blockReplyStream);  

  •       if (firstBadLink.length() != 0) {  

  •         throw new IOException("Bad connect ack with firstBadLink " + firstBadLink);  

  •       }  

  •   

  •       blockStream = out;  

  •       return true;     // success  

  •   

  •     } catch (IOException ie) {  

  •   // connects to the first datanode in the pipeline// Returns true if success, otherwise return failure.//private boolean createBlockOutputStream(DatanodeInfo[] nodes, String client,boolean recoveryFlag) {String firstBadLink = "";if (LOG.isDebugEnabled()) {for (int i = 0; i < nodes.length; i++) {LOG.debug("pipeline = " + nodes[i].getName());}}// persist blocks on namenode on next flushpersistBlocks = true;try {LOG.debug("Connecting to " + nodes[0].getName());InetSocketAddress target = NetUtils.createSocketAddr(nodes[0].getName());s = socketFactory.createSocket();int timeoutValue = 3000 * nodes.length + socketTimeout;NetUtils.connect(s, target, timeoutValue);s.setSoTimeout(timeoutValue);s.setSendBufferSize(DEFAULT_DATA_SOCKET_SIZE);LOG.debug("Send buf size " + s.getSendBufferSize());long writeTimeout = HdfsConstants.WRITE_TIMEOUT_EXTENSION * nodes.length +datanodeWriteTimeout;//// Xmit header info to datanode//DataOutputStream out = new DataOutputStream(new BufferedOutputStream(NetUtils.getOutputStream(s, writeTimeout), DataNode.SMALL_BUFFER_SIZE));blockReplyStream = new DataInputStream(NetUtils.getInputStream(s));out.writeShort( DataTransferProtocol.DATA_TRANSFER_VERSION );out.write( DataTransferProtocol.OP_WRITE_BLOCK );out.writeLong( block.getBlockId() );out.writeLong( block.getGenerationStamp() );out.writeInt( nodes.length );out.writeBoolean( recoveryFlag );       // recovery flagText.writeString( out, client );out.writeBoolean(false); // Not sending src node informationout.writeInt( nodes.length - 1 );for (int i = 1; i < nodes.length; i++) {nodes[i].write(out);}checksum.writeHeader( out );out.flush();// receive ack for connectfirstBadLink = Text.readString(blockReplyStream);if (firstBadLink.length() != 0) {throw new IOException("Bad connect ack with firstBadLink " + firstBadLink);}blockStream = out;return true;     // success} catch (IOException ie) {



    显示为没有收到正确的应答包,我用了两种方式解决了


    1) '/etc/init.d/iptables stop' -->stopped firewall
    2) SELINUX=disabled in '/etc/selinux/config' file.-->disabled selinux

    一般的这种hadoop 应答类错误 多半是防火墙没有关闭

    转载于:https://blog.51cto.com/gcjava/1426492

    总结

    以上是生活随笔为你收集整理的Bad connect ack with firstBadLink 192.168.*.*:50010的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。