文件复制到DataNodes时,Hadoop HDFS中的数据流管道

时间:2017-01-28 05:33:19

标签: hadoop hdfs dataflow

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

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

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

2 个答案:

答案 0 :(得分:5)

你的问题有答案。

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

Data Flow Pipeline https://i.stack.imgur.com/REO6r.jpg

  

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

     

这里的优点是数据节点2和3不需要等到128 MB数据在开始复制之前被复制到数据节点1。因此,延迟是因为复制将只有一个或两个chucks复制时间,因为所有块都并行复制到节点

答案 1 :(得分:1)

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

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

如果您要研究Hadoop流数据需要连续流式传输,这就是为什么4 kB数据在各种数据节点之间传输以保持传输短而快的原因,这也是为什么火花流是首选的主要原因之一Hadoop流式传输,因为Hadoop不传输连续数据,它传输非常小的数据块似乎是连续的。

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

希望这可以解决您的问题。