原文:https://www.cnblogs.com/volcao/p/11446657.html
一、HDFS 写数据流程
-
写的过程:
- CLIENT(客户端):用来发起读写请求,并拆分文件成多个 Block;
- NAMENODE:全局的协调和把控所有的请求,提供 Block 存放在 DataNode 上的地址;
- DATANODE:负责数据的存储,可以有很多个;
- 客户端想 NameNode 发出请求(包含 Blocksize 和 副本数);
- NameNode 经过计算,反馈给客户端相同副本数的 DataNode,切给出的 DataNode 有优先存储顺序要求;(数据与 DataNode 对应时,一般移动计算,不移动数据)
- 客户端得到信息后开始写数据,当第一个 DataNode 接受 Block 时,会将该数据传给第二个 DataNode ,第二个 DataNode 接受到数据时,也会将该数据传递给第三个 DataNode;在最后一个 DataNode 接受数据完毕时,则该 Block 全部传输完毕;
- DataNode 在接受数据完毕后,每一个 DataNode 都会将完毕信息传递给 NameNode;
- NameNode 将所有 DataNode 反馈的信息(所有数据以传输完毕),反馈给客户端;
- 客户端接受到 NamaNode 反馈的信息后(第一个 Block 传输完毕),开始发送请求传输第二个 Block;
- 传输完毕后,在关闭请求之前,NameNode 将该文件所有 Block 存放在 DataNode 上的 ID 保存在文件中;
二、HDFS 读数据的流程
- 客户端:提供文件名、副本数、Block 数量、Block 地址;
- NameNode:提供 DataNode 地址及内部位置;
- 客户端提供提供文件名、副本数、Block 数量、Block 地址给 NameNode;
- NameNode 收到请求后,根据请求给出 副本及其 Block 所存放的 DataNode,以及Block 在 DataNode 中存放的位置;
- 客户端根据 NameNode 给的信息,给 DataNode 发出请求,由 DataNode 给出数据所在的具体块的信息;
- 客户端根据 DataNode 提供的信息,下载数据;
-
如果 DataNode 损坏、DataNode 上的数据丢失、数据块异常或者损坏等异常,HDFS会有相应的故障容错措施:
三、HDFS 的优缺点总结
-
优点:
- 数据冗余(文件以 Block 并且多副本的方式存储在集群的节点上)、硬件容错;
- 处理流式的数据访问;(一次写入,多次读取)
- 适合存储大文件;(通过扩展 DataNode 来实现存储大文件)
- 可构建在廉价的机器上;(降低成本)
-
缺点:
- 低延迟的数据访问;(一般数据较大,不容易实现在秒级别检索数据)
- 不适合小文件的存储;(无论文件大小,都有对应的元数据存放在 NameNode 上,如果小文件较多,则对应的元数据较多,对应的元数据所占用的内存信息较大,给NameNode 压力较大)