特点:
- 大文件存储,单个文件可达到G
- 关注高吞吐量而非低延迟
- 块大小默认为64MB,大文件会分为多个文件块存储在不同的datanode几点上。小文件单独占用块,多个小文件不会合并到一个块中。因此hdfs更加喜欢大文件。
架构图
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之间也会通信,进行数据库的负载,实现冗余备份