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会进行一系列的检查:权限、文件是否存在。检查无误后,通过元数据返回需要下载的文件所分的数据块数据块的存储节点
3.客户端开始下载第一个数据块,就近原则。将第一个数据块以的方式写在本地文件中;
4.第一个数据块下载完成,下载第二个数据块…追加到第一个数据开的末尾;
5.所有的数据块下载完成,客户端向NameNode响应。

#### 元数据合并
元数据合并条件:
(1)时间间隔:3600s==1h; dfs.namenode.checkpoint.period
(2)元数据条数:100万条; dfs.namenode.checkpoint.txns
两个条件只要达到一个就可以进行合并。

元数据合并的过程:
1.SecondaryNameNode定期向NameNode发送检查,检查NameNode的元数据是否需要合并,每5min发送一次;
2.NameNode需要进行元数据合并了;
3.SecondaryNameNode发送合并元数据请求;
4.NameNode将正在编辑的日志文件进行回滚,同时生成一个全新的正在编辑的日志文件;
5.SecondaryNameNode将需要合并的edits文件和fsimage文件拉取到自己的本地;
6.SecondaryNameNode将edits文件进行合并,在内存中,根据edits文件的日志修改fsimage文件;
7.SecondaryNameNode将合并好的fsimage文件发送给NameNode,自己本地也会保存一份;
8.NameNode将最新的fsimage文件进行重命名覆盖掉原来的fsimage文件。


edits日志某一个用户、某一个时间、上传了一个文件、文件位置在哪里、文件的大小多大
内存中的元数据:磁盘中加载过来的fsimage文件
每一次进行修改元数据的时候,内存中会真正的修改,但是磁盘中的元数据只会记录操作日志,不会真正修改。
内存中的元数据永远是最新、最全的元数据。
磁盘中的元数据,fsimage中存放的仅仅是一部分元数据。
最新的元数据:fsimage+合并后的edits文件。
磁盘中的元数据需要定期更新。

再次总结HDFS各个角色的作用:

  1. NameNode:
    (1)接受客户端的读写请求;
    (2)管理元数据信息;
    (3)接受DataNode的心跳报告;
    (4)负载均衡;
    (5)负责数据块的副本的存储节点的分配。

  2. DataNode:
    (1)处理客户端的读写请求;
    (2)真正的进行数据块的存储;
    (3)向NameNode发送心跳报告;
    (4)进行副本的复制。

  3. SecondaryNameNode:
    (1)帮助NameNode备份元数据信息(冷备份),查看备份的元数据信息是否是最新的,有一定的数据延时的,可能造成数据丢失;
    (2)帮助NameNode进行元数据合并,减轻NameNode的压力。

  4. 客户端:
    (1)发送读写请求;
    (2)对上传的文件进行逻辑切块和物理切块;
    (3)向NameNode反馈数据上传、下载的响应。

收藏 打印