HDFS写操作(二) DataNode DataXceiverServer DataXceiver

上文分析了客户端提交写数据的請求过程,本文研究DataNode对此請求的处理。先看一下DataNode启动的过程,见startDataNode方法:

1. 它与NameNode通信,注册自己的信息,基于RPC通信机制和DatanodeProtocol协议。

2. 创建DataXceiverServer,通过建立ServerSocket,与Client和其它DataNode进行读写数据。

3. 创建一个http server,用来提供网页浏览状态。

4. 创建一个IPC server,用来接受Client(基于ClientDatanodeProtocol)和其它DataNode(基于 InterDatanodeProtocol)的請求。注意InterDatanodeProtocol协议只有 getBlockMetaDataInfo方法和updateBlock方法,ClientDatanodeProtocol也只有 recoverBlock方法,它们用于出错的恢复处理,暂且不管。

注意客户端与DataNode的数据传输是直接基于IP/TCP(Socket)的,即根据第二步,与第四步的原理不同。看一下DataXceiverServer是如何工作的:

1. 每接受一个 socket請求, 新创建一个 DataXceiver 来处理。

2. DataXceiver通过DataTransferProtocol来接收数据,首先读出一个byte来表示此次請求的类型,如OP_READ_BLOCK,OP_WRITE_BLOCK等。我们顺着OP_WRITE_BLOCK分析写操作。

3. DataXceiver的writeBlock方法将block写到disk上。它从socket得到的DataInputStream按顺序读取一些信 息,包括block的大小,需要传输的DataNode的数量和信息。在进一步读取block数据之前,它先将这些头信息传输给剩余的DataNode。 所有的DataNode组成一条链状,依次传递数据。

4. 然后DataXceiver再利用BlockReceiver来读取block的数据,并同样在读取的过程中传输给其它DataNode。回想 Client端是如何发送的?(将Block划分成若干packet来发送)同理,这里也是以packet来读取的。注意BlockReceiver的 receivePacket方法,它在读取一个packet后,马上转发给DataNode链的下一个结点。

关于写过程的分析,也推荐《Hadoop_The_Definitive_Guide》一书。

假设写过程一切顺利,那么这些数据是如何在DataNode里存放的呢?这涉及到文件的存储结构,留在以后分析。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值