Hadoop Terasort不稳定的基准测试结果

时间:2013-11-07 11:05:45

标签: hadoop mapreduce benchmarking hdfs cloudera

我有一个Cloudera Hadoop集群,我正在做一些运行Terasort的基准测试,但是我在105到150分钟内得到了非常不稳定的结果。有时候我看到它比平常更复制或者做了很多垃圾收集,但有些时候它们几乎是一样的。

我不知道结果不稳定的原因,非常欢迎任何提示或建议:)

我按如下方式运行基准测试:

我已根据本指南http://wiki.apache.org/hadoop/HowManyMapsAndReduces

选择了地图数量并减少了任务

推测地图和减少执行已关闭。

  • 生成数据集:

10,000,000,000行100字节〜= 953674 M
块大小= 128 MB
地图任务数= 3725(行数*行大小)/(块大小* 2)我做2次因为地图任务时间太短,比如7秒。

sudo -u hdfs hadoop jar /usr/lib/hadoop-0.20-mapreduce/hadoop-examples.jar teragen -Ddfs.replication=3 -Dmapred.map.tasks=3725 10000000000 /terasort-in
  • 跑步terasort:

num-of-worker-nodes = 4
每个节点的核心数= 8 减少任务= 56(1.75 * num-of-worker-nodes *每个节点的核心数量)

sudo -u hdfs hadoop jar /usr/lib/hadoop-0.20-mapreduce/hadoop-examples.jar terasort -Ddfs.replication=1 -Dmapred.reduce.tasks=56 /terasort-in /terasort-out

节点之间的服务和角色分配如下:

6个节点 - 8个核心,16 GB RAM和2个HD - 仅运行HDFS和MapReduce:

  • 第一个节点,只是主角:

    • 的Namenode。
    • Cloudera管理服务。
  • 第二个节点,只是主角:

    • 的JobTracker。
    • SecondaryNamenode。
  • 第3到第6个节点,只是工作者角色:

    • 的TaskTracker。
    • 的Datanode。

我使用第二个节点作为客户端,因为它是负载最低的节点。

如果您需要任何配置属性值或详细信息,请告诉我。

更新:在Chris White的回答之后,我试图减少jobtracker和tasktrackers之间的轮询数量,只需要一个工人和很少的地图并减少,现在基准测试非常稳定了:)

1 个答案:

答案 0 :(得分:3)

在查看效果时,您需要考虑许多因素:

这可能是一个轮询问题,加上您可用的处理插槽数量很少。

任务跟踪器定期轮询正在运行的任务以确定它们是否已完成,并且作业跟踪器还轮询任务跟踪器。使用你的约3700个地图任务(如果我已经正确地阅读了你的问题),如果在轮询时间中有1秒的差异,那么这可以解释你在时间差异中看到的〜小时。

如果你有一个更大的集群有更多的处理槽,我想这个数字会变得更稳定,但没有MR作业会每个都有一个恒定的运行时间,有太多的轮询和其他外部时间(JVM启动时间为例子)可以调整整体运行时间。

数据位置计数器对这两个作业说了什么?如果一个工作的数据锁定任务比另一个工作多得多,那么我预计它也会快速运行。