1

我对 HDFS 存储和数据节点存储有点困惑。以下是我的疑惑。

  1. Map 函数输出将保存到数据节点本地磁盘,reducer 输出将发送到 HDFS。众所周知,数据块存储在数据节点本地磁盘中,数据节点中还有其他磁盘空间可用于HDFS吗?

  2. reducer 输出文件(part-nnnnn-r-00001)的物理存储位置是什么?它会存储在名称节点硬盘中吗?

所以我的假设是数据节点是 HDFS 的一部分我假设数据节点本地磁盘也是 HDFS 的一部分。

问候苏雷什

4

2 回答 2

4

您必须知道虚拟概念和实际存储之间的区别。HDFS(Hadoop 分布式文件系统)只是指定数据将如何存储在数据节点中。当您说将文件存储在 HDFS 中时,这意味着它实际上将被视为 HDFS 文件,但实际上存储在数据节点的磁盘中。

让我们详细看看它是如何工作的:

  • HDFS作为块结构的文件系统:它将单个文件分成固定大小的块(默认为 64 MB)。这些块存储在由一个名称节点和几个数据节点组成的机器集群中。

  • nameNode处理元数据结构(例如,文件和目录的名称)并规范对文件的访问,它还执行诸如打开/关闭/重命名之类的操作。要打开文件,客户端会联系 NameNode 并检索组成文件的块的位置列表。这些位置标识了保存每个块的DataNode 。然后客户端直接从 DataNode 服务器读取文件数据,可能是并行的。NameNode 不直接参与这种批量数据传输,将其开销保持在最低限度。

  • DataNodes将负责服务读/写请求和块创建/删除/复制。所以HDFS系统中的每一个block实际上都存储在dataNode中。
于 2014-04-22T12:39:45.767 回答
0

回答你的问题,

  1. 首先,我们需要了解映射和归约作业是在 namenode 选择的某些数据节点上执行的。所有节点都是它自己的 HDFS 的一部分。

    因此,当我们说“映射函数输出将保存到数据节点本地磁盘”时,这意味着在执行映射后,该特定数据节点将数据保存在本地磁盘上,对本地文件系统隐藏,例如 unix。它等待reducer读取它并执行reducer阶段。Mapper 的 datanode 保存数据到作业完成。

    现在,reducer(一些由 namenode 选择的数据节点)执行缩减阶段。

  2. 根据我在编写 map reduce 工作时的理解,我们给出了输出路径。在该路径下,它自身为 part-nnnnn-r-00001..1000 并驻留日志。

于 2014-04-22T18:48:37.577 回答