`
david.org
  • 浏览: 157140 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Hadoop-HDFS DFSClient的严重bug

阅读更多
上一篇说到Shell 对自身DN造成的性能影响,本篇说一下它对DFSClient的冲击。

不知道有没有朋友像我这样病态的使用Hadoop, 我的DFSClient总是一直Running的,因为我需要它时刻为我做事,所以我不会轻意重新创建一个与NN相连的DFSClient。 闲言少述。

Shell 的执行对正在put文件的客户端会产生下列异常:
1. DataStreamer Exception: java.io.IOException: Unable to create new block.
该异常是由Bad connect ack with firstBadLink:h1 异常引起的, 意思是说在传输下一个BLOCK的时候,DFSClient会建立向DN的一个传输管道,那么在传输真实chunk数据之前,需要各个节点对于管道中头信息的确认给予DFSClient反馈,节点h1 给予了错误的反馈信息,或压根就没有收到h1的ack. 这种情况有必要说一下,在任意多节点的情况下,该问题可以被DFSClient 容错。

关闭文件流时产生下列异常:
1. Error Recovery for block blk_-XXXX_XXXX bad datanode[X] nodes == null
不可否认, 这异常同样是由于DN的不稳定,在客户端ResponseProcessor的处理中,抛出的。Hadoop的DFSClient通过ResponseProcessor类,从DN的输入流中读取包的反馈ack值, 如果ack值不正确, ackQueue对列中的Packet就不会被移除, 而是通过DataStream类尝试发送。

有意思的一幕随着关闭文件流产生的异常而发生, DFSClient中的FSOutputStream#close() 方法:
public void close() throws IOException {
      if(closed)
        return;
      closeInternal();
      leasechecker.remove(src);
      
      if (s != null) {
        s.close();
        s = null;
      }
    }

在执行close方法时, closeInternal() 方法显然已经抛出了上面我们说到的异常, 那么socket.close() 这句就未执行到。

很有趣的现象:我用dfshealth.jsp页面把DN的Xceiver值输出, 发现该值在运行一段时间后会变的奇高,stack中可以看到DN存在很多reciverPacket() 的线程, 但DFSClient端的stack就是看不到任何sendPacket之类的线程,跑到heap中, 才能看到有不少socket对象。
这个bug已经由hadoop-0.21-trunk在解决, 如果使用低版本的朋友, 可以手动try一下closeInternal() 方法。 但即使关闭socket, 还是无法稳定文件block的, 除非Shell问题得到彻底解决。
分享到:
评论
2 楼 david.org 2010-05-20  
mygirl1987 写道
你好,我发现一个问题,就是DFSClient类中的log内容都是输出到屏幕的,我想让它和其他类一样直接把log内容打印到log文件中去,您知道该怎么做吗?呵呵,谢谢了


你是怎么使用client端的? log的输出和log4j的配置有关系, 和程序是没有关系的。
1 楼 mygirl1987 2010-05-20  
你好,我发现一个问题,就是DFSClient类中的log内容都是输出到屏幕的,我想让它和其他类一样直接把log内容打印到log文件中去,您知道该怎么做吗?呵呵,谢谢了

相关推荐

    hadoop-hdfs-client-2.9.1-API文档-中文版.zip

    赠送jar包:hadoop-hdfs-client-2.9.1.jar 赠送原API文档:hadoop-hdfs-client-2.9.1-javadoc.jar 赠送源代码:hadoop-hdfs-client-2.9.1-sources.jar 包含翻译后的API文档:hadoop-hdfs-client-2.9.1-javadoc-...

    hadoop-hdfs-client-2.9.1-API文档-中英对照版.zip

    赠送jar包:hadoop-hdfs-client-2.9.1.jar; 赠送原API文档:hadoop-hdfs-client-2.9.1-javadoc.jar; 赠送源代码:hadoop-hdfs-client-2.9.1-sources.jar; 赠送Maven依赖信息文件:hadoop-hdfs-client-2.9.1.pom;...

    hadoop-hdfs-2.7.3-API文档-中英对照版.zip

    赠送jar包:hadoop-hdfs-2.7.3.jar; 赠送原API文档:hadoop-hdfs-2.7.3-javadoc.jar; 赠送源代码:hadoop-hdfs-2.7.3-sources.jar; 赠送Maven依赖信息文件:hadoop-hdfs-2.7.3.pom; 包含翻译后的API文档:hadoop...

    hadoop-hdfs-2.6.5-API文档-中文版.zip

    赠送jar包:hadoop-hdfs-2.6.5.jar; 赠送原API文档:hadoop-hdfs-2.6.5-javadoc.jar; 赠送源代码:hadoop-hdfs-2.6.5-sources.jar; 赠送Maven依赖信息文件:hadoop-hdfs-2.6.5.pom; 包含翻译后的API文档:hadoop...

    hadoop-hdfs-2.5.1-API文档-中文版.zip

    赠送jar包:hadoop-hdfs-2.5.1.jar; 赠送原API文档:hadoop-hdfs-2.5.1-javadoc.jar; 赠送源代码:hadoop-hdfs-2.5.1-sources.jar; 赠送Maven依赖信息文件:hadoop-hdfs-2.5.1.pom; 包含翻译后的API文档:hadoop...

    hadoop最新版本3.1.1全量jar包

    hadoop-client-api-3.1.1.jar hadoop-hdfs-client-3.1.1.jar hadoop-mapreduce-client-jobclient-3.1.1.jar hadoop-yarn-common-3.1.1.jar hadoop-client-minicluster-3.1.1.jar hadoop-mapreduce-client-app-3.1.1....

    hadoop-hdfs-2.7.3-API文档-中文版.zip

    赠送jar包:hadoop-hdfs-2.7.3.jar; 赠送原API文档:hadoop-hdfs-2.7.3-javadoc.jar; 赠送源代码:hadoop-hdfs-2.7.3-sources.jar; 赠送Maven依赖信息文件:hadoop-hdfs-2.7.3.pom; 包含翻译后的API文档:hadoop...

    hadoop-hdfs-2.4.1.jar

    hadoop-hdfs-2.4.1.jar

    hadoop-hdfs-2.9.1-API文档-中文版.zip

    赠送jar包:hadoop-hdfs-2.9.1.jar 赠送原API文档:hadoop-hdfs-2.9.1-javadoc.jar 赠送源代码:hadoop-hdfs-2.9.1-sources.jar 包含翻译后的API文档:hadoop-hdfs-2.9.1-javadoc-API文档-中文(简体)版.zip 对应...

    hadoop-hdfs-2.6.5-API文档-中英对照版.zip

    赠送jar包:hadoop-hdfs-2.6.5.jar; 赠送原API文档:hadoop-hdfs-2.6.5-javadoc.jar; 赠送源代码:hadoop-hdfs-2.6.5-sources.jar; 赠送Maven依赖信息文件:hadoop-hdfs-2.6.5.pom; 包含翻译后的API文档:hadoop...

    hadoop-hdfs-2.5.1-API文档-中英对照版.zip

    赠送jar包:hadoop-hdfs-2.5.1.jar; 赠送原API文档:hadoop-hdfs-2.5.1-javadoc.jar; 赠送源代码:hadoop-hdfs-2.5.1-sources.jar; 赠送Maven依赖信息文件:hadoop-hdfs-2.5.1.pom; 包含翻译后的API文档:hadoop...

    hadoop-hdfs-2.9.1-API文档-中英对照版.zip

    赠送jar包:hadoop-hdfs-2.9.1.jar; 赠送原API文档:hadoop-hdfs-2.9.1-javadoc.jar; 赠送源代码:hadoop-hdfs-2.9.1-sources.jar; 赠送Maven依赖信息文件:hadoop-hdfs-2.9.1.pom; 包含翻译后的API文档:hadoop...

    hadoop-hdfs-2.7.3

    hadoop-hdfs-2.7.3搭建flume1.7需要用到的包,还有几个包也有提供

    hadoop-hdfs-2.2.0.jar

    hadoop-hdfs-2.2.0.jar 点击下载资源即表示您确认该资源不违反资源分享的使用条款

    hadoop-hdfs-2.7.7.jar

    flume 想要将数据输出到hdfs,必须要有hadoop相关jar包。本资源是hadoop 2.7.7版本

    hadoop-fuse-dfs安装.docx

    通过本文档的学习,用户能够了解如何通过Hadoop-Fuse-Dfs实现HDFS(Hadoop Distributed File System)文件系统的挂载,从而方便地在本地文件系统中访问HDFS中的数据。 #### 二、准备工作 1. **配置CDH yum源**: ...

    hadoop-hdfs-2.7.2.jar

    有时候需要查看修改或者回复hdfs的默认配置,在这个jar包里面,可以把hadoop-default.xml拿出来

    hadoop-hdfs-bkjournal-2.2.0.zip

    htmlunit-runner-freemarker.zip,runner将freemarker模板加载到htmlunit中。runner使用htmlunit maven插件执行freemarker模板。

    hadoop-client-2.6.5.jar

    hadoop-client-2.6.5.jar

    Hadoop-HDFS-实践教程

    Hadoop-HDFS实践教程是一本专门针对初学者设计的大数据Hadoop分布式存储系统HDFS的学习材料。Hadoop是一个开源的分布式计算框架,它允许用户通过简单易用的编程模型处理大型数据集,而HDFS(Hadoop Distributed File...

Global site tag (gtag.js) - Google Analytics