HDFS即Hadoop Distributed File System, HDFS存储数据的流程如下:
1、client跟NameNode交互
1.1、client 发消息给NameNode,NameNode检查client是否有写的权限。如果有权限,NameNode检查是否有同名文件,如果没同名文件,NameNode生成一条新文件的记录(不包含存放地址信息)
1.2、NameNode向client发送相应的DataNode列表和一个token,地址用来存放数据,token是client向DataNode写数据前要发送过去的密钥
2、client跟DataNode交互
2.1、client收到DataNode列表和token后,其DFSOutputStream将数据拆分成一个个块(一般64MB或128MB),并集群中生成管道,通过管道向DataNode列表中的第一个DataNode写入数据。 同时,DFSOutputStream生成一个确认列表(ack queue)。
2.2、第一个DataNode写完后,将根据复制参数将数据块通过管道复制到第二个DataNode。第二个写完,将数据块通过管道复制到第三个DataNode...... 如果复制参数为 3,那么在不同的 DataNode 中至少会创建 3 个块副本。每个DataNode写完后,会向NameNode发送块的信息,NameNode会记录下来。
2.3、最后一个DataNode创建所需的副本后,向前一个DataNode发送确认信息,前一个往再前一个DataNode发确认信息...... 第一个DataNode向client发送确认信息,client的DFSOutputStream收到确认信息后,将该块从确认列表(ack queue)中移除
2.4、重复2.1——2.3的过程,直到所有数据块传输完成
2.5、当数据传送完成,且收到确认信息时,client调用close()方法关闭进程
图片是简单的流程,可以参考: