HDFS写数据流程:
1、客户端通过调用,分布式文件系统里的Create()新建一个文件,分布式文件系统通过RPC调用的名称节点中的文件系统命名空间创建一个新文件。//系统确认客户端操作的权限,并且查看是否有相同文件。验证未通过,则为创建失败,会显示IOException异常。验证通过,则分布式文件系统会返回文件系统数据输出流 让客户端去写数据。
2、客户端调用文件系统数据输出流里面的Write()函数,向对应文件写入数据。//写入数据时,分布式文件系统会将会将文件分为一个一个的数据块,放入“数据队列”里,再由数据流系统将分割开的文件放入数据流中,最后通过文件流方式向数据节点中写数据。
3、在写数据时 分布式文件系统同时会保存数据块,作为内部队列,当数据流里的数据全部输入的同时,内部队列会去确认输入数据的信息,所以这个内部队列也会作为确认队列。当全部数据都被确认成功输入,最后这个内部队列会被删除。
4、如果中途输入失败,HDFS会将失败的文件以及后面的文件添加到“数据队列”的前端确保输入的数据不被丢失。并且与名称节点关联,失败的数据节点若恢复正常,则失败的数据块删除,此节点没有配置属性,则另外的数据节点重新安排创建副本,最后正常执行写入操作。
5、完成写入,调用文件系统数据输出流里的Close()方法,写入节点,等待确认并返回成功,完成写入。将文件的块信息存储在名称节点中。