M/R 程序中 map 和 reduce 任务的数量不变

Posted

技术标签:

【中文标题】M/R 程序中 map 和 reduce 任务的数量不变【英文标题】:number of map and reduce task does not change in M/R program 【发布时间】:2013-10-18 21:04:14 【问题描述】:

我有一个问题.. 我有一个从 cassandra 获取输入的 mapreduce 程序。我的输入有点大,大约 100000000 个数据。我的问题是我的程序处理时间太长,但我认为 mapreduce 对于大量数据来说既好又快。所以我想也许我在 map 和 reduce 任务的数量上存在问题。我使用 JobConf、Job 以及 conf/mapred-site.xml 设置了 map 和 reduce 请求的数量,但我没有看到任何变化.. 在我的日志中,首先有地图 0% 减少 0%,经过大约 2 小时的工作,它显示地图 1% 减少 0%..!! 我该怎么办?请帮帮我,我真的很困惑......

【问题讨论】:

给我们一些更多的细节,没有这么多信息很难提供帮助。 我想用 mapreduce 处理大量数据。可能数据是 100000000,例如我想计算这些数据的平均值。但是处理时间太长了。我想知道我是否可以通过mapreduce快速运行这个过程。如果我可以增加地图的数量并减少任务来更快地完成这个过程。在下面的链接中,我读到这可能来自 Eclipse。你对此有什么想法吗? ***.com/questions/17298659/… 还有这个链接***.com/questions/12928101/… 【参考方案1】:

请考虑这些点来检查瓶颈可能在哪里--

    仅仅配置增加 map 或 reduce 任务文件的数量是行不通的。你需要硬件来支持它。正如您所提到的,Hadoop 速度很快,但要处理一个巨大的文件 您需要更多数量的并行映射和减少任务 跑步。为了实现你需要更多的处理器。获得更多 您需要更多机器(节点)的处理器。例如,如果您有 2 台机器,每台机器有 8 个处理器,您可以获得总处理能力 大约 16 个。因此,总共 16 个 map 和 reduce 任务可以并行运行,并且一旦您拥有的 16 个插槽中的插槽未被占用,下一组任务就会出现。 现在,当您再添加一台具有 8 个处理器的机器时,您现在有 24 个。

    您用于 map 和 reduce 的算法。即使,你有 处理能力,这并不意味着您的 Hadoop 应用程序将 除非您的算法执行,否则执行。情况可能是这样 一个地图任务需要很长时间才能完成。

【讨论】:

所以你的意思是这取决于我的硬件是什么?好吧,我只有两个处理器,所以你的意思是我只有 2 个 map 和 reduce? 我在某处读到这是因为日食。它以本地模式运行程序。你知道吗?这是链接:***.com/questions/17298659/… 还有这个链接***.com/questions/12928101/… 关于您的第一条评论,如果您有 2 个处理器(除非它们启用了超线程,您可以同时运行 4 个任务),您可能有 1 个 map 和 1 个 reduce 任务在给定时间运行,除非您使用减速器的一些延迟初始化来实际使用 2 个处理器运行 2 个 map 任务。尝试添加更多机器并创建一个集群以获得差异。随着更多的机器更多的任务,更多的并行性和更快的速度。您正在处理 1 亿条记录,对于只有 2 个处理器的集群来说,这可能太大了,您无法真正看到速度提升。 关于您的第二条评论,在真正的集群环境中,我建议您使用命令行而不是 eclipse,以便您的 mapreduce jar 可以通过 Hadoop 轻松分布在集群节点上,无需您的任何努力。 Eclipse 之类的 IDE 应该只用于开发 MapReduce 作业,以及测试您的 map/reduce 逻辑是否在一小部分数据中工作。

以上是关于M/R 程序中 map 和 reduce 任务的数量不变的主要内容,如果未能解决你的问题,请参考以下文章

Hive中Map任务和Reduce任务数量计算原理

Hive中Map任务和Reduce任务数量计算原理

在运行map reduce任务的过程中,集群的某些机器的datanode和node manager会突然crash掉

hadoop中map和reduce的数量设置问题

hive如何调整map数和reduce数

MapReduce 任务数