【问题标题】:Data-flow pipeline in Hadoop HDFS when file copying to DataNodes将文件复制到 DataNode 时 Hadoop HDFS 中的数据流管道
【发布时间】:2017-01-28 05:33:18
【问题描述】:

我只是想更多地了解以下声明。当我试图理解how the HDFS writes happens to Data nodes。我得到了关于 HDFS 写入的以下解释。

为什么 hdfs 客户端发送 4kb 到数据节点而不是发送整个块 64MB 到数据节点?有人能详细解释一下吗?

为了获得更好的性能,数据节点维护数据传输管道。数据节点 1 不需要等待一个完整的块到达就可以开始传输到流中的数据节点 2。事实上,对于给定块,从客户端到数据节点 1 的数据传输发生在 4KB 的较小块中。当数据节点 1 从客户端接收到第一个 4KB 块时,它将这个块存储在其本地存储库中,并立即开始将其传输到流中的数据节点 2。同样,当数据节点 2 从数据节点 1 接收到第一个 4KB 块时,它将这个块存储在其本地存储库中,并立即开始将其传输到数据节点 3。这样,流中的所有数据节点除了最后一个数据节点都从将前一个数据转移到流程中的下一个数据节点,通过避免每个阶段的等待时间来提高写入性能。

【问题讨论】:

标签: hadoop hdfs dataflow


【解决方案1】:

你的问题有答案。

在这张图片中,我们假设文件大小等于块大小(128 MB)。所以**A, B, C .. are the chunks in block**

https://i.stack.imgur.com/REO6r.jpg

当数据节点 1 从客户端收到第一个 4KB(A) 块时,它 将此块存储在其本地存储库中并立即启动 将其传输到流中的数据节点 2。同样,当数据节点 2 从数据节点 1 接收到第一个 4KB 块,它将这个块存储在它的 本地存储库并立即开始将其传输到数据节点 3

这里的好处是数据节点 2 和 3 不需要等到 128 MB 数据复制到数据节点 1 才开始复制。因此,由于所有块并行复制到节点,因此复制的延迟将只是一到两个卡盘复制时间

【讨论】:

  • 感谢您让我更好地理解。
【解决方案2】:

在 Hadoop 中,文件通常很大,因此它们被配置为在收到部分数据后立即传输数据,以便开始对其进行处理。

让我们用一个例子来讨论它,假设有 3 个数据节点,并且要执行一个映射作业。输入文件所在的数据或块在节点 1 中,它的复制在节点 2 中(我们假设复制因子为 2)。但是由于某种原因,或者可能是其他作业同时在节点 1 和节点 2 上运行,因此它们很忙,因此现在需要在节点 3 上执行映射作业,节点 3 没有我们要在其上执行映射的输入文件作业,因此现在需要将输入文件传输到该节点 3。现在,如果节点管理器将等待可能 64mb 的整个文件传输到节点 3,然后再开始映射作业,那么它肯定会比传输 4kb 有更多的头。因为 4kb 将被更快地传输,并且一旦节点 3 收到它。它将开始地图工作。现在这是 Hadoop 的简单场景之一。

如果您要研究 Hadoop 流数据,则需要连续流式传输,这就是为什么在各个数据节点之间传输 4 kB 数据以保持传输简短而快速的原因,这也是首选 spark 流式传输的主要原因之一Hadoop 流,因为 Hadoop 不传输连续数据,它传输看起来像连续的非常小的数据块。

如果您想了解节点管理器如何启动任何工作,可以访问http://javacrunch.in/Yarn.jsp

希望这能解决您的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-02
    • 1970-01-01
    • 2015-03-28
    • 2012-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多