【发布时间】:2012-08-23 14:26:27
【问题描述】:
我正在使用自定义输出格式,每个键的每个映射器都输出一个新的序列文件,所以你最终会得到这样的结果..
输入
Key1 Value
Key2 Value
Key1 Value
文件
/path/to/output/Key1/part-00000
/path/to/output/Key2/part-00000
我注意到一个巨大的性能损失,通常需要大约 10 分钟来简单地映射输入数据,但是在两个小时之后,映射器甚至还没有完成一半。尽管他们正在输出行。我预计唯一键的数量大约是输入行数的一半,大约 200,000。
有没有人做过这样的事情,或者可以提出任何可能有助于表现的事情?我希望尽可能将这个密钥拆分过程保留在 hadoop 中。
谢谢!
【问题讨论】:
-
我是否正确理解您的文件平均包含 2 行?为什么要将输出拆分为大量小文件?这会扼杀 Hadoop 集群的性能。当您的文件数量与集群支持的 reducer 数量一样多并且这些文件的大小大致相同时,您可以获得最佳性能。
-
我想为我拥有的每种类型的数据都有一个输出文件,例如它可以是访问日志,我希望将每个 IP 地址的访问数据作为一个单独的文件使用作为非 Hadoop 相关内容的输入。
-
如果您要处理 200K 或 400K 行,我相信您在独立计算机上可以获得比在 Hadoop 集群上更好的性能。
-
嗯,这是一个例子,在生产中我们将输出 8-15 百万个不同的文件位置。我刚开始看到甚至 200,000 的性能问题,因此几乎可以肯定它无法应对任何大于此的数字。
标签: performance hadoop mapreduce