hdfs中的块有字节偏移信息存储在hadoop中吗?

ggazkfy8  于 2021-05-30  发布在  Hadoop
关注(0)|答案(2)|浏览(360)

假设我有一个文件 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,然后开始处理记录。所以我猜字节偏移信息存在于块中。

wqnecbli

wqnecbli1#

你可以跑了 hdfs fsck /path/to/file -files -blocks 获取块列表。
Block 不包含偏移信息,仅包含长度。但你可以用 LocatedBlocks 为了得到一个文件的所有块,从这里你可以很容易地重建每个块它开始的偏移量。

a1o7rhls

a1o7rhls2#

免责声明:我可能在这一点上是错误的,因为我没有读那么多的hdfs源代码。
基本上,数据节点管理的块对它们来说只是一个大的blob。他们知道块id,但它是。namenode知道一切,特别是文件路径和该文件的所有块id之间的Map以及每个块的存储位置。每个块id可以存储在一个或多个位置,具体取决于其复制设置。
我认为您不会找到public api来从块id获取所需的信息,因为hdfs不需要这样做Map。相反,您可以很容易地知道文件的块及其位置。您可以尝试探索源代码,尤其是blockmanager包。
如果您想了解更多,这篇关于hdfs体系结构的文章可能是一个很好的开始。

相关问题