Hadoop将命令写入文件需要多长时间

时间:2014-05-06 06:08:40

标签: hadoop hdfs

使用默认的Hadoop设置,假设编写块需要4分钟,将64Mb文件写入HDFS需要多长时间。

根据我的64Mb作为默认块大小,客户端必须编写一个块,该块需要4 * 3 [复制因子] = 12分钟。

原因
HDFS使用流水线来实现其复制写入。当客户端从NameNode接收DataNode列表时,客户端将块数据流式传输到第一个 DataNode(4分钟),它反过来将数据镜像到下一个DataNode(4分钟),依此类推,直到数据到达所有DataNode(再次4分钟)。来自DataNodes的致谢也以相反的顺序进行流水线操作 4 + 4 + 4 = 12 分钟

有人可以确认我的理解是否正确吗?

3 个答案:

答案 0 :(得分:0)

您的理解是沿着正确的道路前进,但并非完全正确。在下面的“权威指南”中找到摘录

  

在写入块时,多个数据节点失败是可能的,但不太可能。   只要写入dfs.replication.min副本(默认为1),就写入   将成功,并且该块将在整个群集中异步复制,直到   达到目标复制因子(dfs.replication,默认为3)。

这表明-put命令所用的时间取决于hdfs-default.xml

中的dfs.replication.min配置

默认情况下,这是1.因此,根据您的示例,大约需要4分钟才能完成。

As -put将仅从一个数据节点等待ack。

答案 1 :(得分:0)

我同意Sudarshan的评论,只是为了添加时间方面 - <
说你将dfs.replication.min设置为2而dfs.replication 设置为3,然后put使用简单time命令进行操作可以让您花费2次重复的时间。例如time hadoop fs -put filename destDir
现在,您可以阅读文件。

但是你的文件仍然会被复制,namenode会尝试将它重新复制到第三个datanode。由于此操作是异步的,因此您永远不知道可能需要多长时间。但是无论何时完成,namenode都会将其注册为普通块,您可以通过fsck

查看

答案 2 :(得分:0)

我不同意@Sudarshan和@Chandra kant关于hadoop put命令。我尝试将一个6G文件放到HDFS上使用hadoop fs -put filename destDir。在竞争时,我使用df查看硬盘使用情况,Used不再增长。我认为-put将等待来自3次复制的ack竞争。

验证我的。 我尝试把文件放到HDFS使用3次复制三次,需要43s \ 35s \ 40s。 然后,我将dfs.replication编辑为1,需要7s \ 5s \ 6s。 我使用相同的文件。