HDFS原理分析|青训营笔记

233 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的第1天

HDFS提供了哪些特性

  • 高性能
  • 容错
  • 相对简单的中心化管理
  • 安全
  • 优化的分布式处理
  • 可扩展性

NameNode和DataNode

  • NameNode 作用
    • 管理HDFS集群中文件系统的名字空间(Namespace),例如打开文件系统,关闭文件系统,重名名文件或者目录等
    • NameNode节点负责确定指定的文件块到具体的Datanode节点的映射关系,在客户端与数据段节点之间共享数据
    • 管理DataNode节点的状态报告,包括Datanode节点的健康状态报告和其所在节点上数据块状态报告,以便能够及时处理失效的数据节点

88aebbb994b9844a3a9dd8e5428d5d83.png

  • DataNode 作用
    • 文件的实际内容是存储在工作节点的“块”里
    • 每个工作节点都运行一个DataNode守护进程
    • 这些块是工作节点本地文件系统里的一些简单的文件
    • 每个块为了冗余,都存储在多个不同的节点上

20210623163147473.png

 HDFS的副本机制

所有的文件都是以 block 块的方式存放在 HDFS 文件系统当中,作用如下

  1. 一个文件有可能大于集群中任意一个磁盘,引入块机制,可以很好的解决这个问题
  2. 使用块作为文件存储的逻辑单位可以简化存储子系统
  3. 块非常适合用于数据备份进而提供数据容错能力

在 Hadoop1 当中, 文件的 block 块默认大小是 64M, hadoop2 当中, 文件的 block 块大小默认是 128M, block 块的大小可以通过 hdfs-site.xml 当中的配置文件进行指定

如果一个数据不能被等分切片,那么最后就剩下一个小于128M(或者自己设置)的块大小

存放块副本的个数也是配置文件中指定的,默认是3

4a2ed193e33a0a86983720e36ad24ab8.png

HDFS是如何读取和写入文件?

  • 写文件
    • 详细步骤
      1. 客户端连接NameNode
      2. NameNode在它的元数据里记录下该文件的记录,并返回块名机器DN列表给客户端
      3. 客户端连接到第一个DN,并且开始发送数据
      4. 第一DN收完数据后,它会往第2个DN并发送数据
      5. 第二个DN采用用羊的方式发给第3个DN
      6. 包被接受完成的确认信息ack会沿着管道传给客户端
      7. 当块儿写完后,客户端会像NameNode汇报
    • 有Datename出现故障时
      1. 管道会被关闭
      2. 一个新的管道被开辟给2个好的节点
      3. 数据继续通过管道写数据到2个好的节点上
      4. NameNode将注意到该块不足副本数,将会重新复制一份到其他DN上
  • 读文件
    • 详细步骤
      1. 客户端连接NameNode
      2. NameNode返回请求文件的前几个块的名字和位置
      3. 客户端连接列表里的一个DN,并且读取块数据