1、客户端通过调用distributedFileSystem调用ceate()方法创建文件
2、distributedFileSystem对namenode创建一个PPC调用,去检查是否有这个文件,以及这个文件的权限,如果有这个文件,会返回IOException,如果没有就去创建这个文件。之后distributedFileSystem会返回给客户端DFSOutputStream对象,这个对象负责处理DataNode和namenode之间的通信。
3、客户端写入数据时,DFSOutputStream将这个数据分解成一个个的数据包,并写入内存数据队列中,称为“数据队列”
4、datastreamer来处理数据,是根据DataNode的大小来要求namenode分配DataNode适合的新内存来存储这些数据副本。首先将数据队列存储在第一DataNode中,之后一次存储在第二个DataNode中,然后再存储在第三个DataNode中。
5、等到DataNode存储完成之后,fileoutputstream等待DataNode去返回回执结果。等到DataNode将所有的结果都返回之后,该数据包才会从这个数据队列中删除。
6、客户端完成数据的写入后,调用close方法,该操作将所有的包写入DataNode管线。
7、distributedFileSystem等待确认信号,namenode已经知道文件由哪些块组成,所以他在返回前只需要等待数据块进行最小量的复制。
- 客户端通过在DistributedFileSystem中调用create()来创建文件。
- DistributedFileSystem 使用RPC去调用namenode,在文件系统的命名空间创一个新的文件,没有块与之相联系。namenode执行各种不同的检查以确保这个文件不会已经存在,并且在client有可以创建文件的适当的许可。如果检查通过,na