假设我有一个文件 300MB
. 这个 block
大小是 128MB
. 因此,输入文件被划分为以下几个块并放在hdfs中。
Block1: 128MB
Block2: 128MB
Block3: 64MB.
现在每个块的数据 byte offset
其中包含的信息。也就是说,这些块是否具有以下特性 offset
信息?
Block1: 0-128MB of File
Block2 129-256MB of File
Block3: 257MB-64MB of file
如果是这样,我如何在hadoop中获得block2的字节偏移量信息(即从129mb开始)。这仅用于理解目的。有没有hadoop命令行工具来获取这些块的元数据?
编辑
如果字节偏移量信息不存在,则在块上执行其Map作业的Map器将从头开始使用行。如果存在偏移信息,Map器将跳过,直到找到下一个eol,然后开始处理记录。所以我猜字节偏移信息存在于块中。
2条答案
按热度按时间wqnecbli1#
你可以跑了
hdfs fsck /path/to/file -files -blocks
获取块列表。一
Block
不包含偏移信息,仅包含长度。但你可以用LocatedBlocks
为了得到一个文件的所有块,从这里你可以很容易地重建每个块它开始的偏移量。a1o7rhls2#
免责声明:我可能在这一点上是错误的,因为我没有读那么多的hdfs源代码。
基本上,数据节点管理的块对它们来说只是一个大的blob。他们知道块id,但它是。namenode知道一切,特别是文件路径和该文件的所有块id之间的Map以及每个块的存储位置。每个块id可以存储在一个或多个位置,具体取决于其复制设置。
我认为您不会找到public api来从块id获取所需的信息,因为hdfs不需要这样做Map。相反,您可以很容易地知道文件的块及其位置。您可以尝试探索源代码,尤其是blockmanager包。
如果您想了解更多,这篇关于hdfs体系结构的文章可能是一个很好的开始。