【问题标题】:hadoop:when the file is less than 64M,does increasing the node number have an effect on the processing speed?hadoop:当文件小于64M时,增加节点数对处理速度有影响吗?
【发布时间】:2018-03-19 10:21:03
【问题描述】:

我知道默认块大小是64M,分割是64M, 那么对于小于 64M 的文件,当节点数从 1 增加到 6 时,将只有一个节点进行拆分,所以速度不会提高吗?是对的吗? 如果是128M的文件,分2个节点会有2个节点,速度比1个节点快,3个节点以上,速度不会提升,是吗?

我不知道我的理解是否正确。感谢您的任何评论!

【问题讨论】:

    标签: hadoop mapreduce


    【解决方案1】:

    这里是您查询的答案

    我知道默认的块大小是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.executionmapred.reduce.tasks.speculative.execution JobConf 选项为假, 分别使用旧 API,而使用较新的 API,您可以考虑更改 mapreduce.map.speculativemapreduce.reduce.speculative

    【讨论】:

      【解决方案2】:

      您假设一个大文件一开始是可拆分的,但情况并非总是如此。

      如果您的文件永远小于块大小,添加更多节点永远不会增加处理时间,它只会有助于复制和集群总容量。

      否则,您的理解似乎是正确的,但我认为最新的默认值实际上是 128 MB,而不是 64

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-21
        • 2022-12-31
        • 2021-08-16
        • 2021-08-24
        • 1970-01-01
        相关资源
        最近更新 更多