Hadoop学习教程(MapReduce)(四)
MapReduce
1、MapReduce概述
1.1、MapReduce定义
MapReduce是⼀个分布式运算程序的编程框架,是⽤户开发基于Hadoop的数据分析应⽤的核⼼框架。
MapReduce核⼼功能是将⽤户编写业务的逻辑代码和⾃带默认组件整合成⼀个完整的分布式运算程序,并发运⾏在⼀个Hadoop集上。
1.2、MapReduce优缺点
1.2.1、MapReduce优点
1)MapReduce易于编程
它简单的实现⼀些接⼝就可以完成⼀个分布式程序,这个分布式程序可以分布到⼤量廉价的PC机器上运⾏。写⼀个分布式程序和写⼀个简单的串⾏程序⼀摸⼀样的。因为这个特点使MapReduce编程⾮常的流
⾏。
2)良好的扩展性
当你的计算机资源不能得到满⾜时,你可以使⽤最为简单的增加机器的⽅式扩展他的计算能⼒。
3)⾼容错性
MapReduce设计的初衷是使程序能够部署在廉价的PC机器上,这就要求它具有很⾼的容错性。⽐如其中⼀台机器挂了,可以把上⾯的计算任务转移到另⼀个节点上运⾏,不会导致任务运⾏失败,⽽这个过程不需要⼈⼯参与,完全是由Hadoop内部完成的。
4)适合PB级以上的海量数据的离线处理
可以实现上千万台服务器集并发⼯作,提供数据处理能⼒。
1.2.2、MapReduce缺点
1)不擅长实时计算
MapReduce⽆法像Mysql⼀样在毫秒或者秒级内返回结果。
2)不擅长流式计算
流式计算的输⼊数据是动态的,⽽MapReduce的输⼊数据集是静态的,不能动态变化。这是⼀位内MapReduce⾃⾝的设计特点决定了数据源必须是静态的。
3)不擅长DAG(有向⽆环图)计算
多个应⽤程序存在依赖关系,后⼀个应⽤程序的输⼊为前⼀个的输出。在这种情况下,MapReduce并不是不能做,⽽是使⽤后,每个MapReduce作业的输出结果都会写⼊到磁盘,造成⼤量的磁盘IO,导致性能⼗分低下。
1.3、MapReduce的核⼼思想
(1)分布式的运算程序往往需要分成⾄少两个阶段。
(2)第⼀个阶段的MapTask并发实例完全并⾏运⾏,互不相⼲。
(3)第⼆个阶段的ReduceTask并发实例互不相⼲,但他们的数据依赖于上⼀个阶段的MapTask并发实例的输出。
(4)MapReduce编程模型只能包含⼀个Map阶段和⼀个Reduce阶段,如果⽤户的业务逻辑⾮常复杂,那只能多个MapReduce程序,穿⾏运⾏。
1.4、MapReduce进程
⼀个完整的MapReduce程序在分布式运⾏时有三类实例进程:
(1)MrAppMaster:负责整个程序过程调度及状态协调。
(2)MapTask:负责Map阶段的整个数据处理流程。
(3)ReduceTask:负责Reduce阶段的整个数据处理流程。
1.5、官⽅WordCount源码
采⽤反编译⼯具反编译源码,发现WordCount案例有Map类,Reduce类和驱动类。且数据的类型是Hadoop⾃⾝封装的序列化类型。
1.6、常⽤数据序列化类型
Java类型Hadoop Writable类型
Boolean BooleanWritable
Byte ByteWritable
Int IntWritable
Float FloatWritable
Long LongWritable
Double DoubleWritable
String Text
Map MapWritable
Array ArrayWritable
Null nullWritable
1.7、MapReduce编程规范
⽤户编写的程序分为三个部分:Mapper、Reducer、Driver。
1.Mapper阶段
(1)⽤户⾃⼰定义的Mapper要继承⾃⼰的⽗类
(2)Mapper的输⼊数据是KV对的形式(KV的类型可以⾃定义)
(3)Mapper中的业务逻辑写在map()⽅法中
(4)Mapper的输出数据是KV对的形式(KV的类型可以⾃定义)
(5)map()⽅法(MapTask进程)对每⼀个<K,V>调⽤⼀次
2.Reducer阶段
(1)⽤户⾃定义的Reduce要继承⾃⼰的⽗类
maven打包本地jar包(2)Reducer的输⼊数据类型对应Mapper的输出数据类型。也是KV
(3)Reducer的业务逻辑卸载reduce()⽅法中
(4)ReduceTask进程对每⼀组相同K的<K,V>调⽤⼀次reduce()⽅法
3.Driver阶段
相当于YARn集的客户端,⽤户提交我们整个程序到YARN集,提交的是封装了MapReduce程序相关运⾏参数的job对象
1.8、WordCount案例操作
1.8.1、本地测试
1)需求
在⽂本⽂件中统计输出每⼀个单词出现的总次数(1)输⼊数据
⾃定义数据,本⽂采⽤(分隔符为空格)atguigu atguigu
ss ss
cls cls
jiao
banzhang
xue
hadoop
(2)期望输出数据
shenbaoyun 2
banzhang 1
cls 2
hadoop 1
jiao 1
ss 2
xue 1
2)需求分析(操作步骤)
1、输⼊数据
Mapper
2、将MapTask传⼊的⽂本内容转为String类型
3、根据分隔符将这⼀⾏切分成多个单词
4、将单词输出为KV<;单词,1>
Reduce
1、汇总各个Key的个数
2、输出该Key的总次数
Driver
1、获取配置信息,获取job对象实例
2、制定本程序的jar包所在的本地路径
3、关联Mapper、Reducer业务类
4、指定Mapper输出数据的kv类型
5、指定最终输出的数据的kv类型
6、指定job的输⼊原始⽂件所在⽬录
7、指定job的输出结果所在⽬录
8、提交作业
3)业务实操(环境准备)
(1)创建maven⼯程,MapReduceDemo (2)在l⽂件中添加如下依赖
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论