我有一个 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 之间的轮询次数,现在基准非常稳定:)