Hadoop:映射器和缩减器的数量

2024-02-20

我使用不同数量的映射器和缩减器(例如 1 个映射器和 1 个缩减器、1 个映射器和 2 个缩减器、1 个映射器和 4 个缩减器,...)在 1.1GB 文件上多次运行 Hadoop MapReduce

Hadoop安装在具有超线程的四核机器上。

以下是按最短执行时间排序的前 5 个结果:

+----------+----------+----------+
|  time    | # of map | # of red |
+----------+----------+----------+
| 7m 50s   |    8     |    2     |
| 8m 13s   |    8     |    4     |
| 8m 16s   |    8     |    8     |
| 8m 28s   |    4     |    8     |
| 8m 37s   |    4     |    4     |
+----------+----------+----------+

Edit

1 - 8 个减速器和 1 - 8 个映射器的结果: 列 = 映射器数量 行 = 减速器数量

+---------+---------+---------+---------+---------+
|         |    1    |    2    |    4    |    8    |
+---------+---------+---------+---------+---------+
|    1    |  16:23  |  13:17  |  11:27  |  10:19  |
+---------+---------+---------+---------+---------+
|    2    |  13:56  |  10:24  |  08:41  |  07:52  |
+---------+---------+---------+---------+---------+
|    4    |  14:12  |  10:21  |  08:37  |  08:13  |  
+---------+---------+---------+---------+---------+
|    8    |  14:09  |  09:46  |  08:28  |  08:16  |
+---------+---------+---------+---------+---------+

(1) 当我有 8 个映射器时,看起来程序运行得稍微快一些,但是为什么当我增加减速器数量时它会变慢? (例如 8mappers/2reducers 比 8mappers/8reducers 快)

(2) 当我只使用 4 个映射器时,速度会慢一些,因为我没有使用其他 4 个核心,对吧?


映射器和减速器的最佳数量与很多因素有关。

主要目标是使用的 CPU 功率、传输的数据量(在映射器中、映射器和减速器之间以及减速器之间)和磁盘“磁头移动”之间的平衡。

如果 MapReduce 作业中的每个任务都可以“以最少的磁盘头移动”读取/写入数据,那么它的工作效果最佳。通常描述为“顺序读/写”。但如果任务受 CPU 限制,则额外的磁盘头移动不会影响作业。

在我看来,在这个具体情况下你有

  • 一个执行大量 CPU 周期的映射器(即,更多映射器使其运行速度更快,因为 CPU 是瓶颈,而磁盘可以跟上提供输入数据的速度)。
  • 一个几乎不执行 CPU 周期并且主要受 IO 限制的减速器。这会导致使用单个减速器时,您仍然受 CPU 限制,但使用 4 个或更多减速器时,您似乎会受到 IO 限制。因此 4 个减速器会导致磁盘头移动“太多”。

处理这种情况的可能方法:

首先,按照您所做的操作:进行一些测试运行,看看在给定此特定作业和您的特定集群的情况下哪种设置效果最佳。

然后你有三个选择:

  • 接受你所面临的情况
  • 将负载从 CPU 转移到磁盘,或者反之亦然。
  • 获得更大的集群:更多的 CPU 和/或更多的磁盘。

转移负载的建议:

  • 如果 CPU 受限且所有 CPU 均已满载,则减少 CPU 负载:

    • 检查代码中是否存在不必要的 CPU 周期。
    • 切换到“CPU 影响较低”的压缩编解码器:即从 GZip 转到 Snappy 或“无压缩”。
    • 调整作业中映射器/减速器的数量。
  • 如果 IO 受限并且您还剩下一些 CPU 容量:

    • 启用压缩:这会使 CPU 工作更加困难,并减少磁盘必须完成的工作。
    • 尝试各种压缩编解码器(我建议坚持使用 Snappy 或 Gzip ...我经常使用 Gzip)。
    • 调整作业中映射器/减速器的数量。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hadoop:映射器和缩减器的数量 的相关文章

