【发布时间】:2018-03-19 10:21:03
【问题描述】:
我知道默认块大小是64M,分割是64M, 那么对于小于 64M 的文件,当节点数从 1 增加到 6 时,将只有一个节点进行拆分,所以速度不会提高吗?是对的吗? 如果是128M的文件,分2个节点会有2个节点,速度比1个节点快,3个节点以上,速度不会提升,是吗?
我不知道我的理解是否正确。感谢您的任何评论!
【问题讨论】:
我知道默认块大小是64M,分割是64M, 那么对于小于 64M 的文件,当节点数从 1 增加到 6 时,将只有一个节点进行拆分,所以速度不会提高吗?是对的吗? 如果是128M的文件,分2个节点会有2个节点,速度比1个节点快,3个节点以上,速度不会提升,是吗?
我不知道我的理解是否正确。感谢您的任何评论!
【问题讨论】:
这里是您查询的答案
我知道默认的块大小是64M,
hadoop 1.0 版默认大小为 64MB,2.0 版默认大小为 128MB。可以通过在配置文件hdfs-site.xml 中设置参数dfs.block.size 的值来覆盖默认块大小。
分割为64M,
不需要,因为块大小与分割大小不同。 Read this post 更清楚。对于普通的wordcount 示例程序,我们可以安全地假设分割大小大约与块大小相同。
那么对于小于 64M 的文件,当节点数从 1 增加到 6 时,将只有一个节点进行拆分,所以速度不会提高吗?对吗?
是的,你是对的。如果文件大小实际上小于块大小,那么它会被一个节点处理,将节点从 1 增加到 6 可能不会影响执行速度。但是,您必须考虑推测执行的情况。在推测执行的情况下,即使是较小的文件也可以由 2 个节点同时处理,从而提高执行速度。
来自Yahoo Dev KB link,推测执行解释如下:
推测执行:
Hadoop 系统的一个问题是 在许多节点上划分任务,可能会出现一些缓慢的 节点对程序的其余部分进行速率限制。例如,如果一个节点 有一个慢速磁盘控制器,那么它可能只读取它的输入 所有其他节点速度的 10%。所以当99个地图任务已经 完成,系统还在等待最后的地图任务检查 in,这比所有其他节点花费的时间要长得多。
通过强制任务彼此隔离运行,个人 任务不知道他们的输入来自哪里。任务信任 Hadoop 平台只提供适当的输入。因此,同样 输入可以并行处理多次,以利用 机器能力的差异。由于工作中的大多数任务是 即将结束,Hadoop平台将调度冗余副本 跨几个没有其他任务的节点的剩余任务 工作来执行。这个过程被称为推测执行。什么时候 任务完成后,他们向 JobTracker 宣布这一事实。任何 任务的副本首先完成成为最终副本。如果其他 副本是推测性执行的,Hadoop 告诉 TaskTracker 放弃任务并丢弃它们的输出。然后减速器收到 无论哪个 Mapper 成功完成他们的输入,首先。
默认情况下启用推测执行。您可以禁用 通过设置
mapred.map.tasks.speculative.execution和mapred.reduce.tasks.speculative.executionJobConf选项为假, 分别使用旧 API,而使用较新的 API,您可以考虑更改mapreduce.map.speculative和mapreduce.reduce.speculative。
【讨论】:
您假设一个大文件一开始是可拆分的,但情况并非总是如此。
如果您的文件永远小于块大小,添加更多节点永远不会增加处理时间,它只会有助于复制和集群总容量。
否则,您的理解似乎是正确的,但我认为最新的默认值实际上是 128 MB,而不是 64
【讨论】: