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



我有一个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
  • 运行太排序:

辅助角色节点数 = 4
每个节点的核心数 = 8
减少任务数 = 56(1.75 * 工作节点数 * 每个节点的核心数)

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 个高清 - 仅运行 HDFS 和 MapReduce:

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

    • 名称节点。
    • 云时代管理服务。
  • 第二个节点,只是主角色:

    • 工作跟踪器。
    • 辅助名称节点。
  • 第 3 到 6 个节点,仅辅助角色:

    • 任务跟踪器。
    • 数据节点。

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

请告诉我是否需要任何配置属性值或详细信息。

更新:在 Chris White 的回答之后,我试图通过只有 1 个工人和很少的地图和缩减来减少工作跟踪器和任务跟踪器之间的轮询次数,现在基准非常稳定:)

在查看性能时,需要考虑许多因素:

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

任务跟踪器定期轮询

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

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

数据局部性计数器对这两个工作说了什么?如果一个作业的数据锁定任务比另一个作业多得多,那么我希望它也能运行得很快。

最新更新