【发布时间】:2014-03-27 21:13:41
【问题描述】:
我有一个有 8 个节点的集群设置,我正在使用 mapreduce 解析一个 20GB 的文本文件。通常,我的目的是通过映射器获取每一行并使用一个键发送,该键是输入文件行上的列之一。 reducer 拿到后,会根据 key 值写入不同的目录。如果我举个例子: 输入文件:
test;1234;A;24;49;100
test2;222;B;29;22;22
test2;0099;C;29;22;22
所以这些行会这样写:
/output/A-r-0001
/output/B-r-0001
/output/C-r-0001
我在 reducer 中使用 MultipleOutputs 对象,如果我使用小文件,一切正常。但是当我使用 20GB 文件时,正在初始化 152 个映射器和 8 个减速器。在 mapper 端,一切都很快完成,但一个 reducer 继续运行。 7 个减速器完成最多 18 分钟,但最后一个需要 3 小时。 首先,我怀疑那个减速器的输入比其他的要大,但事实并非如此。一个减速器的输入是慢速器的三倍,并且在 17 分钟内完成。
我也尝试将 reducer 的数量增加到 14 个,但结果是增加了 2 个更慢的 reduce 任务。
我检查了很多文档,但不知道为什么会发生这种情况。你们能帮我解决吗?
已编辑
问题是由于我的数据集中的一些损坏的数据造成的。我已经对映射器端的输入数据进行了一些严格的检查,现在它工作正常。
谢谢大家。
【问题讨论】:
-
运行这个减速器的机器是弱还是不健康??
-
您能否发布一个运行速度快的减速器与运行 3 小时的减速器的计数器统计数据
-
是的,机器很好,因为它并不总是发生在那个节点上。