0

假设我有一个 50mb 的文件,而我的默认 HDFS 块大小是 64mb。所以在存储了这个 50mb 的文件之后,我们剩下 14mb 的块大小,可以用来存储一些其他的文件。现在,namenode 会跟踪 HDFS 中存在的文件的块信息。所以在这种情况下,将有 2 条记录指向同一个块,一条用于 50mb 文件,一条用于 14mb 文件。

我的问题是名称节点如何跟踪这两条记录并提供有关文件的元数据信息,因为这两个文件将指向同一个块。

4

2 回答 2

1

您对每个块有多个文件的假设是错误的。一个块只能存储一个文件,但一个文件可以存储在多个块上(如果它的大小大于块的大小)。所以Namenode每个块最多只能映射一个文件。

请注意,磁盘空间将仅用于实际文件大小而不是整个块大小,这就是为什么有很多小文件可能会影响 Namenode 的内存。

于 2016-07-12T19:16:08.607 回答
0

首先文件不是根据块大小存储的,而是根据输入拆分存储的。文件在逻辑上被分成更小的部分,称为输入拆分,然后将它们保存在块中。

其次是的,每个块可以有超过 1 个文件,这仅仅意味着可能存在一个块中存在超过 1 个输入拆分的情况。这些拆分有一些称为 EOL(行尾)的东西,它可以帮助应用程序主跟踪它们,进而更新名称节点。

有关更多详细信息,请参阅https://hadoopi.wordpress.com/2013/05/27/understand-recordreader-inputsplit/ 这将消除您的所有疑问。

于 2016-07-12T21:59:41.867 回答