文件复制到 DataNodes 时 Hadoop HDFS 中的数据流管道
Data-flow pipeline in Hadoop HDFS when file copying to DataNodes
我只想详细了解以下声明。当我试图理解 how the HDFS writes happens to Data nodes 时。我得到了以下关于 HDFS 写入的解释。
为什么 hdfs 客户端向数据节点发送 4kb 而不是向数据节点发送整个块 64MB?有的可以详细解释一下吗?
为了获得更好的性能,数据节点维护数据传输管道。数据节点 1 不需要等待一个完整的块到达就可以开始向流中的数据节点 2 传输。事实上,对于给定块,从客户端到数据节点 1 的数据传输发生在 4KB 的较小块中。当数据节点 1 从客户端接收到第一个 4KB 块时,它将这个块存储在其本地存储库中,并立即开始将其传输到流中的数据节点 2。同样,当数据节点 2 从数据节点 1 接收到第一个 4KB 块时,它将这个块存储在其本地存储库中,并立即开始将其传输到数据节点 3。这样,流中的所有数据节点除了最后一个从前一个并将其传输到流程中的下一个数据节点,通过避免每个阶段的等待时间来提高写入性能。
在 Hadoop 中,文件通常很大,因此它们被配置为在收到部分数据后立即传输数据,以便它们可以开始处理它。
举个例子来讨论一下,假设有3个数据节点,要做一个map作业。输入文件所在的数据或块位于节点 1 中,其副本位于节点 2 中(我们假设复制因子为 2)。但是由于某种原因或者可能是其他作业在节点 1 和节点 2 上都是 运行,因此它们很忙,因此现在需要在节点 3 上执行映射作业,该节点没有我们在其上输入的文件想要执行映射作业,因此现在需要将输入文件传输到此节点 3。现在,如果节点管理器在开始映射作业之前将等待大约 64mb 的整个文件传输到节点 3,那么它肯定会有更多的头然后传输4kb。由于 4kb 将被更快地传输,并且一旦节点 3 将收到它。它将开始地图工作。现在这是 Hadoop 的简单场景之一。
如果您要研究 Hadoop 流式数据需要连续流式传输,这就是为什么在各个数据节点之间传输 4 kB 数据以保持传输短而快速的原因,这也是 spark 流式传输的主要原因之一优于 Hadoop 流式处理,因为 Hadoop 不传输连续数据,它传输非常小的看起来像连续的数据块。
如果您想了解节点管理器如何启动任何作业,您可以访问 http://javacrunch.in/Yarn.jsp。
希望这能解决您的问题。
你的问题已经有了答案。
在此图片中,假设文件大小等于块大小 (128 MB)。所以**A, B, C .. are the chunks in block**
https://i.stack.imgur.com/REO6r.jpg
When data node 1 receives the first 4KB(A) chunk from the client, it
stores this chunk in its local repository and immediately starts
transferring it to data node 2 in the flow. Likewise, when data node 2
receives first 4KB chunk from data node 1, it stores this chunk in its
local repository and immediately starts transferring it to data node 3
Here the advantage is Data node 2 and 3 need not to wait till 128 MB data is copied to Data node 1 before starts replication. So, the delay because replication will be just one or 2 chucks copy time as all the chunks copied to nodes in parallel.
我只想详细了解以下声明。当我试图理解 how the HDFS writes happens to Data nodes 时。我得到了以下关于 HDFS 写入的解释。
为什么 hdfs 客户端向数据节点发送 4kb 而不是向数据节点发送整个块 64MB?有的可以详细解释一下吗?
为了获得更好的性能,数据节点维护数据传输管道。数据节点 1 不需要等待一个完整的块到达就可以开始向流中的数据节点 2 传输。事实上,对于给定块,从客户端到数据节点 1 的数据传输发生在 4KB 的较小块中。当数据节点 1 从客户端接收到第一个 4KB 块时,它将这个块存储在其本地存储库中,并立即开始将其传输到流中的数据节点 2。同样,当数据节点 2 从数据节点 1 接收到第一个 4KB 块时,它将这个块存储在其本地存储库中,并立即开始将其传输到数据节点 3。这样,流中的所有数据节点除了最后一个从前一个并将其传输到流程中的下一个数据节点,通过避免每个阶段的等待时间来提高写入性能。
在 Hadoop 中,文件通常很大,因此它们被配置为在收到部分数据后立即传输数据,以便它们可以开始处理它。
举个例子来讨论一下,假设有3个数据节点,要做一个map作业。输入文件所在的数据或块位于节点 1 中,其副本位于节点 2 中(我们假设复制因子为 2)。但是由于某种原因或者可能是其他作业在节点 1 和节点 2 上都是 运行,因此它们很忙,因此现在需要在节点 3 上执行映射作业,该节点没有我们在其上输入的文件想要执行映射作业,因此现在需要将输入文件传输到此节点 3。现在,如果节点管理器在开始映射作业之前将等待大约 64mb 的整个文件传输到节点 3,那么它肯定会有更多的头然后传输4kb。由于 4kb 将被更快地传输,并且一旦节点 3 将收到它。它将开始地图工作。现在这是 Hadoop 的简单场景之一。
如果您要研究 Hadoop 流式数据需要连续流式传输,这就是为什么在各个数据节点之间传输 4 kB 数据以保持传输短而快速的原因,这也是 spark 流式传输的主要原因之一优于 Hadoop 流式处理,因为 Hadoop 不传输连续数据,它传输非常小的看起来像连续的数据块。
如果您想了解节点管理器如何启动任何作业,您可以访问 http://javacrunch.in/Yarn.jsp。
希望这能解决您的问题。
你的问题已经有了答案。
在此图片中,假设文件大小等于块大小 (128 MB)。所以**A, B, C .. are the chunks in block**
When data node 1 receives the first 4KB(A) chunk from the client, it stores this chunk in its local repository and immediately starts transferring it to data node 2 in the flow. Likewise, when data node 2 receives first 4KB chunk from data node 1, it stores this chunk in its local repository and immediately starts transferring it to data node 3
Here the advantage is Data node 2 and 3 need not to wait till 128 MB data is copied to Data node 1 before starts replication. So, the delay because replication will be just one or 2 chucks copy time as all the chunks copied to nodes in parallel.