DFSClient代码很复杂,但是不外乎几种情况:和NameNode的通讯,和DataNode的通讯,写入数据到DataNode和从DataNode读到数据

DFSClient和NameNode的通讯就是通过上文分析的RPC.getProxy()获得NameNode的代理进而和NameNode进行通讯

DFSCLient和DataNode的通讯就不是这样了,狗血的不明白为什么要这样做,DFSCLient和DataNode之间使用DFSOutputStream和DFSInputStream进行数据写入和读取


DFSCLient.DFSOutputStream:DFSCLient和DataNode的通讯时,需要创建DFSOutputStream,然后写入数据时其实是缓存在DFSOutputStream的数据队列里(Packet Queue),
有其他线程从数据队列里面拿到Packet进行写入

DFSCLient.DFSOutputStream.Packet,DFSClient向DataNode写入数据的时候是一个一个Packet写入的
DFSCLient.DFSOutputStream.DataStreamer,真正写入数据的类,在线程中循环的从数据队列里拿到Packet,然后真正的写入Socket
DFSCLient.DFSOutputStream.ResponseProcessor,数据写入DataNode会等待DataNode的响应,ResponseProcessor就是干这个事情的


在DataNode这边在DataNode启动的时候会启动DataXceiverServer,DataXceiverServer在线程循环中监听来自DFSClient的socket请求,然后启动
DataXceiver来处理和DFSClient的数据的读写

 

下面是几张类图:

HDFS分析(三)

 

HDFS分析(三)

相关文章:

  • 2021-10-11
  • 2021-07-25
  • 2021-06-06
  • 2021-09-15
  • 2021-12-05
  • 2021-12-07
  • 2021-10-27
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-10-11
  • 2022-12-23
相关资源
相似解决方案