我对fsimage中的元数据有什么疑问。我读到文件系统命名空间的所有突变,例如文件重命名,权限更改,文件创建,块分配都在fsimage中。但块位置数据也是如此? 它是否包含有关块存储在何处(在哪个datanode上)的信息? 我从这个来源获得:http://bradhedlund.com/2011/09/10/understanding-hadoop-clusters-and-the-network/,存储块的元数据是由数据节点的块编辑构建的。 这是真的?那么Fsimage不包含有关块位置的信息吗?
答案 0 :(得分:3)
Namenode维护两种类型的数据
阻止位置数据:由于文件被切成块,NN应该知道哪一块在哪里。 此数据保存在内存中,从不保留在磁盘上,DN会定期与NN通信并共享阻止报告。
文件系统(元数据):例如文件系统层次结构,权限等。此信息持久保存到磁盘
当namenodes启动时,它从 fsimage 加载文件系统的“快照”,并将编辑的编辑日志应用到它上,在此过程之后我们获得一个新的快照。从此点开始,namenode可以接受来自客户端/ DN的文件系统请求
答案 1 :(得分:2)
是的,据我所知,fsimage不包含任何有关块的信息。该信息由数据节点存储。 Namenode从datanode启动时获取此信息。
答案 2 :(得分:1)
Hadoop提供了一个将fsimage文件转换为人类可读格式的工具。 http://hadoop.apache.org/docs/r2.3.0/hadoop-project-dist/hadoop-hdfs/HdfsImageViewer.html
示例输出:
bin/hdfs oiv -i fsimagedemo -p Indented -o fsimage.txt
FSImage
ImageVersion = -19
NamespaceID = 2109123098
GenerationStamp = 1003
INodes [NumInodes = 12]
Inode
INodePath =
Replication = 0
ModificationTime = 2009-03-16 14:16
AccessTime = 1969-12-31 16:00
BlockSize = 0
Blocks [NumBlocks = -1]
NSQuota = 2147483647
DSQuota = -1
Permissions
Username = theuser
GroupName = supergroup
PermString = rwxr-xr-x
...remaining output omitted...