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 Guide、Data Algorithms 一书以获得更好的理解。
【讨论】:
以上是关于Map Reduce 中的键值的主要内容,如果未能解决你的问题,请参考以下文章
如何将java类对象作为mapreduce中map函数的输入?