HDFS分析(三)

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的数据的读写

 

下面是几张类图:

 

posted @ 2012-03-31 16:18  nod0620  阅读(649)  评论(0编辑  收藏  举报