在分析Hadoop分布式文件系統(tǒng)(HDFS)中Namenode和Datanode的角色和功能時,我們可以逐一分析選項:
A: Namenode里保存了文件block, datanode之間的映射關(guān)系
這是正確的。Namenode負責(zé)管理HDFS的元數(shù)據(jù),包括文件到block的映射,以及block到Datanode的映射。它不存儲實際的數(shù)據(jù)塊,而是維護這些映射關(guān)系,以便在需要時定位和訪問數(shù)據(jù)。
B: 數(shù)據(jù)是存在DataNode上的
這是正確的。Datanode負責(zé)實際存儲HDFS中的數(shù)據(jù)塊(blocks)。每個Datanode可以存儲多個數(shù)據(jù)塊,并且可能會在多個Datanode上存儲同一數(shù)據(jù)塊的副本以提高容錯性和數(shù)據(jù)可用性。
C: DataNode里存儲了元數(shù)據(jù)
這是錯誤的。DataNode不存儲元數(shù)據(jù)。元數(shù)據(jù),包括文件系統(tǒng)的目錄結(jié)構(gòu)、文件到block的映射等,都由Namenode管理。DataNode僅僅負責(zé)存儲和管理實際的數(shù)據(jù)塊。
D: Namenode里有FsImage和EditLog兩個核心的數(shù)據(jù)結(jié)構(gòu)
這是正確的。Namenode使用FsImage來存儲文件系統(tǒng)的快照,并使用EditLog來記錄對文件系統(tǒng)的所有更改。定期地,HDFS會將EditLog中的更改合并到FsImage中,以便減少EditLog的大小并提高系統(tǒng)的啟動速度。
綜上所述,正確的答案是A、B和D。