用一个10行代码的案例,一个没有map和reduce的类分解Mapreduce过程。
操作过程:
1>:创建MapReduce项目,并配置Run Configuration选项中的Argument输入输出路径.如图
2>:再看代码
public class MyWordCount{
/**
* @param args
* @throws IOException
* @throws ClassNotFoundException
* @throws InterruptedException
*/
public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException {
//根据安装的Hadoop夹下conf文件创建对象
Configuration conf = new Configuration();
//根据Run Configuration设置下的arguments 下的选项得到输入输出路径
String [] otherArgs=new GenericOptionsParser(conf, args).getRemainingArgs();
if(otherArgs.length!=2){
System.err.println("Usage:wordcount <in> <out>");
System.exit(2);
}
//定义一个job
Job job=new Job(conf, "My WordCount");
//制定输入输出路径
FileInputFormat.addInputPath(job,new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
//等待job执行完毕退出
System.exit(job.waitForCompletion(true)?0:1);
}
}
3>执行结果
文件源如图:
执行结果如图:
结果分析:
1>事实
源文件有两个,用户没有自己定义任何Map和Reduce的情况下,执行后依旧可以得到MapReduce结果,当然前提是使用了插件创建的是MapReduce项目.并非是一个单纯的Java 项目.
2>过程解析
第一步:首先使文件会被分为特定大小的split,叫做分区每一个split会对应启动一个task.分别执行的是MapTask和ReduceTask.
第二步:每一个split首先会被hadoop框架分解成一个个的<key,Value>对,具体是<偏移量,文本行>(偏移量指的是每个文本行的首字母对文件的初始位置的偏移,文本行是以/r/n来判断的). 如此形式:
<0,zhong nan da xue>
<14,hu nan da xue>
<27,shi fan da xue>
第三步:交由用户自定义的Map处理.以系统的wordcount为例,执行程序中的命令得到的结果是: <zhong,1>,<nan,1><da,1>,<xue,1>,<hu,1>,<nan,1>.....
第四步:sort过程.即排序.
<zhong,list(1)>
<nan,list(1,1)>
<da,list(1,1,1)>....
显然是将文件中有相同的key的进行排序,以这种格式发送给Reduce,有助于解决带宽问题.
第五步:shuffle过程,翻译为洗牌过程.顾名思义,洗牌是将牌打乱再分配的过程.对应的是reduce任务取得map任务输出的文件.这个过程是hadoop框架自动实现的,默认是按照hash函数执行的(此处不做深入分析).此过程后就将文件传给了reduce了.
第六步:执行reduce.还是以wordcount为例.j将list中的数字相加得到:
<zhong,1>
<nan,2>
<da,3>....
分析本案例:
本案例中没有定义任何map和reduce,得到了上述的结果是因为没有执行用户自定义的map和reduce,所以是以第二步之后的结果形式展现的,这是默认的形式.
以上只是很概括的展现了map和reduce的过程,还有很多细节值得深入,未完待续.....
- 大小: 39.9 KB
- 大小: 73 KB
- 大小: 86.4 KB
分享到:
相关推荐
在分布式计算领域,MapReduce是一种广泛使用的编程模型,尤其在处理大数据时...这就是使用MapReduce求解Top 3问题的基本思路和实现步骤。通过这个过程,我们可以看到MapReduce如何在分布式环境下高效地处理大规模数据。
- Shuffling和Sorting:在Map和Reduce之间,数据按键排序并分组,确保相同键的数据被同一个Reduce任务处理。 5. **容错机制**: MapReduce框架提供了自动数据备份和错误恢复机制,保证了系统的高可用性和数据的...
5. **神经网络**:在分布式环境中,MapReduce 可以用于训练大型神经网络,如 Map阶段进行前向传播,Reduce阶段执行反向传播和权重更新。 6. **特征选择**:Map阶段计算每个特征的相关性或重要性,Reduce阶段选择最...
否则,重复Map和Reduce过程,直至找到最短路径。 此外,文章还提供了MapReduce算法的伪代码,清晰展示了Map和Reduce阶段的处理逻辑。Map阶段主要负责处理节点,当节点颜色为1时,生成新的中间结果;Reduce阶段则...
MapReduce是一种基于函数式编程思想的分布式计算模型,通过将数据处理任务分解为“映射(Map)”和“规约(Reduce)”两个阶段来实现。映射阶段负责将原始数据分割成一系列键值对,规约阶段则对映射结果进行汇总和...
MapReduce是由Google提出的一种分布式计算模型,它将复杂的、大规模的数据处理问题分解为两个阶段:Map阶段和Reduce阶段。这种模型非常适合用于处理海量数据集,并且可以在大规模集群上高效地运行。在本论文中,作者...
MapReduce是一个流行的分布式计算框架,它通过Map(映射)和Reduce(归约)两个阶段,实现对大规模数据集的分布式处理。Map阶段负责处理输入数据,将其转换为一系列中间键值对;Reduce阶段则将具有相同中间键的所有...
CSSMA算法通过设计Map和Reduce函数,实现对云服务选择问题的分布式并行计算,加快了处理速度,提高了算法的可扩展性和效率。 仿真实验结果表明,CSSMA算法在处理大规模问题时具有良好的能力,并且适用于制造云服务...
MapReduce的核心机制——映射(Map)和归约(Reduce)操作,本质上就是对数据进行转换和聚合的功能性操作。 ##### 2.2 映射器与归约器 - **映射器**:将输入数据转换为键值对的形式。每个映射任务通常会处理一个...
MapReduce的核心概念包括**Map**(映射)和**Reduce**(归约)两个阶段。 - **Map阶段**:在这个阶段,原始数据集被划分为多个部分,由不同的map任务并行处理。每个map任务读取一部分输入数据,并将其转换为一系列...
MapReduce计算任务执行过程大致可以分为四个阶段:计算任务提交阶段、Map子任务执行阶段、Reduce子任务执行阶段以及执行结果返回阶段。在这些阶段中,资源配置的优化能够显著提高大数据平台的资源利用率和业务承载...
这涉及到如何优化MapReduce的Map和Reduce任务分配,以及如何通过Shuffle阶段确保数据的正确排序和分发。此外,由于NP问题的复杂性,还需要探索高效的数据分区策略和近似算法,以在有限计算资源下找到接近最优解的...
其工作原理分为两个主要阶段:Map阶段和Reduce阶段。Map阶段将输入数据切分成多个键值对,由多个Mapper并行处理;Reduce阶段则将Mapper的输出进行聚合,生成最终结果。在Hadoop中编写MapReduce程序,通常需要继承`...
- MapReduce是一种用于处理大规模数据集的软件框架,由Map函数和Reduce函数两部分组成。 - **Map函数**:接受一组数据,将其转换为键值对列表。 - **Reduce函数**:接受Map函数生成的键值对列表,进一步处理后...
文中提到的“MapReduce作业”是大数据处理中常见的编程模型,它将任务分为Map(映射)和Reduce(归约)两个阶段,其中Map阶段处理输入数据,生成中间键值对,Reduce阶段则对这些键值对进行合并以生成最终结果。...
1. **MapReduce执行过程**:MapReduce是一种分布式计算模型,由Google提出。在执行过程中,Map任务并行处理输入数据,生成中间键值对;Reduce任务则根据中间键对这些数据进行聚合处理。选项A是正确的,因为Map任务...
* Hadoop:Hadoop是一个开源的可运行于大规模集群上的分布式并行编程框架,它实现了Map/Reduce 计算模型 * MapReduce:MapReduce是一个软件框架,用于并行处理大规模数据 * HDFS:HDFS是Hadoop分布式文件系统 * ...
- 并行选择:通过MapReduce的Map阶段并行执行选择操作,每个Map任务处理一部分个体。 - 并行交叉与变异:在Reduce阶段,节点之间交换信息,进行并行的交叉和变异操作。 - 全局收敛:通过周期性地全局同步种群信息...