0

我有一个使用 Hadoop 的用例,我希望我的输出文件可以按键拆分。目前,我让 reducer 简单地输出迭代器中的每个值。例如,这里有一些 python 流代码:

for line in sys.stdin:
    data = line.split("\t")
    print data[1]

此方法适用于小型数据集(大约 4GB)。作业的每个输出文件仅包含一个键的值。

但是,如果我增加数据集的大小(超过 40GB),那么每个文件都包含按排序顺序混合的键。

有没有更简单的方法来解决这个问题?我知道输出将按排序顺序进行,我可以简单地进行顺序扫描并添加到文件中。但似乎这不是必需的,因为 Hadoop 会为您排序和拆分密钥。

问题可能不是最清楚的,所以我会澄清是否有人有任何意见。谢谢

4

1 回答 1

1

好的,然后创建您的 MapReduce 解决方案的自定义 jar 实现MultipleTextOutputFormat,并作为此处解释的 OutputFormat 使用。您只需发出文件名(在您的情况下为键)作为减速器中的键,并将整个有效负载作为值,您的数据将写入名为您的键的文件中。

于 2013-02-20T18:00:37.683 回答