随机推荐

  • JMeter 使用什么 Maven 插件? jmeter-maven-plugin 还是 chronos-jmeter-maven-plugin?

    我需要设置由 CI 系统自动触发运行的性能测试 为此 我想使用 JMeter 因为已经存在一些脚本和经验 并且我想将其与 Maven 结合起来 在我对合理插件的研究过程中 我发现存在两个插件 jmeter maven 插件 http wik
  • 无论我输入什么参数,速度函数都不会改变海龟的位置

    我制作的程序有两只海龟 一只是用户 玩家 另一只是玩家 2 它们通过一个名为 checkcollision 的函数运行 该函数确定海龟是否相交 从而将第二只海龟的 x 和 250 250 移动到 250 250 的随机位置y 坐标 然而问题
  • BULK INSERT 失败,行终止符位于最后一行

    我正在将使用 cygwin shell 命令编译的 CSV 导入 MS SQL 2014 使用 BULK INSERT import from D tail csv WITH FIELDTERMINATOR ROWTERMINATOR r
  • 如何使用 QSettings 在 Qt 应用程序中加载设置

    有两种可能的方法 将所有设置加载到某个结构中 按需加载值 哪种方法更好 这取决于您将如何使用您的设置文件 您是否希望允许您的应用程序的用户动态地更改文件中的设置 例如 ini 文件 或者必须通过 GUI 来设置设置 如果您使用某些 GUI
  • d3.js v5 - Promise.all 替换 d3.queue

    我已经使用 d3 js v4 一段时间了 我了解到 Mike Bostock 已将 v5 版本中的 d3 queue 替换为 Promise 原生 JavaScript 对象 我想与您核实一下我编写的这段代码是否正确地 异步 这些 URL
  • Java 中 Date(String s) 的未弃用的完全等效项?

    我有旧代码使用new Date dateString 解析日期字符串 编译代码会产生弃用警告Date java lang String in java util Date has been deprecated javadoc无益地建议我使
  • 带有 lxml 子路径的 XPath 谓词?

    我试图理解发送给我的用于 ACORD XML 表单 保险中的常见格式 的 XPath 他们发给我的 XPath 是 为了简洁而被截断 PersApplicationInfo InsuredOrPrincipal InsuredOrPrinc
  • Hudson -CI 屏幕保护程序设置

    您好 有没有我可以设置一个屏幕保护程序 其中包含在 hudson 中运行的项目列表 该列表指示项目的状态 假设屏幕保护程序的部分表示项目成功 则显示绿色 如果项目构建失败 则显示红色 可能屏幕保护程序必须分区到多个项目 您可以在任何合适的环
  • 将一个时间序列分割为另一个不规则时间序列

    我正在尝试用一个独特的不规则时间序列分割多个 xts 对象 split xts按天 分钟 秒等进行分割 使用断点需要相等长度的向量 当我尝试分割数据时 这会产生错误 dd lt c 2014 02 23 2014 03 12 2014 05
  • 如何正确地将 IsPressed 属性绑定到我的命令参数?

    我制作了一个自定义按钮来将命令绑定到 自定义 路由 IsPressedChanged事件 以便在按下按钮和释放按钮时执行该命令
  • Python - TypeError:“int64”类型的对象不可 JSON 序列化

    我有一个存储商店名称和每日销售额的数据框 我正在尝试使用下面的 Python 脚本将其插入到 Salesforce 但是 我收到以下错误 TypeError Object of type int64 is not JSON serializ
  • Windows 10 上的 VersionNT MSI 属性

    我发现当我更新引导程序的清单以支持 Windows 10 兼容性时 MSI 的 InstallUISequence 将正确设置 VersionNT 1000 但 InstallExecuteSequence 将设置 VersionNT 60
  • 将 UserID 从 ASP.Net 安全地传递到 Javascript

    在我当前正在开发的应用程序中 我们使用 ASP Net 表单身份验证来授予用户对站点的进一步访问权限 该网站面向移动用户 因此我们试图尽可能摆脱服务器的束缚 并利用 KnockoutJS 进行 Web 服务调用并加载数据 以便用户可以查看它
  • Azure 存储将 blob 移动到其他容器

    我正在寻找一种将 Azure 中的 blob 从一个容器移动到另一个容器的方法 我找到的唯一解决方案是使用 Azure 存储数据移动库 但这似乎适用于不同帐户 我想将同一帐户内的 blob 移动到另一个容器 我没用过Azure Storag
  • JUnit。并行运行。但所有测试方法都处理单例实例。怎么解决?

    所以 我有几个JUnit类 每个类都包含一个测试方法列表 每个方法都是相互独立的 没有直接的联系 但我们有间接联系 所有方法都处理一个单例对象 它是Selenium Web Driver实例 是的 我用1Web Driver我所有测试的实例
  • 如何优雅地结束 spring @Schedule 任务?

    我正在尝试让 Spring Boot 服务优雅地结束 它有一个方法 Scheduled注解 该服务使用 spring data 作为数据库 使用 spring cloud stream 作为 RabbitMQ 在计划的方法结束之前 数据库和
  • CSS,如何使水平菜单和子菜单居中?

    我正在学习 css 但我不知道菜单和子菜单居中 我正在使用 margin auto 或 margin left 和 margin right 为 auto 但它不起作用 任何帮助 将不胜感激 谢谢 HTML div ul li a href
  • 如何在JavaScript中不使用输入类型文件读取包含html的文本文件?

    我有一个文本文件assets包含一些要在特定组件的 div 中呈现的 html 的文件夹 有没有一种方法可以读取该文件并将内容分配给字符串变量 而无需用户与 ngOnInit 中的视图 具有输入文件类型 进行交互 我的发现如果我将 html
  • 如何覆盖 CSS

    我有基本的 CSS 经验 所以我想知道如何删除由 Primefaces 设置的 CSS 样式 ui inputfield ui widget content ui inputfield ui widget header ui inputfi
  • Hadoop:映射器和缩减器的数量

    我使用不同数量的映射器和缩减器 例如 1 个映射器和 1 个缩减器 1 个映射器和 2 个缩减器 1 个映射器和 4 个缩减器 在 1 1GB 文件上多次运行 Hadoop MapReduce Hadoop安装在具有超线程的四核机器上 以下