先来了解下分布式文件系统(Distributed FileSystem),它是跨越多台计算机或者服务器来管理文件或目录等数据。换句话说,分布式文件系统是允许我们在一个集群的多个节点或机器上存储数据,并允许多个用户访问这些数据的文件系统。
1.当客户端要向HDFS文件系统上传文件时,第一步通过分布式文件系统先与NameNode建立连接,上传自己的元数据。
(a)通过调用客户端的对象DistributedFileSystem的create方法;
(b)DistributedFileSytem会发起对namenode的一个RPC连接,请求创建一个文件,不包含关于block块的请求。namenode会执行各种各样的检查,确保要创建的文件不存在与DataNode中,并且客户端具备创建文件的权限。如果检查通过,namenode会创建一个文件(在edits中),否则创建失败,客户端抛出异常。
2.DistributedFileSystem返回一个FSDataOutputStream对象给客户端用于写数据。FSDataOutputstream封装了一个DFSOutputStream对象负责客户端跟DataNode以及namenode的通信。
3.然后开始数据的传输,这时候我们假设要传输的文件大小是256M,有三个DataNode节点等待存放文件的block块。如果,我们使用网络进行传输,将256M的文件分为128M,分别往三个DataNode节点中传输数据,这样一次传输就需要占据128M*3的网络带宽,这还只是一个客户端的传输消耗,并且传输速度也会严重受到网络带宽的影响。
现在我们可以改进下,不在向三个DataNo