在分析Hadoop分布式文件系统(HDFS)中Namenode和Datanode的角色和功能时,我们可以逐一分析选项:
A: Namenode里保存了文件block, datanode之间的映射关系
这是正确的。Namenode负责管理HDFS的元数据,包括文件到block的映射,以及block到Datanode的映射。它不存储实际的数据块,而是维护这些映射关系,以便在需要时定位和访问数据。
B: 数据是存在DataNode上的
这是正确的。Datanode负责实际存储HDFS中的数据块(blocks)。每个Datanode可以存储多个数据块,并且可能会在多个Datanode上存储同一数据块的副本以提高容错性和数据可用性。
C: DataNode里存储了元数据
这是错误的。DataNode不存储元数据。元数据,包括文件系统的目录结构、文件到block的映射等,都由Namenode管理。DataNode仅仅负责存储和管理实际的数据块。
D: Namenode里有FsImage和EditLog两个核心的数据结构
这是正确的。Namenode使用FsImage来存储文件系统的快照,并使用EditLog来记录对文件系统的所有更改。定期地,HDFS会将EditLog中的更改合并到FsImage中,以便减少EditLog的大小并提高系统的启动速度。
综上所述,正确的答案是A、B和D。