具有多种键类型的 Hadoop MapReduce 映射器和化简器

Posted

技术标签:

【中文标题】具有多种键类型的 Hadoop MapReduce 映射器和化简器【英文标题】:Hadoop MapReduce mapper and reducer with multiple key types 【发布时间】:2017-04-19 17:33:21 【问题描述】:

我正在使用 MapReduce 为 Web 搜索构建倒排索引。我知道如何将 MapReduce 与一种键类型一起使用,你在这里设置它:

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

但是,如果我的密钥可以是不同的类型怎么办,这是否受支持?例如,一个键可能只是 Text,另一个可能是 PairOfWritables。我想为从映射器到减速器的输出以及从减速器到最终输出的输出设置不同的键类型。我已经看到有一个名为 MultipleOutputs 的类,它允许指定不同的键和类,但我不确定这是否是使用它的正确情况。从互联网上,似乎 MultipleOutputs 仅用于 reducer 方法,而不是映射器。

【问题讨论】:

我不是 Hadoop 专家,但在这种情况下,您可能希望对同一数据集进行多次传递,以获得所需的不同密钥。 (此外,您可能会使用 COTS 搜索引擎而不是自己构建搜索引擎。您看过 Lucene 吗?) @markspace 多次运行所有数据不是效率低下吗?另外,我这样做是为了实验。 不过,基本上都是 O(n),如果输入数据是不可变的,您可以并行运行任务。虽然正如我所说,我不是专家,但可能有更好的方法来做到这一点。 【参考方案1】:

这是一个想法。您如何创建一个新类,该类可以获取您希望传递给 reduce 的任何类型的数据。该类将包含一个 toString() 方法,该方法最终将您的数据表示为字符串。使用此字符串,使用 Hadoop 中的 Text 类可以将其用作键

【讨论】:

以上是关于具有多种键类型的 Hadoop MapReduce 映射器和化简器的主要内容,如果未能解决你的问题,请参考以下文章

学习笔记Hadoop(十四)—— MapReduce开发入门—— MapReduce API介绍MapReduce实例

Hadoop基础教程03

hadoop学习笔记:MapReduce数据类型

Hadoop系列Hadoop三大核心之MapReduce-程序编写

Hadoop MapReduce输入输出类型

Hadoop学习之路MapReduce自定义排序