Java Hadoop MapReduce映射器和具有多个键类型的reducer

Java Hadoop MapReduce映射器和具有多个键类型的reducer,java,hadoop,mapreduce,Java,Hadoop,Mapreduce,我正在使用MapReduce为web搜索构建反向索引。我知道如何将MapReduce与一个键类型一起使用,请在此处设置: job.setMapOutputKeyClass(ArrayListWritable.class); job.setOutputKeyClass(ArrayListWritable.class); 但是,如果我的密钥可以是不同的类型,那么支持吗?例如,一个键可能只是文本,另一个键可能是PairoWritables。我想为从映射器到reducer以及从reducer到最终输出

我正在使用MapReduce为web搜索构建反向索引。我知道如何将MapReduce与一个键类型一起使用,请在此处设置:

job.setMapOutputKeyClass(ArrayListWritable.class);
job.setOutputKeyClass(ArrayListWritable.class);

但是,如果我的密钥可以是不同的类型,那么支持吗?例如,一个键可能只是文本,另一个键可能是PairoWritables。我想为从映射器到reducer以及从reducer到最终输出的输出设置不同的键类型。我已经看到有一个名为multipleOutput的类,它允许指定不同的键和类,但我不确定在这种情况下使用它是否正确。从互联网上看,似乎多路输出仅用于reducer方法,而不是mapper方法。

这里有一个想法。创建一个新类,该类可以接受希望传递到reduce上的任何类型的数据。该类将包含一个toString()方法,该方法最终将数据表示为字符串。使用这个字符串,可以使用Hadoop中的Text类将其用作键

我不是Hadoop专家,但似乎在这种情况下,您可能希望对同一数据集进行多次传递,以获得所需的不同键。(而且,在这种情况下,你可能会使用COTS搜索引擎,而不是构建自己的搜索引擎。你看过Lucene吗?@markspace多次浏览所有数据,这不是效率低下吗?另外,我这样做是为了实验,不过基本上都是O(n),如果输入数据是不可变的,那么可以并行运行任务。虽然正如我所说,我不是专家,也许有更好的方法。