Map Reduce 中的键值

Posted

技术标签:

【中文标题】Map Reduce 中的键值【英文标题】:Key Value in Map Reduce 【发布时间】:2016-03-02 05:02:01 【问题描述】:

我只是 Hadoop 框架的初学者。我想在这里了解几个概念,我浏览了很多链接,但我想得到明确的答案 1)为什么 Map reduce 只适用于键值对。我还读到我可以创建一个 Map reduce 作业而不实际使用 reduce 2) Mapping阶段的输入key是fileoffset key。我可以使用显式键值吗?还是自定义输入?

【问题讨论】:

1) 您需要了解 shuffle 和 sort 阶段的概念,才能知道为什么 key-value 有意义。 2)您可以使用任何您想要的密钥。对于读取几乎任何可拆分的文件,偏移量是完美的,因为它允许映射均匀可分割的块 对于您的中间问题。请阅读***.com/questions/10630447/… 【参考方案1】:

很好,你在挖掘 hadoop 概念。

1) 我可以使用显式键值吗?或自定义输入?:是的,写你自己的(覆盖)RecordReader 这样做。

2) 为什么 Map reduce 仅适用于键值对?: MapReduce,顾名思义,程序只是将所需的数据映射(过滤)到从提供给程序的数据集中减少(基于唯一键的组合)。 现在,为什么是键值对?:由于您正在处理非结构化数据,因此也不希望获得与输出相同的数据。我们将需要对数据进行一些操作。想想在 java 中使用 Map,它有助于唯一地识别这对,在 hadoop 中借助 Sort & Shuffle 也是如此。

在没有实际使用 reduce 的情况下创建 Map reduce 作业?: 当然,这完全取决于但建议仅用于小型操作,并且在您的映射器输出不需要组合以获得预期输出的情况下。

原因:这里是分布式概念,商品硬件被优先考虑的地方。例如:我有一个大数据集要处理。在使用 java 程序(只是 java,而不是 hadoop)处理数据集时,我们将所需的数据存储在 Collection 对象中(就像使用 RAM 空间一样简单)。 Hadoop 被引入以不同的方式完成相同的工作:将所需的数据存储在 context 中。 mapper 中的上下文是指中间数据(Local FS),reducer 中的上下文是指输出(HDFS)。当然,这两种情况下的上下文都存储在硬盘中。

Hadoop 有助于在硬盘而不是 RAM 中进行所有计算。

我建议阅读 Hadoop Defenitive GuideData Algorithms 一书以获得更好的理解。

【讨论】:

以上是关于Map Reduce 中的键值的主要内容,如果未能解决你的问题,请参考以下文章

如何将java类对象作为mapreduce中map函数的输入?

Hadoop整理三(Hadoop分布式计算框架MapReduce)

MapReduce格式与类型

MapReduce实现单词统计

初识MapReduce

Map Reduce和流处理