hadoop:when the 文件小于64m,增加节点数对处理速度有影响吗?

7gyucuyw  于 2021-06-01  发布在  Hadoop
关注(0)|答案(2)|浏览(284)

我知道默认的块大小是64m,拆分是64m,那么对于小于64m的文件,当节点数从1增加到6时,只会有一个节点来做拆分,那么速度会不会提高?是这样吗?如果是一个128m的文件,会有2个节点做2个拆分,速度比1个节点快,如果有3个以上的节点,速度不会提高,是吗?
我不知道我的理解是否正确。谢谢你的评论!

b1zrtrql

b1zrtrql1#

这是你的问题的答案
我知道默认块大小是64m,
在hadoop版本1.0中,默认大小为64mb,在版本2.0中,默认大小为128mb。可以通过为参数设置值来覆盖默认块大小 dfs.block.size 在配置文件中 hdfs-site.xml .
分裂是64米,
不需要,因为块大小与拆分大小不同。为了更清楚,请阅读这篇文章。对于一个普通的 wordcount 在示例程序中,我们可以安全地假设分割大小与块大小大致相同。
那么对于64m以下的文件,当节点数从1增加到6时,只会有一个节点做拆分,那么速度会不会提高?是这样吗?
是的,你是对的。如果文件大小实际上小于块大小,那么它将由一个节点处理,并且将节点从1增加到6可能不会影响执行速度。但是,您必须考虑投机性执行的情况。在推测执行的情况下,即使较小的文件也可以由2个节点同时处理,从而提高执行速度。
从yahoo dev kb link,推测性执行解释如下:
推测性执行:
hadoop系统的一个问题是,通过将任务划分到多个节点上,少数慢速节点可能会限制程序的其余部分。例如,如果一个节点有一个慢磁盘控制器,那么它可能只以所有其他节点10%的速度读取其输入。因此,当99个map任务已经完成时,系统仍在等待最后一个map任务签入,这比所有其他节点都要花费更长的时间。
通过强制任务彼此独立运行,单个任务不知道其输入来自何处。任务信任hadoop平台来提供适当的输入。因此,相同的输入可以并行处理多次,以利用机器能力的差异。由于作业中的大多数任务即将结束,hadoop平台将跨多个没有其他工作要执行的节点调度剩余任务的冗余副本。这个过程称为推测执行。当任务完成时,他们会向jobtracker宣布这一事实。任务的任何一个副本先完成,就成为最终副本。如果其他副本是推测性执行的,hadoop会告诉tasktracker放弃任务并放弃它们的输出。然后,还原器首先从成功完成Map的Map器接收输入。
默认情况下启用推测执行。通过设置 mapred.map.tasks.speculative.execution 以及
mapred.reduce.tasks.speculative.execution JobConf 选项为false,分别使用旧的api,而对于较新的api,您可以考虑更改 mapreduce.map.speculative 以及 mapreduce.reduce.speculative .

dxpyg8gm

dxpyg8gm2#

首先假设一个大文件是可拆分的,但情况并非总是如此。
如果您的文件始终小于块大小,那么添加更多节点将永远不会增加处理时间,这只会有助于复制和集群总容量。
否则,您的理解似乎是正确的,不过,我认为最新的默认值实际上是128MB,而不是64 mb

相关问题