hdfs 一共有三个部分组成。
client,namenode,datanode 三个部分。读取流程,client先从namenode 获取文件所在的datanode,再直接从datanode 中读取文件。值得注意的是,namenode,是完全基于内存的,所以不安全️。对于namenode基于内存的数据需要持久化。
持久化流程:对于一个全新的namenode会初始化一个空的Fimage,假如8点这个时间点初始化的,从8点开始就会一直记录Editlog, 那么默认3600后或Editlog大于64m就会触发Editlog向Fimage合并,一般会单独开一个节点(SecondaryNameNode:SNN)做这个事情,避免影响到namenode节点的性能。
Block副本放置策略:对于集群布置的datanode,一个文件被分成N个block, 不同的块放置会不一样,比如文件分为B1,B2,B3 ,有DN1,DN2,DN3, 启动DN1,DN2在机架A中,DN3在机架B中,那么B1会落在DN1,B2会落在DN3, B3会落在DN3.
网友评论