上一篇说到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问题得到彻底解决。
分享到:
相关推荐
赠送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-...
赠送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;...
赠送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...
赠送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...
赠送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-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....
赠送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
赠送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 对应...
赠送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...
赠送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...
赠送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搭建flume1.7需要用到的包,还有几个包也有提供
hadoop-hdfs-2.2.0.jar 点击下载资源即表示您确认该资源不违反资源分享的使用条款
flume 想要将数据输出到hdfs,必须要有hadoop相关jar包。本资源是hadoop 2.7.7版本
通过本文档的学习,用户能够了解如何通过Hadoop-Fuse-Dfs实现HDFS(Hadoop Distributed File System)文件系统的挂载,从而方便地在本地文件系统中访问HDFS中的数据。 #### 二、准备工作 1. **配置CDH yum源**: ...
有时候需要查看修改或者回复hdfs的默认配置,在这个jar包里面,可以把hadoop-default.xml拿出来
htmlunit-runner-freemarker.zip,runner将freemarker模板加载到htmlunit中。runner使用htmlunit maven插件执行freemarker模板。
hadoop-client-2.6.5.jar
Hadoop-HDFS实践教程是一本专门针对初学者设计的大数据Hadoop分布式存储系统HDFS的学习材料。Hadoop是一个开源的分布式计算框架,它允许用户通过简单易用的编程模型处理大型数据集,而HDFS(Hadoop Distributed File...