《大数据技术原理与应用》第二版-第七章MapReduce
7.1概述
- 分布式编程,传统的程序开发都是以单指令、单数据流的方式顺序执行,但是性能受到单台机器性能的限制,可扩展性差。而分布式并行程序可以很好运行在由大量计算机构成的集群上,很容易实现计算能力的扩充。
- MapReduce框架会为每一个Map任务输入一个数据子集,Map任务生成的结果会继续作为Reduce任务输入,最终Reduce任务输出到分布式文件系统中HDFS。(前提是数据集可分割小数据集能够并行处理)
- MapReduce一个理念是计算向数据靠拢,因为大规模的数据集移动会消耗大量资源,所以移动计算更加经济。
- 都是以<key, value>作为输入,Map中是将小数据集进一步解析为<key, value>对,然后送入Map中,然后会输出一批<key2, value2>
- Reduce是根据中间结果输出<key, list()>,就是将键相同的以某种方式组合起来,形成一个文件。但是还是可以。用户可以指定Reduce的个数。
7.2MapReduce的工作流程
- MapReduce核心思想是“分而治之”,大数据处理包括分布式存储和分布式计算。
- 工作流程是小数据集=>Map处进行计算=>Reduce=>HDFS
- 不同的Map任务之间是不进行通信的,Reduce也是一样的。,所有数据交换都是通过MapReduce框架去自身实现。
- 处理过程中Reduce的数据存储在分布式文件系统中,而Map任务处理得到的中间结果保存在本地存储中(磁盘)
- 只有Map处理结束后,Reduce过程才开始;只有Map需要考虑数据局部性,实现计算向数据靠拢,Reduce无需考虑。
MapReduce执行的各个阶段
- MapReduce框架使用InputFormat模块做数据预处理,然后将输入文件分为逻辑上的多个InputSplit(只是一个逻辑概念,每个InputSplit并没有对文件进行实际切割,只是记录了要处理的数据单位和长度)。
- 因为InputSplit是逻辑切割而非物理切分,所以还需要通过RecordReader(RR)根据InputSplit中的信息来处理,加载转化为适合Map任务读取的键值对,输入给Map。
- Map会根据用户自定义的映射规则,输出一系列的<key, value>作为中间结果。
- 为了让Reduce可以处理Map的结果,还需要对Map的输出做分区、排序、合并、归并,得到<key,value-list>中间结果,交给Reduce,期间这个过程称为Shuffle(洗牌)。
- Reduce根据到这的结果,按照用户定义的逻辑,输出结果到OutputFormat模块。
- 最后OutputFormat模块会验证输出目录是否已存在和结果类型是否符合配置文件中的配置类型,如果满足即输出到分布式文件系统中。
Shuffle过程详解
- 所谓Shuffle是指对Map输出结果进行分区、排序、合并等处理并交给Reduce的过程。
- Shuffle过程分为Map端和Reduce端
- Map端主要有四个步骤:
输入数据和执行Map任务
,输入数据一般保存在分布式文件系统中。接收<k,v>作为输入写入缓存
,每个Map任务都会被分配到一个缓存中,不是立即写入磁盘而是经过一定的积累后,而写入缓存前都会被序列化成字节数组。溢写(分区、排序、合并)
,缓存的容量是有限制的默认是100MB,会设置溢写比一般是0.8,在溢写到磁盘之前会被分区(Partition),后台对他们内存排序(Sort),排序结束后有一个可选的合并(Combine)操作,所谓合并是将值Value相加,经过上述过程后所有键值对被写入磁盘。文件归并
,随着溢写文件越来越多,最终会在Map任务结束前对所有溢写文件进行归并(Merge),生成一个大的溢写文件,所谓归并,是将据有相同键的归并成一个新的键值对,<k1, v1>, <k1, v2>归并成<k1, <v1,v2>>- 经过上述四个步骤后,Map端的Shuffle完成,生成一个大文件放在本地磁盘上面。JobTracker会一直监测Map任务执行,一旦完成后就会通知,Reduce来领取数据。
- Reduce端的Shuffle过程有三个步骤:
领取数据
,会使用多线程同时从多个Map机器领回数据归并数据
,领回数据后会像Map端一样放入所在机器的缓存中,如果写满就放入磁盘中。还没一些前也可以进行合并操作,但是溢写启动后就开始,归并操作,都会在磁盘上多出一个溢写文件,当所有的Map数据都被领回是,多个溢写文件被归并成一个大文件。把数据输入给Reduce任务
,多轮归并后,得到的若干大文件直接输入给Reduce任务,接下来Reduce任务执行Reduce中的各种映射,输出最终结果,并且保存到分布式文件系统中。
7.3MapReduce体系结构
作者:睿晞
身处这个阶段的时候,一定要好好珍惜,这是我们唯一能做的,求学,钻研,为人,处事,交友……无一不是如此。
劝君莫惜金缕衣,劝君惜取少年时。花开堪折直须折,莫待无花空折枝。
曾有一个业界大牛说过这样一段话,送给大家:
“华人在计算机视觉领域的研究水平越来越高,这是非常振奋人心的事。我们中国错过了工业革命,错过了电气革命,信息革命也只是跟随状态。但人工智能的革命,我们跟世界上的领先国家是并肩往前跑的。能身处这个时代浪潮之中,做一番伟大的事业,经常激动的夜不能寐。”
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.