设为首页 收藏本站
查看: 1034|回复: 0

[经验分享] Hadoop-HDFS DFSClient的严重bug

[复制链接]

尚未签到

发表于 2016-12-10 07:17:35 | 显示全部楼层 |阅读模式
上一篇说到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问题得到彻底解决。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-312025-1-1.html 上篇帖子: Hadoop 解除 "Name node is in safe mode"(转) 下篇帖子: Hadoop 分布式计算开源框架
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表