什么是MapReduce?
分布式程序的编程框架,java-》ssh ssm, 目的:简化开发!
是基于hadoop的数据分析应用的核心框架。
mapreduce的功能:将用户编写的业务逻辑代码和自带默认组建整合成一个完整的分布式运算程序,并发的运行在hadoop集群上。
MapReduce的优缺点
优点
1、易于编程
2、良好的拓展性
3、高容错性
4、适合处理PB级别以上的离线处理
缺点
1、不擅长做实时计算
2、不擅长做流式计算(mr的数据源是静态的)
3、不支持DAG(有向图)计算(spark)
mr的核心编程思想
需求:统计一个文件(200M),查询结果:每个单词出现的次数统计出来(a-i开头的放在一个结果文件,j-z开头的放在另外一个文件中)
maptask
1、读数据
2、按行处理
3、切分
4、HashMap(单词,value+1)
5、处理完成按照首字母范围氛围2个hashmap
reducetask
统计
输出结果文件
自动化调度平台YARN(mr程序的运行平台)
mr程序应该在多台机器上运行启动,而且要先执行maptask,等待每个maptask,等待每个maptask都处理完成后,还要启动很多个reducetask,这个过程要用户手动调用任务不太现实,
需要一个自动化的人物调度平台-》hadoop当中2.x中提供了一个分布式调度平台-YARN
YARN的服务进程:2个
Resource Manager
Node Manager
安装yarn集群
mapreduce的wordCount
mapreduce的编程规范
用户编写mr程序主要包括撒呢部分:Mapper,Reducer,Driver
1、Mapper阶段
1)用户自定义mapper类,继承父类Mapper
2)Mapper的输入数据的kv对形式(kv类型可以自定义)
3)Mapper的map方法的重写(加入业务逻辑)
4)Mapper的数据输入kv对的形式(kv类型可以自定义)
5)map()方法(maptask进程)对每个<k,v>调用一次
2、Reducer阶段
1)用户自定义reducer类,要继承父类的Reducer
2)Reducer的数据输入类型对应的是Mapper阶段的输出数据类型,也是kv对
3)Reducer的reduce方法的重写(加入业务逻辑)
4)ReduceTask进程对每组的k的<k,v>组调用一次reduce方法
3、Driver阶段
mr程序需要一个Driver类进行任务的提交,提交的任务是一个描述了各种重要信息的job对象
1)获取job信息
2)获取jar包
3)获取自定义的mapper和reducer类
4)设置map输出的数据类型
5)设置reduce输出的数据类型
6)设置输入存在的路径与处理后的结果路径
7)提交任务