Hadoop:HDFS 读写数据流程及优缺点

一、HDFS 写数据流程

  • 写的过程:

  1.  CLIENT(客户端):用来发起读写请求,并拆分文件成多个 Block;
  2. NAMENODE:全局的协调和把控所有的请求,提供 Block 存放在 DataNode 上的地址;
  3. DATANODE:负责数据的存储,可以有很多个;

 

 

 

  1. 客户端想 NameNode 发出请求(包含 Blocksize 和 副本数);
  2. NameNode 经过计算,反馈给客户端相同副本数的 DataNode,切给出的 DataNode 有优先存储顺序要求;(数据与 DataNode 对应时,一般移动计算,不移动数据)
  3. 客户端得到信息后开始写数据,当第一个 DataNode 接受 Block 时,会将该数据传给第二个 DataNode ,第二个 DataNode 接受到数据时,也会将该数据传递给第三个 DataNode;在最后一个 DataNode 接受数据完毕时,则该 Block 全部传输完毕;
  4. DataNode 在接受数据完毕后,每一个 DataNode 都会将完毕信息传递给 NameNode;
  5. NameNode 将所有 DataNode 反馈的信息(所有数据以传输完毕),反馈给客户端;
  6. 客户端接受到 NamaNode 反馈的信息后(第一个 Block 传输完毕),开始发送请求传输第二个 Block;
  7. 传输完毕后,在关闭请求之前,NameNode 将该文件所有 Block 存放在 DataNode 上的 ID 保存在文件中;

 

 

二、HDFS 读数据的流程

  • 客户端:提供文件名、副本数、Block 数量、Block 地址;
  • NameNode:提供 DataNode 地址及内部位置;

 

  1. 客户端提供提供文件名、副本数、Block 数量、Block 地址给 NameNode;
  2. NameNode 收到请求后,根据请求给出 副本及其 Block 所存放的 DataNode,以及Block 在 DataNode 中存放的位置;
  3. 客户端根据 NameNode 给的信息,给 DataNode 发出请求,由 DataNode 给出数据所在的具体块的信息;
  4. 客户端根据 DataNode 提供的信息,下载数据;

 

  • 如果 DataNode 损坏、DataNode 上的数据丢失、数据块异常或者损坏等异常,HDFS会有相应的故障容错措施:

 

 

三、HDFS 的优缺点总结

  • 优点:

  1. 数据冗余(文件以 Block 并且多副本的方式存储在集群的节点上)、硬件容错;
  2. 处理流式的数据访问;(一次写入,多次读取)
  3. 适合存储大文件;(通过扩展 DataNode 来实现存储大文件)
  4. 可构建在廉价的机器上;(降低成本)

 

  • 缺点:

  1. 低延迟的数据访问;(一般数据较大,不容易实现在秒级别检索数据)
  2. 不适合小文件的存储;(无论文件大小,都有对应的元数据存放在 NameNode 上,如果小文件较多,则对应的元数据较多,对应的元数据所占用的内存信息较大,给NameNode 压力较大)

 

posted @ 2019-09-02 15:04  何永灿  阅读(1165)  评论(0编辑  收藏  举报