前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Hadoop3.1.1源码Client详解 : Packet入队后消息系统运作之DataStreamer(Packet发送) : 处理异常

Hadoop3.1.1源码Client详解 : Packet入队后消息系统运作之DataStreamer(Packet发送) : 处理异常

作者头像
执生
发布2020-09-27 10:43:59
3470
发布2020-09-27 10:43:59
举报
文章被收录于专栏:立权的博客立权的博客

该系列总览: Hadoop3.1.1架构体系——设计原理阐述与Client源码图文详解 : 总览

紧接着上一篇文章: Hadoop3.1.1源码Client详解 : Packet入队后消息系统运作之DataStreamer(Packet发送) : 主干

本文均是对DataStreamer的processDatanodeOrExternalError方法的讲解

DataStreamer是客户端管理和DataNode间互收发包的线程类

在他的run方法里,processDatanodeOrExternalError方法用来处理流水线异常

上图中,的橙色框是关闭掉和流水线间的Stream,也就是数据传输流,而不是关闭DataStreamer,两者完全不一样。

DataStreamer可以开多次Stream和流水线通信。关闭一次无所谓。只要设置好环境,再开就好了。

总结一下步骤:

1.查看是否有错误,没有的话返回fasle,表示DataStreamer不用休眠,有错误的话转2

2.如果有错误首先重新架设流水线,转3

3.如果ResponseProcessor没关闭,那么返回true,表示DataStreamer应该休眠一会,等待ResponseProcessor关闭。如果ResponseProcessor已经关闭则转4

4.检查流水线状态,如果是处于流水线关闭阶段,则不重发最后一个Packet(lastPacket也就是告知DataNode我们已经写完了Block的Packet),假装从流水线上收到了关于这个Packet的ACK

然后,序号设置成lastPacket的序号,以保证序号一致,最后调用endBlock结束当前Block的写入的流程。如果流水线不处于关闭状态,那么继续创作新的ResponseProcessor来接收流水线上的ACK,并且把流水线状态设置成DATA_STREAMING。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-02-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档