-
hadoop的mapreduce的流程图如下:
(1)用户提交一个任务以后,该任务由JobTracker协调,先执行Map阶段(图中M1,M2和M3),然后执行Reduce阶段(图中R1和R2)。Map阶段和Reduce阶段动作都受TaskTracker监控,并运行在独立于TaskTracker的Java虚拟机中。
(2)输入和输出都是HDFS上的目录(如上图所示)。输入由InputFormat接口描述,它的实现如ASCII文件,JDBC数据库等,分别处理对于的数据源,并提供了数据的一些特征。通过InputFormat实现,可以获取InputSplit接口的实现,这个实现用于对数据进行划分(图中的split1到split5,就是划分以后的结果),同时从InputFormat也可以获取RecordReader接口的实现,并从输入中生成<k,v>对。有了<k,v>,就可以开始做map操作了。
(3)map操作通过context.collect(最终通过OutputCollector. collect)将结果写到context中。当Mapper的输出被收集后,它们会被Partitioner类以指定的方式区分地写出到输出文件里。我们可以为Mapper提供Combiner,在Mapper输出它的<k,v>时,键值对不会被马上写到输出里,他们会被收集在list里(一个key值一个list),当写入一定数量的键值对时,这部分缓冲会被Combiner中进行合并,然后再输出到Partitioner中(图中M1的黄颜色部分对应着Combiner和Partitioner)。
(4) Map的动作做完以后,进入Reduce阶段。这个阶段分3个步骤:copy(复制数据)、排序(sort)和reduce。copy就是reduce节点从执行各个Map任务的服务器那里,拷贝的属于自己的数据;sort将从各个map节点那里copy到的数据进行排序;reduce是对排序的结果进行操作输出。
2. map端操作的关键点
map端的数据结构如下图:
Hadoop的机制是通过一个circle buffer 收集Mapper的输出, 到了io.sort.mb * io.sort.spill.percent或者key-value的数目超限(通过io.sort.record.percent可以计算出记录的最大数目)的时候,就spill到disk,如下图。图中出现了两个数组和一个缓冲区,kvindices保持了记录所属的(Reduce)分区、key在缓冲区开始的位置和value在缓冲区开始的位置;通过kvindices,可以在缓冲区中找到对应的key-value记录。kvoffets用于在缓冲区满的时候对kvindices的partition进行排序,排完序的结果将输出到输出到本地磁盘上,其中索引(每个reduce的数据的index)保存在spill{spill号}.out.index中,数据保存在spill{spill号}.out中。
当Mapper任务结束后,有可能会出现多个spill文件,这些文件会做一个归并排序,形成Mapper的一个输出(spill.out和spill.out.index)。
map小结:map的输出结果包括两部分,一部分是将要传输到每个reduce节点的数据的索引文件(spill.out.index);另一个部分是将要传输到reduce节点的key-value的值。其中,将输出到每个reduce节点的数据已根据key进行了排序。简言之,map的输出结果先根据reduce的节点进行排序,再根据key进行排序。
3. reduce端操作的关键点
下图来自《hadoop the definitive guide》。说明了reduce的三个主要阶段:copy、sort和reduce。
(1)copy阶段:reduce端启动copy的线程,当有map任务完成的时候,即从map服务器节点copy本reduce节点对应的数据;由于reduce节点的数据可能来自多个map节点,既然每个map节点的输出已经根据key排好序了,因此进行merge操作即可实现全局的有序,在copy的同时,同时会针对copy过来的数据进行merge排序操作
(2)sort阶段:虽然copy阶段已经进行了针对copy的数据进行了部分合并,在所有的文件都拷贝完毕后,还需要使用工具类Merger归并所有的文件。经过这一个流程,一个合并了所有所需Map任务输出文件的新文件产生了。
(3)reduce阶段:对sort的结果进行处理输出。
4. 一个关于shuffle的误解
其实shuffle并不是什么复杂的东西,shuffle描述的是从map端处理完数据后,reduce端从map端获取数据进行处理的过程,只需要明白map端和reduce分别都怎么处理的,就明白了mapreduce的原理。因此,shuffle可以理解为一个描述性的词语,想想一个map的结果会输出到不同的reduce节点;而一个ruduce节点的数据是来自多个map,这样一个mxn的形式,用线连起来,是不是像洗牌操作?
相关推荐
【描述】在 Hadoop 环境中,WordCount 的实现主要涉及两个关键阶段:Map 阶段和 Reduce 阶段。Map 阶段将原始输入数据(通常是文本文件)拆分成小块,并对每一块进行独立处理;Reduce 阶段则负责聚合 Map 阶段产生的...
《Hadoop MapReduce Cookbook 源码》是一本专注于实战的书籍,旨在帮助读者通过具体的例子深入理解并掌握Hadoop MapReduce技术。MapReduce是大数据处理领域中的核心组件,尤其在处理大规模分布式数据集时,它的重要...
本文将详细阐述如何搭建Hadoop集群以及进行MapReduce程序的关键点个性化开发。 首先,我们来看任务1——Hadoop集群的部署。这一步至关重要,因为它为整个大数据处理系统提供了基础架构。在虚拟机中安装Ubuntu Kylin...
### Hadoop MapReduce V2 知识点概览 #### 一、Hadoop MapReduce V2 生态系统介绍 **Hadoop MapReduce V2** 是Hadoop生态系统中的一个关键组件,用于处理大规模数据集。相较于V1版本,V2版本在架构上进行了重大...
在大数据处理领域,Hadoop MapReduce 是一种广泛使用的分布式计算框架,它允许高效地处理海量数据。KMeans 是一种常见的无监督机器学习算法,用于聚类分析,将数据集中的对象按照相似性分组成不同的簇。现在我们来...
在大数据处理领域,Hadoop MapReduce 是一种广泛使用的并行计算框架,用于处理和存储海量数据。本主题将深入探讨如何使用Hadoop MapReduce来实现MatrixMultiply,即矩阵相乘,这是一个基础且重要的数学运算,尤其在...
这个"hadopp学习本地win测试mapreduce程序,所要用到的环境软件.rar"压缩包文件包含了实现这一目标所需的关键组件和工具。下面,我们将详细探讨这些知识点。 1. Hadoop:Hadoop是Apache基金会开源的一个分布式计算...
在大数据处理领域,Hadoop MapReduce是一个至关重要的技术框架,尤其在电商网站的商品数据分析中扮演着核心角色。MapReduce的设计理念是将大规模数据处理任务分解为两个主要阶段:Map(映射)和Reduce(化简),以此...
在IT行业中,Hadoop MapReduce是一个关键的分布式计算框架,尤其在大数据处理领域。MapReduce的设计理念是将大型数据集的处理任务分解成两个主要阶段:Map和Reduce,这两个阶段在集群中的多台机器上并行执行,极大地...
### Hadoop MapReduce Cookbook知识点概览 #### 一、Hadoop MapReduce简介 - **定义与功能**:Hadoop MapReduce是一种编程模型,用于处理和生成大数据集,它通过一个并行、分布式算法来实现这一目标。MapReduce将...
Hadoop MapReduce部署知识点 一、集群节点分配 在Hadoop MapReduce部署过程中,集群节点的分配是基础工作。节点分配通常涉及几个关键角色:NameNode(NN)、DataNode(DN)、ZooKeeper(ZK)、ZooKeeper Failover ...
文章中还提到了算法的一些关键组成部分,包括: - 网格密度初始聚类:利用网格密度方法对数据流进行初步的聚类分析。 - 基于密度阈值的噪声点检测与删除:通过定义和应用密度阈值函数来周期性地识别和排除噪声点,...
### Hadoop MapReduce 入门知识点详解 #### 一、MapReduce 概述 ##### 1.1 MapReduce 的起源与发展 - **起源**: MapReduce 是由 Google 提出的一种分布式计算模型,最初是为了应对互联网搜索引擎处理大规模数据集...
尽管如此,根据以上提供的信息,我们可以获得关于Hadoop MapReduce实践的关键知识点,并理解它在处理大规模数据集时的核心作用。通过MapReduce模型,Hadoop能够将复杂的数据处理任务分解为可以在多台机器上并行执行...
在IT行业中,大数据处理是一项关键任务,而Hadoop MapReduce是实现这一目标的重要工具。本文将深入探讨"可运行的Hadoop1 MapReduce Eclipse项目"的相关知识点,包括Hadoop的基本概念、MapReduce的工作原理以及如何在...
MapReduce是大数据处理的一种核心工具,常与Hadoop生态系统一起使用,能高效地处理大规模数据。MySQL作为关系型数据库,用于存储用户信息、电影数据以及用户行为记录。JSP(JavaServer Pages)则用于生成动态网页,...