1

我正在 Amazon EC2 m1.small 实例上测试 MapReduce wordcount 示例,我遵循了 Amazon 命令行入门指南。

bin/ec2hadoop 启动集群测试 2

使用这个命令我有 2 个从节点。(总共运行了 3 个实例)然后我可以登录到主节点运行 hadoop 程序(这是一个捆绑到 jar 文件中的程序)花了 35 分钟。

对于可扩展性实验,然后我使用 4 个实例运行相同的程序

bin/ec2hadoop 启动集群测试 4

令我惊讶的是,我没有看到任何性能提升。MapReduce 应用程序花费了几乎相同的时间(33 分钟)

问题出在哪里?这是可以接受的行为吗?

In mapred-site.xml
mapred.tasktracker.map.tasks.maximum is set to 1
mapred.tasktracker.reduce.tasks.maximum is set to 1

欢迎任何建议。

4

2 回答 2

0

首先,如果配置得当,并且随着集群的增长,reducer 的数量也在增加,Hadoop 应该显示出线性可扩展性
,我认为你得到结果的根本原因是单个 reducer。当所有映射器的结果都传递给单个减速器时,它会限制集群大小的任何性能提升。如果您将减速器的数量设置为 4(按集群中的节点数),您应该会看到增益。
另外 - 我对小型实例上的 hadoop 高效操作有些怀疑。内存接近极限,交换可以启动和终止任何性能。此外 - 这样的实例将获得 1GB 以太网的一小部分,它也可能是限制因素。

于 2013-03-02T17:38:52.883 回答
0

根据您的配置,每个节点最多分别有 1 个 map 和 1 个 reduce 任务。根据您正在运行的作业类型,将这些参数设置为节点上的核心数可能会很有用。尤其是当 map/reduce 任务的计算量很大时。

如果正如您在评论中所说,reduce 阶段主导了工作的整体性能,您应该关注这部分。在 Hadoop 中,可以在作业的配置中指定作业的 reduce 任务数量,因为它直接影响生成的输出文件的数量。

拥有一个 reduce 任务将为您提供一个输出文件。拥有 N 个 reduce 任务将导致 N 个输出文件。每个文件都包含按键排序的数据。此外,reduce 任务确保从映射任务中获取给定键的所有数据。

简而言之:增加reduce任务的数量会提高工作的整体性能,但会产生多个输出文件。根据您的需要,这些文件必须在第二个 map reduce 作业(或在 Hadoop 外部)中按键合并和排序,以确保您获得相同的单个输出文件,就像使用单个 reduce 任务一样。

于 2013-03-02T16:06:58.177 回答