我可以通过hdfs fsck / -files -blocks
查询有关我的文件(存储在HDFS中)如何存储在块中的信息。
据我所知,namenode并不存储每个文件的块位置信息,而是从datanodes加载该信息。参考-Why datanode sends the block location information to namenode?
所以,如果名称节点正在查询来自数据节点的信息,名称节点应该知道数据节点元数据的位置。这意味着,从技术上讲,可能存在一条路径--
NameNode FSImage -> DataNodes metadata -> Info about how data is stored in blocks
有些文件的名称看起来像bl*.meta
,但我认为它们只包含块的校验和信息,因此在这里可能不相关。参考-What metadata is stored on a datanode in HDFS?
数据节点在哪里存储文件-〉块Map?
由于可能存在多个数据节点,文件数据在它们之间拆分,我如何从NameNode的FSImage/edit日志中获取此信息?
1条答案
按热度按时间sf6xfgos1#
您可以直接从bl*. meta中获取块信息。当Datanode联机时,此信息将发送到NameNode。此信息位于元文件中,但实际上磁盘本身的位置是用于生成元文件when a node starts (implied by hadoop 2.6 manual balancing of disks)的位置。
你可能会发现学习一些github项目是很有帮助的,这些项目是为了平衡datanode磁盘而创建的,因为它是requires knowledge of metadata。
您可能想查看一些github tools availble for analyzing FSImage。这可能会帮助您找到您要查找的信息。