使用默认的hadoop设置,假设写一个块需要4分钟,那么将64mb文件写入hdfs需要多长时间。
根据我的说法,默认块大小为64mb,客户机必须写一个块,这个块需要4*3[replication factor]=12分钟。
原因
hdfs使用流水线来实现它的复制写入。当客户机从namenode接收到datanode列表时,客户机将块数据流到第一个datanode(4分钟),然后第一个datanode将数据镜像到下一个datanode(4分钟),依此类推,直到数据到达所有datanode(4分钟)。来自datanodes的确认也以相反的顺序进行管道传输。
4+4+4=12分钟
有人能证实我的理解是否正确吗?
3条答案
按热度按时间qacovj5a1#
我试着把一个6g文件给hdfs使用
hadoop fs -put filename destDir
。完成后,我使用df
要查看硬盘使用情况Used
不要再长了。我想-put会等待3个复制竞争对手的确认。来验证我的观点。我试着把一个文件放到hdfs使用3复制三次,需要43s\35s\40s。然后,我将dfs.replication编辑为1,需要7s\5s\6s。我使用相同的文件。
rekjcdws2#
你的理解是正确的,但不是完全正确的。下面是权威指南的摘录
有可能,但不太可能,在写入一个块时,多个数据节点发生故障。只要写入dfs.replication.min复制副本(默认为一个),写入就会成功,并且块将在集群中异步复制,直到达到其目标复制因子(dfs.replication,默认为三个)。
这表明-put命令所花费的时间取决于hdfs-default.xml中的dfs.replication.min配置
默认值为1。所以根据你的例子,大概需要4分钟才能完成。
as-put将只等待来自一个数据节点的ack。
pbpqsu0x3#
我同意苏达珊的评论,只是补充一下时间方面的问题-<
说你有
dfs.replication.min
设置为2和dfs.replication
设置为3,然后put
操作简单time
命令为您提供2次复制所需的时间。如
time hadoop fs -put filename destDir
.现在,你可以读你的文件了。
但是,您的文件仍处于复制状态,namenode将尝试将其重新复制到第三个datanode。因为这个操作是异步的,所以您永远不知道它可能需要多少时间。但是每当它完成时,namenode会将它注册为一个普通块,您可以通过
fsck