2012-02-19 101 views
1

我正在研究简单的地图缩减程序。我想在缩减器之后为密钥中的每个不同的单词创建不同的文件。例如,在执行的MapReduce后,我有这样的事情减速器中的多个输出

优先级为1×2

优先级为1 Y 2

优先级为1 Z 2

优先级2×2

优先级2 Y 2

现在在缩小阶段之后,我想要不同的文件,并根据优先级说明Priority1和Priority2具有所有这些值。我正在使用java,并想知道这种输出应该写在reducer中吗?

我只是想知道这是甚至可能或者如果是如何处理或解决这个问题? 我正在使用Hadoop 0.20.203,因此多输出不起作用。

任何指针都会有帮助。 感谢您的帮助! Atul

回答

0

您需要先创建一个partioner类,然后根据您的标准创建该分区。

然后您需要创建您自己的outputformat类和recordwriter类。

recordwriter类,需要根据您的需要写入不同的文件。此外,如果您需要对您的值进行排序,请为您的关键字段创建comparator类。

+0

特别是当您创建输出格式时,您如何处理为每个单词创建新文件?通常情况下,输出文件是在调用OutputFormat.getRecordWriter(context)时创建的,所以如何知道如何命名文件? – Huckle 2012-07-02 22:30:43

0

看看MultipleOutputs

+0

我看着MultipleOutputs,但它在hadoop 0.20.203中不可用。我很抱歉,我忘了在我的问题中提到hadoop的版本。谢谢!! Atul – user722856 2012-02-19 23:12:57

+0

啊,好的。好吧,我也可以问。 :)你看到http://stackoverflow.com/questions/2180101/generating-multiple-output-files-with-hadoop-0-20? – 2012-02-20 02:09:20