Master/Slave
NameNode(NN)
- 活动Master管理节点(全局唯一)
- 管理命名空间
- 管理元数据
- 管理Block副本策略:默认3个
- 处理客户端读写请求,为DataNode分配任务
Secondary NameNode(SNN)
不是热备。
定期帮助NN合并fsimage与edits文件,减少NN启动时间。
NameNode元数据文件
- edits(编辑日志文件):保存了自最新检查点(CheckPoint)之后的所有文件更新操作
- fsimage(元数据检查点镜像文件,相当于内存的快照):保存了文件系统中所有的目录和文件信息,如:某个目录下有哪些子目录和文件,以及文件名、文件副本数、文件由哪些Block组成等
- NameNode内存中有一份最新的元数据(元数据信息持久化≈fsimage+edits,block块位置信息由DataNode上报)
- Secondary NameNode帮助NN定期合并fsimage与edits文件
为什么有了fsimage内存快照、还需要有edits文件呢?因为如果每次对于文件系统有操作,元数据信息就有可能发生变化,那么每次变化都去更新一下fsimage文件,显然成本非常之高而且性能也不好,所以fsimage并不会实时去发生变化,那么后边这些操作则通过edits文件做一个记录。
这边是HDFS元数据合并的机制,在运行过程中HDFS会定期触发整个合并流程,从而会保证fsimage文件越来越大、但edits文件会在比较的一个范围内,这样一个效果。
DataNode
- Slave工作节点(可大规模扩展)
- 存储Block和数据校验和
- 执行客户端发送的读写操作
- 通过心跳机制定期向NameNode汇报运行状态和Block列表信息
- 集群启动时,DataNode向NameNode提供Block列表信息
Client
- 将文件切分为Block
- 与NameNode交互,获取文件元数据
- 与DataNode交互,读取或写入数据
- 管理HDFS
Block文件
Block文件是DataNode本地磁盘中名为“blk_blockId"的Linux文件
- DataNode在启动时自动创建存储目录,无需格式化
- DataNode的current目录下的文件名都以"blk_"为前缀
- Block元数据文件(*.mate)由一个包含版本、类型信息的头文件和一系列校验值组成
Block副本放置策略
负载均衡
第一个副本存放距离Client最近的或者最空闲的,然后负载均衡