获取仅包含一个键值的输出文件?

时间:2013-02-19 17:08:35

标签: hadoop hadoop-streaming

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

好的,然后创建一个custom jar implementation的MapReduce解决方案,然后选择MultipleTextOutputFormat作为按说明here使用的OutputFormat。您只需要将文件名(在您的情况下为密钥)作为reducer中的密钥和整个有效负载作为值发出,您的数据将写入名为密钥的文件中。