hadoop初读--写数据时的数据流管道双向机制

Hadoop在确保数据一致性与完整性时采用了一种特殊的写数据机制,涉及双向应答流程。首先,写请求答应从最后一个数据节点开始向客户端回传,每个节点收到应答后才接收数据。接着,数据节点在写入磁盘后发送确认包到上游节点,此过程由DataTransferProtocol.PipelineAck类处理。重点在于理解这两个同步应答阶段在数据流动中的作用。
摘要由CSDN通过智能技术生成

为了保证分布式数据的一致性和完整性,hadoop写数据流时使用了写数据和应答的双向机制.
这里写图片描述


这里着重说明的是反向应答其实是分为两部分:
1.写请求答应:
     正常情况下,这个应答会从管道的最后一个数据节点开始,往客户端方向发送,管道上的每一个节点都会等待这个应答,收到应答后,才会开始接受数据,也就是说,客户端会等待这个应答,然后才开始发送数据。这个应答是同步的,即直到收到应答后才会进行下一步。应答包的结构,只有两个字段:返回码和附加信息,当返回码是OP_STATUS_ERROR时,附件信息提供了流中第一个出错的数据节点地址信息.

2.写数据应答:
     客户端通过数据流管道发送数据,管道上的数据节点会在接受数据并写磁盘后,需要给上游节点发送确认包,以清除缓冲区的内容。确认包从最后一个数据节点发送,逆流而上,直达数据源。应答包对应的类是:
DataTransferProtocol.PipelineAck.


下面贴下略简代码,以注释方式说明几个本人以为的需要关注的点:

1.写请求应答处理的代码:

/**
* 1.当前节点的写请求应答处理
*/
if (targets.length > 0) {
        InetSocketAddress mirrorTarget = null;
        mirrorNode = targets[0].getName();
        mirrorTarget = NetUtils.createSocketAddr(mirrorNode);
        mirrorSock = datanode.newSocket();
        try {
          int timeoutValue = datanode.socketTimeout +
                             (HdfsConstants.READ_TIMEOUT_EXTENSION * numTargets);
          int writeTimeout = datanode.socketWriteTimeout + 
                             (HdfsConstants.WRITE_TIMEOUT_EXTENSION * numTargets);
          N
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值