hdfs架构学习

特点:

  • 大文件存储,单个文件可达到G
  • 关注高吞吐量而非低延迟
  • 块大小默认为64MB,大文件会分为多个文件块存储在不同的datanode几点上。小文件单独占用块,多个小文件不会合并到一个块中。因此hdfs更加喜欢大文件。

架构图

hdfs架构图1
hdfs架构图2

NameNode

  • 负责存放文件元数据,文件系统命名空间的维护,任何对命名空间的更改,例如属性、名字等都将记录到NameNode中
  • 不记录文件保存的位置,文件位置信息会由DataNode上报并保存在内存中,同时也会持久化到本地文件系统(fsimage和edits)
  • NameNode消耗大量内存和I/O资源。因此其不存储用户数据,也不进行mapreduce任务。

    fsimage

  • hdfs文件元数据持久化点,保存了hdfs文件系统所有的命名空间和block块信息。

edits

  • 存放hdfs文件系统的更新操作

SecondNameNode

hdfs只使用一个NameNode存在单点故障问题,解决办法:

  • 元数据定期持久化到本地文件系统中
  • namenode在重启的过程中需要合并edits和fsimage文件,获取文件元数据信息,但是这个动作会影响namenode启动的速度,因此通过SecondNameNode定期进行edits文件和fsimage文件的合并。

DataNode

  • 数据真正存放的地方,以块存储。为客户端提供读写服务
  • 向NameNode发送心跳数据,汇报文件包含的块列表和备份个数
  • DataNode之间也会通信,进行数据库的负载,实现冗余备份