1、客户端通过DistrubutedFileSystem向NameNode发出上传ss.avi文件的申请
2、NameNode检查HDFS是否存在ss.avi如果没有就同意请求
3、客户端会问NameNode有哪些DataNode可以上传我的第一个block块呢
4、NameNode告诉客户端能上传到哪些DataNode
5、客户端这时通过FSDataOutputStream向DataNode1申请传输通道,DataNode1继续把申请传给DataNode2,DataNode2又把申请传到DataNode3
6、三个存储节点收到请求会依次响应,这样客户端与这三个存储节点就建立联系
7、既然有了通信管道,客户端正式上传第一个block到DataNode1节点,block以packet(64kb)为单位放在内存缓冲区,依次传到DataNode2、3,以应答队列形式等待应答
1、客户端通过DistributedFileSystem向NameNode请求下载ss.avi文件
2、NameNode告诉客户端ss.avi的元数据信息(数据的存储位置)
3、这些元数据包含数据存在那个DataNode的地址,这时会按照Hadoop定义的集群拓扑结构算出到客户端的距离,距离从小到大排序
3、客户端知道距离后,就通过FSDataInputStream去请求最近的DataNode节点的数据
4、DataNode相应请求,FSDataInputStream以read()函数并行的读取第一个block块文件块,读完后关闭流。之后还会并行读取其他距离越来越远的DataNode节点数据,读完后关闭流。最终把所有的block合并成一个完整的文件。