2

我有一个 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:

工作节点数量 = 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 个 HD - 仅运行 HDFS 和 MapReduce:

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

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

    • 工作跟踪器。
    • 次要名称节点。
  • 第 3 到第 6 个节点,只是工作角色:

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

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

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

更新:在克里斯怀特的回答之后,我试图通过只有 1 个工人和很少的地图和减少来减少 jobtracker 和 tasktrackers 之间的轮询次数,现在基准非常稳定:)

4

1 回答 1

3

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

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

Task Tracker 定期轮询正在运行的任务以确定它们是否已完成,并且 Job Tracker 还轮询 Task Tracker。对于您的约 3700 个地图任务(如果我正确阅读了您的问题),如果轮询时间有约 1 秒的差异,那么这可能是您在时间差异中看到的约小时的原因。

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

两个工作的数据本地化计数器说什么?如果一项工作的数据锁定任务比另一个工作多得多,那么我希望它也能快速运行。

于 2013-11-07T11:30:54.160 回答