版本:
$ hadoop version Hadoop 0.20.2-cdh3u4 Subversion git://ubuntu-slave01/var/lib/jenkins/workspace/CDH3u4-Full-RC/build/cdh3/hadoop20/0.20.2-cdh3u4/source -r 214dd731e3bdb687cb55988d3f47dd9e248c5690 Compiled by jenkins on Mon May 7 13:01:39 PDT 2012 From source with checksum a60c9795e41a3248b212344fb131c12c
问题描述:
Hadoop在执行Reducer时对应的Iterable<VALUEIN> 其对应的值保持问题,代码如下:
protected void reduce(Text key, Iterable<VectorWritable> values, Context context) throws IOException, InterruptedException { Map<String, VectorWritable> map = new HashMap<String, VectorWritable>(); for (VectorWritable vw : values) { NamedVector nv = (NamedVector) vw.get(); Item itemi = Item.toInstance(nv.getName()); map.put(itemi.getItemID(), vw); } }
其对应的Map中的元素都是一样的。
问题原因:
每次迭代对应的值在此次reduce时内存中是一个实例,源码如下:
public class ReduceContext<KEYIN,VALUEIN,KEYOUT,VALUEOUT> extends TaskInputOutputContext<KEYIN,VALUEIN,KEYOUT,VALUEOUT> { private RawKeyValueIterator input; private Counter inputKeyCounter; private Counter inputValueCounter; private RawComparator<KEYIN> comparator; private KEYIN key; // current key private VALUEIN value; // 就是这个实例 ..................... }
每次执行时都是对value进行赋值
@Override public VALUEIN next() { // if this is the first record, we don't need to advance if (firstValue) { firstValue = false; return value; } // if this isn't the first record and the next key is different, they // can't advance it here. if (!nextKeyIsSame) { throw new NoSuchElementException("iterate past last value"); } // otherwise, go to the next key/value pair try { nextKeyValue(); return value; } catch (IOException ie) { throw new RuntimeException("next value iterator failed", ie); } catch (InterruptedException ie) { // this is bad, but we can't modify the exception list of java.util throw new RuntimeException("next value iterator interrupted", ie); } }
因此造成了上述问题
解决方式:
protected void reduce(Text key, Iterable<VectorWritable> values, Context context) throws IOException, InterruptedException { Map<String, VectorWritable> map = new HashMap<String, VectorWritable>(); for (VectorWritable vectorWritable : values) { VectorWritable vw = WritableUtils.clone(vectorWritable, context.getConfiguration()); NamedVector nv = (NamedVector) vw.get(); Item itemi = Item.toInstance(nv.getName()); map.put(itemi.getItemID(), vw); } }
克隆一个即可
相关推荐
3. **配置 Hadoop 环境变量**:在系统中设置 HADOOP_HOME 环境变量,并将 bin 目录添加到 PATH 环境变量中。 4. **配置 core-site.xml 和 hdfs-site.xml**:根据实际需求修改 Hadoop 的配置文件,如设置 HDFS 的地址...
该框架将任务分解为一系列较小的任务(Map 和 Reduce),并在集群中的多台计算机上并行执行这些任务。 - **应用场景**:适用于大数据分析、搜索引擎索引构建、日志文件分析等场景。 #### 二、MapReduce 工作原理 1...
在Hadoop Map-Reduce中,输入数据被划分为小块,每个块被分配给不同的Map任务处理。Map任务将处理后的结果输出,这些输出会被排序后分配给Reduce任务进一步处理。最终,Reduce任务将整合的数据写回到文件系统中,...
对于Hadoop、HBase和Hive的版本对应关系问题,新手朋友们在入门时除了参考这些官方的文档以外,还可以通过查找社区论坛、博客文章等了解他人在升级过程中遇到的问题和解决方案,这将大大降低尝试和错误成本,快速...
在实际操作中,Hadoop MapReduce可用于预处理和清洗大量的原始数据,例如从摄像头捕获的人脸和车辆图像。Map阶段将原始数据分发到各个节点,进行初步处理,如特征提取。Reduce阶段则聚合这些处理结果,进行深度分析...
Reduce任务会按照中间键值对的键进行排序,然后把这些键及其对应的值分组,传递给用户定义的Reducer函数。Reducer函数负责对每个键的所有值进行聚合运算,生成最终的结果。 在Hadoop中,MapReduce的工作流程还涉及...
Hadoop Map Reduce 教程.doc
MapReduce是一种编程模型,用于大规模数据集的并行计算,由Google提出并在Hadoop中得以实现。 【描述】:“运行命令hadoop jar ‘/home/hadoop/downloas/max.jar’ upload.MaxTemperature” 这里执行的命令是启动...
在 Hadoop Map-Reduce 中,数据处理过程主要分为两个阶段:**Map 阶段** 和 **Reduce 阶段**。 ##### Map 阶段 Map 函数接收输入数据块,并将其转换为一系列键值对。这一阶段的主要任务是对输入数据进行预处理,...
例如,`org.apache.hadoop.mapred.MapTask`和`org.apache.hadoop.mapreduce.ReduceTask`分别对应Map和Reduce任务的实现,开发者可以通过阅读这些源码了解任务执行的详细流程。 7. **工具集成**:有许多开源工具可以...
在Hadoop生态系统中,Hadoop 2.7.7是一个重要的版本,它为大数据处理提供了稳定性和性能优化。Hadoop通常被用作Linux环境下的分布式计算框架,但有时开发者或学习者在Windows环境下也需要进行Hadoop相关的开发和测试...
`Mapping` 操作可能是在不同的机器上并行处理的,所以需要通过 `shuffling` 将相同 `key` 值的数据分发到同一个节点上去合并,这样才能统计出最终的结果,此时得到 `K2` 为每一个单词,`List(V2)` 为可迭代集合,`V2...
Map-Reduce 是 Hadoop 框架中的一种核心组件,用于处理大规模数据。Map-Reduce 依靠两大步骤来完成数据处理:Map 和 Reduce。 Map 阶段的主要任务是将输入数据拆分成小块,并将其转换成 key-value 对。Map 阶段的...
本教程将详细讲解如何使用Java编程语言操作Hadoop的MapReduce来计算整数序列中的最大值和最小值,这对于数据分析和处理任务来说是非常基础且实用的技能。 首先,我们需要理解MapReduce的工作原理。MapReduce是一种...
在Map任务完成后,所产生的键值对会被重新组织,并发送到对应的Reduce任务中。这个过程包括排序和合并,确保具有相同键的所有值都被发送到同一个Reduce任务。 **4. Reduce 阶段** Reduce任务接收来自不同Map任务的...
在大数据处理领域,Hadoop和MapReduce是两个至关重要的概念,它们构成了大数据处理的基础框架。本文将深入探讨如何使用Hadoop和MapReduce进行高效的Join查询,并解析如何通过`hadoop_join.jar`这个工具来实现这一...
在IT行业中,Hadoop是一个广泛使用的开源框架,主要用于大数据处理和分布式存储。Hadoop 2.7.5是Hadoop发展中的一个重要版本,它提供了稳定性和性能上的改进。本资源针对的是Windows 7 64位操作系统用户,帮助他们在...
protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException { int sum = 0; for (IntWritable val : values) { sum += val.get(); } result...
在本篇中,我们将深入探讨如何使用Hadoop MapReduce编程模型来计算网页之间的PageRank值。PageRank是Google搜索引擎算法的核心部分,它通过衡量网页之间的链接关系来评估每个网页的重要性。在Hadoop环境下,我们可以...
本文将深入探讨Map JOIN和Reduce JOIN两种在Hadoop中实现JOIN的方法,并通过代码示例来阐述它们的工作原理。 1. Map JOIN: Map JOIN在Hadoop中主要应用于小表与大表的连接。小表的数据可以完全加载到内存中,而大...