HDFS的两大核心包括写数据和读数据,这是HDFS的一个重点,下面笔者就讲解一下两大核心的过程。同时,笔者也会讲解一下元数据的合并过程。
写数据
1.客户端向NameNode发送文件上传请求;
2.NameNode进行一系列的检查:权限、文件的父目录是否已经存在。检查通过之后,允许上传;
3.允许客户端上传;
4.客户端发送真正的文件上传请求,请求包含一个重要的信息:文件的长度、大小;
5.NameNode根据文件的长度计算文件的切块个数。(例,文件大小为200M,按照每块128M的大小进行切分,一共被且分为2份)
NameNode获取副本的配置信息。(dfs.replication=3)
NameNode返回副本的节点信息的时候,遵循就近原则。
6.客户端准备上传文件;
7.客户端对文件进行一个逻辑切块;
8.开始上传第一个数据块;
9.构建第一个数据块的上传通道pipline(构建通道的时候,客户端启动一个阻塞进程,等待DataNode的响应);
10.开始第一个数据块的数据上传,客户端上传第一个数据块,先上传到内存中,再到磁盘中。然后第一个副本向第一个数据块进行数据拷贝,第二个副本向第一个副本进行数据拷贝。(文件上传的过程中,以packet为单位进行传输、64K为单位进行写入。)
数据块的真实切分客户端边上传边切分,第一个数据块到128M之后,第一个数据块切分完成;
11.第一个数据块上传完成,关闭当前的pipline;
12.开始上传第二个数据块;
13.重复上面9、10、11的步骤;
14.当所有的数据块上传完成,客户端向NameNode反馈。
读数据
1.客户端向NameNode发送文件下载请求;
2.NameNode会进行一系列的检查:权限、文件是否存在