以下是本人研究源代码成果, 此文僅献给我和我的小伙伴们,不足之处,欢迎斧正-------------------------------------------------致谢道格等人!
注: hadoop版本0.20.2,有童鞋表示看代码头晕,所以本文采用纯文字描述,哥还特意为你们把字体调调颜色噢 ^ o ^
注: hadoop版本0.20.2,有童鞋表示看代码头晕,所以本文采用纯文字描述,哥还特意为你们把字体调调颜色噢 ^ o ^
大家都知道,hadoop是最优秀的大数据处理框架之一,而本文研究的DFSClient是 hadoop内部实现中,较为核心的部分
DFSClient,顾名思义,分布式文件系统的客户端
hadoop的客户端包括:shell命令,java接口,pig 等。。
DFSClient在分布式文件系统中扮演的角色:
现实场景如下:我的数据文件分散存储在集群中的很多台机器上,现在我需要获取它,以使用shell命令操作为例
我输入获取数据的指令后,DFSClient通过RPC机制和NameNode(集群中的主机器)通信并获得文件的元数据信息(数据的存放位置,校验和,等等一些关键的信息),然后DFSClient再与DataNode通信(集群中的其它机器)通过数据I/O流来获取到我要的文件信息,
它在分布式文件系统内部实现中起到双方通信的作用,是用户与文件系统通信的桥梁,由此可见,掌握它,驾驭它,显得尤为迫切!
首先一起讨论下关于DFSClient的体系结构:
它位于org.apache.hadoop.hdfs包下:体系图如下
DFSClient
|-------LeaseChecker implements Runnable
|-------DNAddrPair
|-------BlockReader extends FSInputChecker ( FSInputChecker extends FSInputStream )
首先一起讨论下关于DFSClient的体系结构:
它位于org.apache.hadoop.hdfs包下:体系图如下
DFSClient
|-------LeaseChecker implements Runnable
|-------DNAddrPair
|-------BlockReader extends FSInputChecker ( FSInputChecker extends FSInputStream )
|-------DFSInputStream
|-------DFSDataInputStream extends DataInputStream implements Seekable(支持流中随机存储), PositionedReadable(定位读取)
|-------DFSOutputStream extends FSOutputSummer implements Syncable (FSOutputSummer extends OutputStream)
|--------Packet
|-------DFSDataInputStream extends DataInputStream implements Seekable(支持流中随机存储), PositionedReadable(定位读取)
|-------DFSOutputStream extends FSOutputSummer implements Syncable (FSOutputSummer extends OutputStream)
|--------Packet
|--------DataStreamer extends Daemon (extends Thread)
|--------ResponseProcessor extends Thread
Lease
|--------ResponseProcessor extends Thread
Lease