我只是Hadoop框架的初学者。我想在这里理解一些概念,我浏览了很多链接,但我希望得到明确的答案 1)为什么Map reduce仅适用于键值对。我还读到我可以创建一个Map reduce作业而不使用reduce 2)映射阶段输入的关键是fileoffset密钥。我可以使用显式键值吗?或自定义输入?
答案 0 :(得分:1)
好,你正在挖掘hadoop概念。
1)我可以使用显式键值吗?或自定义输入?:是的,编写自己的(覆盖)RecordReader
来执行此操作。
2)为什么Map reduce仅适用于Key Value对? MapReduce,顾名思义,程序只是将所需数据映射(过滤)到Reduce(基于唯一键的组合)来自提供给程序的数据集。 现在,为什么键值对?:由于您正在处理非结构化数据,因此您不希望得到与输出相同的数据。我们需要对数据进行一些操作。想想在java中使用Map,它有助于唯一地识别该对,所以在Sorto&洗牌。
创建Map reduce工作而不实际使用reduce?: 当然,完全取决于但仅建议用于小型操作,并且在不需要将映射器输出组合为预期输出的情况下。
原因:这里是分布式概念,商品硬件优先考虑的地方。例如:我有一个大型数据集要处理。在使用java程序(只是java,而不是hadoop)处理数据集时,我们将所需的对象存储在Collection
对象中(就像使用RAM空间一样简单)。引入Hadoop以不同的方式完成相同的工作:在context
中存储所需的数据。映射器中的上下文是指中间数据(Local FS),在reducer中是指输出(HDFS)。当然,两种情况下的Context都存储在HardDisk中。
Hadoop有助于在HardDisk而不是RAM中进行所有计算。
我建议您阅读 Hadoop Defenitive Guide ,数据算法一书,以便更好地理解。