Hadoop 原理
hdfs读流程
HDFS文件读流程:
客户端读取数据的过程如下:
(1)首先客户端会调用FileSystem. open()方法获取的dfs实例,dfs会向远程的NameNode发送RPC请求。
(2)然后NameNode会视情况返回文件的部分或全部的块列表,对于每个块呢,都包含块所在的DataNode地址,这些DataNode会按照Hadoop定义的集群拓扑结构得出客户端的距离,然后进行排序,客户端会选择离他最近的DataNode来读取块,如果客户端本身就是一个DataNode,那么将从本地读取文件。
(3)读取完当前块数据后,关闭当前的DataNode连接,并为读取下一个块寻找最佳的DataNode。
(4)然后客户端会继续向NameNode获取下一批块列表,当所有的block块完都读完后,这时就会调用close方法来完成资源的关闭操作。
hdfs写流程
HDFS文件写流程:
客户端写数据的过程如下:
(1)检查目标文件是否已存在,父目录是否存在。
(2)NameNode 返回是否可以上传。不能上传会返回异常。
(3)确定可以上传,客户端请求第一一个block 上传到哪几个datanode服务器上
(4)NameNode返回3个datanode节点,假定分别为dn1、dn2、 dn3。
(5)客户端通过FSDataOutputStream模块请求dn1.上传数据,dn1 收到请求会继续调用dn2,然后dn2调用dn3,将这个通信管道建立完成。
(6)