hdfs 一共有三個部分組成。
client,namenode,datanode 三個部分。讀取流程,client先從namenode 獲取文件所在的datanode,再直接從datanode 中讀取文件。值得注意的是,namenode,是完全基于內(nèi)存的,所以不安全?。對于namenode基于內(nèi)存的數(shù)據(jù)需要持久化。
持久化流程:對于一個全新的namenode會初始化一個空的Fimage,假如8點這個時間點初始化的,從8點開始就會一直記錄Editlog, 那么默認(rèn)3600后或Editlog大于64m就會觸發(fā)Editlog向Fimage合并,一般會單獨開一個節(jié)點(SecondaryNameNode:SNN)做這個事情,避免影響到namenode節(jié)點的性能。
Block副本放置策略:對于集群布置的datanode,一個文件被分成N個block, 不同的塊放置會不一樣,比如文件分為B1,B2,B3 ,有DN1,DN2,DN3, 啟動DN1,DN2在機架A中,DN3在機架B中,那么B1會落在DN1,B2會落在DN3, B3會落在DN3.