帅帅男孩 发表于 2016-12-7 07:02:24

Hadoop学习十六:Hadoop-Hdfs DataXceiverServer源码读数据

一.DataXceiverServer入口 
        Hadoop学习十五:Hadoop-Hdfs DataXceiverServer源码概述提到

[*]DataXceiverServer每接收到一个请求,就创建一个DataXceiver来处理该请求。
[*]DataXceiver首先读取请求版本号并检验;然后再读取一个字节的操作码,根据操作码转入相关的子程序进行处理。本文介绍读数据。

二.读数据

[*]读取客户端发送过来的信息。

[*]blockId:要读取块的block id。
[*]generationStamp:要读取块的block generationStamp。此时客户端已经知道了block id and generationStamp,至于怎么知道的,后续文章会讲到。
[*]startOffset:偏移量。
[*]length:读取长度。
[*]clientName:客户端名字。



[*]根据上述信息创建BlockSender,以上信息都是BlockSender的成员变量。
[*]创建BlockSender出错,返回给客户端一个错误状态OP_STATUS_ERROR,不再继续进行下面步骤。创建成功,返回给客户端一个错误状态OP_STATUS_SUCCESS。
[*]调用BlockSender.sendBlock发送数据。

[*]首先发送应答头。

[*]checksum
[*]offset





[*]然后发送数据快。

[*]packetLen:包长度,不好包头。
[*]offset:偏移量。
[*]seqno:包序列号。
[*]tail:是否最后一个包,(offset + len >= endOffset) ? 1 : 0)。
[*]len:数据长度。
[*]checksum:校验数据。
[*]data:block数据块。


页: [1]
查看完整版本: Hadoop学习十六:Hadoop-Hdfs DataXceiverServer源码读数据