【发布时间】:2013-10-30 22:23:55
【问题描述】:
我的 Hadoop 程序的映射阶段会生成大量唯一键(一个数据集大约 200K 键,另一个数据集大约 900K)。每个键都是一个包含 60 个数字字符的字符串值。我的 Hadoop 程序的排序/改组阶段花费的时间太长。对于如此多的键,有什么方法可以使排序/改组阶段更有效吗?
【问题讨论】:
-
您是否真的在为您的密钥使用
String值?您是否考虑过使用实现Comparable<BinaryComparable>的数字类型? -
是的,我使用 Text 作为映射器的键类型。我可以将其更改为 IntWritable,在这种情况下是否需要实现
Comparable?我相信 IntWritable 会进行字节级别的比较,对吗? -
你不需要实现Comparable,如果你能把key改成更“紧凑”的类型就可以了,考虑
VIntWritable或者VLongWritable,两者都节省内存在整数上分配空间。 -
@Diego Jimeno 根据这个 JavaDoc,键应该是
WritableComparable,它扩展了Comparable。必须对键进行比较才能进行排序。我建议BinaryComparable,因为 Hadoop 文档指出比较二进制值通常比文本值快。 hadoop.apache.org/docs/current/api/org/apache/hadoop/io/…