写数据流程:
1)首先客户端对文件进行切分,切分成数据块,每个数据块默认存储到 3 个节点上
2)在写入数据之前,客户端首先会告诉 NameNode 要写一个文件,此时 NameNode 会增加一个文件,记录这个文件的详细信息,把这个文件放入目录树里面
3)然后开始写数据,因为客户端把文件划分成了很多块,在写第一个数据块时,NameNode先要返回 3 个 DataNode 位置,这样第一个数据块会以一个一个数据包的方式(packet)写入第一个 DataNode,同时数据包也同时会向第二,第三个节点写,形成数据写的流水线,每个 DataNode 写完数据包之后,会返回确认。当第一个数据块写完之后,以同样的方式写下一个数据块。
4)当所有数据块写完之后,它调用 close 关闭写入流,它会通知 NameNode 文件写完了,这时就会关闭 socket,结束数据的写过程。
客户端从 HDFS 读数据过程?
读数据流程:
1)客户端首先发送一个 open 请求到 NameNode,获取这个文件所包含数据块,以及每个数据块的存储位置。
2)这些数据块信息返回给客户端之后,它依次按照这个数据块的顺序,读取每一个数据块。
3)第一个数据块在这个节点上面读,第二个数据块在这个节点读,读完之后,按照文件实际数据块的先后位置,显示给用户,整个文件读完之后,就会调用close,关闭输出流就 ok 了
欢迎来撩 : 汇总all