HDFS学习笔记【Datanode/流式接口】

说明

数据节点的最重要的功能点,是管理数据节点的数据块,并可以和NN,DN交互读写。

  • DFSClient将数据块写入数据节点中
  • DFSClient从数据节点中读取数据块
  • 数据节点复制
    读写操作基于DataTransferProtocol

DataTransferProtocol

  • readBlock
    DN上读取指定的数据块
  • writeBlock
    DN上指定数据块写入到Pipeline中
  • transferBlock
    等等

先只关注读写,其他的复制,失败等不影响主线。

Sender和Receiver

Sender和Receiver是DataTransferProtocol的子类,Sender发送调用请求,Receiver响应请求。
在这里插入图片描述

Sender类流程

以sender类readBock方法实现为例

  • 参数序列化
  • 指定OP
  • 调用send发送
    send方法写入DataTransferProtocol版本号,OP,参数
out.write(Xxx)
out.flush

通过IO流发送给远程的Datanode,DN接收到请求后,调用readBlock操作。

Receiver

  • readop 解析sender的请求
  • processOp 处理sender的请求
  • 通过子类DataXceiver实现具体的opReadBlock等操作

Receiver相当于简单工厂模式,对不同的op进行分类

DataXceiverServer

IO流如何进行远程调用的(相当于socket的服务端,负责接收请求)
在这里插入图片描述
sender访问dataXceiverServer,将请求转发给receiver

启动时创建DataXceiverServer对象

设置TCPPeerServer,参数缓冲区等信息
DataXceiverServer监听所有的流式接口,端口等
放到守护线程中

  • 短路读相关
    localDataXceiverServer响应短路读

run方法

构建连接之后,所有的功能都是在run方法中执行的(循环方法)。
DataXceiverServer负责连接的建立以及构造和启动DataXceiver,流式接口由DataXceiver响应。

  • 检查datanode.xceivercount是否超过总数,datanode状态以及是否在升级等
  • 如果满足条件,peerServer.accept.构造dataXceiver
    如果有datanode异常,kill线程等,直接关闭peerServer。常规的关闭时修改状态值.

DataXceiver

响应DataXserver的收到的请求,响应sender发送的请求。
DataXceiver是以daemon方式启动的独立线程,里面有一个run方法,我们注重关注下run方法

run方法

1)获取网络的输入/输出流
2)装饰输入流(增加缓存等)
3) 调用父类(Receiver)的readOp接口解析出op
4)调用父类(Receiver)的processOp处理这个流式请求

数据处理方法

processOp处理参数,是在DataXceiver中具体实现的。
DataXceiver具体实现了读方法,写方法,短路读以及其他方法。

小节

数据节点的读取写入,底层均调用了tcp请求。
构造DataXceiverServer接收请求,请求者是sender,收到请求之后根据操作码不同,转发到不同的方法中。
发送和接收的请求包括操作码,参数等。
DataXceiver Deamon线程进行具体的流处理。
具体的处理过程接下来梳理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值