D09 MapReduce程序运行过程原理



MapReduce运作流程

一、MapReduce框架原理:
①mapper开始运行,调用InputFormat组件读取文件逻辑切片(逻辑切片不是block块,切片大小默认和block块大小相同)

   

经过inputformat组件处理后,文件以<k,v>的形式进入我们自定义的mapper逻辑

③mapper逻辑中输出结果会调用OutPutCollector组件写入环形缓冲区。


④当环形缓冲区的存储达到默认阀值后(80%),调用Spliller组件将内容分区part0-1,且排序(快排算法,外部排序算法,并不是按照k值分区)组成各个part的小文件,后溢写到磁盘文件中。


⑤mapper结束后磁盘中的结果小文件会合并(merge)成大文件(分区且排序,归并算法)。分区partition 0-1;反复进行④⑤环节读取归溢出文件,直至该切片文件全部读取完毕。最终输出的结果文件是带有分区的大的结果文件。


⑥reducer启动后会到不同的map结果文件中下载相同区号(partition0,1)的结果文件,按照相同partion来合并文件,归并排序。再按照k值分组,调用默认的GroupingComparator组件。


reducer再按照k值以<k,v>的形式开始读取一组一组的文件,将读入的内容以<k,v>的形式输入到我们用户自定义的reducer处理逻辑中(比如按照k值迭代各组value)

⑧再按照k值以<k,v>的形式,调用OutPutFormat组件输出到hdfs文件系统中去保存。


备注:原理是内部的排序,最终输出文件并不涉及排序。

有两次形成分区,然后以分区合并文件。


二、combiner应用场景:

使用时不能影响业务逻辑


三、Yarn概述

Yarn是一个资源调度平台,负责为程序提供服务器运算资源,相当于一个分布式的操作系统平台,而mapreduce等运算程序则相当于运行于操作系统之上的应用程序。

1、 yarn并不清楚用户提交的程序的运行机制

2、 yarn只提供运算资源的调度(用户程序向yarn申请资源,yarn就负责分配资源)

3、 yarn中的主管角色叫ResourceManager

4、 yarn中具体提供运算资源的角色叫NodeManager

5、 这样一来,yarn其实就与运行的用户程序完全解耦,就意味着yarn上可以运行各种类型的分布式运算程序(mapreduce只是其中的一种),比如mapreducestorm程序,spark程序,tez ……

6、 所以,sparkstorm等运算框架都可以整合在yarn上运行,只要他们各自的框架中有符合yarn规范的资源请求机制即可

7、 Yarn就成为一个通用的资源调度平台,从此,企业中以前存在的各种运算集群都可以整合在一个物理集群上,提高资源利用率,方便数据共享



四、MR的运行模式:在本地运算,结果成功后打包提交到服务器上执行hadoop jar 命令


①本地运行:
使用eclipse来本地运行:所用的库用hadoop_win的库;然而在yarn上运行的库要用linux版的库,因为hadoop文件夹中是linux的库所以在编写程序时用win版的库。以下这三行不配置默认就是local,默认就是file:///;即在本地上运行,数据输入输出都是设置在本地。
A:
conf.set("mapreduce.framework.name", "local");//local即本地运行
conf.set("fs.defaultFS", "hdfs://mini1:9000/");//用的hdfs文件系统

这种情况下,只能是从hdfs上获取文件---->本地进行计算---->运算后文件只能保存在本地
在运行的参数上设置是 args[2]={ hdfs://host:9000/Input d:\a } : 即从hdfs的Input获取文件运算保存在本地磁盘d的a文件夹下。

B:
conf.set("mapreduce.framework.name", "local"); //local即本地运行
conf.set("fs.defaultFS", " file:///")  ; //即用的是 本地的文件系统

在这种情况下,从本地获取文件---->本地进行计算---->运算后结果文件保存在本地
在运行的参数上设置是 args[2]={d:\Input d:\a } : 即从d盘的Input文件夹下获取文件,运算保存在本地磁盘d的a文件夹下。

………………………………………………………………………………………………………………………………………………

②运行集群模式,就是把程序提交到yarn中去运行

A 、将程序打成 JAR 包,然后在集群的任意一个节点上用 hadoop 命令启动
hadoop jar wordcount.jar example.WordCountDriver /inputpath /outputpath

B 、直接在 linux eclipse 中运行 main 方法

//要想运行为集群模式,以下3个参数要指定为集群上的值

/*conf.set("mapreduce.framework.name", "yarn"); 

conf.set("yarn.resourcemanager.hostname", "mini1");
conf.set("fs.defaultFS", "hdfs://mini1:9000/");*/
Job job = Job.getInstance(conf);
(项目中要带参数:mapreduce.framework.name=yarn以及yarn的两个基本配置)

C 、如果要在 windows eclipse 中提交 job 给集群,则要修改 YarnRunner


MapReduce运作流程

一、MapReduce框架原理:
①mapper开始运行,调用InputFormat组件读取文件逻辑切片(逻辑切片不是block块,切片大小默认和block块大小相同)

   

经过inputformat组件处理后,文件以<k,v>的形式进入我们自定义的mapper逻辑

③mapper逻辑中输出结果会调用OutPutCollector组件写入环形缓冲区。


④当环形缓冲区的存储达到默认阀值后(80%),调用Spliller组件将内容分区part0-1,且排序(快排算法,外部排序算法,并不是按照k值分区)组成各个part的小文件,后溢写到磁盘文件中。


⑤mapper结束后磁盘中的结果小文件会合并(merge)成大文件(分区且排序,归并算法)。分区partition 0-1;反复进行④⑤环节读取归溢出文件,直至该切片文件全部读取完毕。最终输出的结果文件是带有分区的大的结果文件。


⑥reducer启动后会到不同的map结果文件中下载相同区号(partition0,1)的结果文件,按照相同partion来合并文件,归并排序。再按照k值分组,调用默认的GroupingComparator组件。


reducer再按照k值以<k,v>的形式开始读取一组一组的文件,将读入的内容以<k,v>的形式输入到我们用户自定义的reducer处理逻辑中(比如按照k值迭代各组value)

⑧再按照k值以<k,v>的形式调用OutPutFormat组件输出到hdfs文件系统中去保存。


备注:原理是内部的排序,最终输出文件并不涉及排序。

有两次形成分区,然后以分区合并文件。


二、combiner应用场景:

使用时不能影响业务逻辑


三、Yarn概述

Yarn是一个资源调度平台,负责为程序提供服务器运算资源,相当于一个分布式的操作系统平台,而mapreduce等运算程序则相当于运行于操作系统之上的应用程序。

1、 yarn并不清楚用户提交的程序的运行机制

2、 yarn只提供运算资源的调度(用户程序向yarn申请资源,yarn就负责分配资源)

3、 yarn中的主管角色叫ResourceManager

4、 yarn中具体提供运算资源的角色叫NodeManager

5、 这样一来,yarn其实就与运行的用户程序完全解耦,就意味着yarn上可以运行各种类型的分布式运算程序(mapreduce只是其中的一种),比如mapreducestorm程序,spark程序,tez ……

6、 所以,sparkstorm等运算框架都可以整合在yarn上运行,只要他们各自的框架中有符合yarn规范的资源请求机制即可

7、 Yarn就成为一个通用的资源调度平台,从此,企业中以前存在的各种运算集群都可以整合在一个物理集群上,提高资源利用率,方便数据共享



四、MR的运行模式:在本地运算,结果成功后打包提交到服务器上执行hadoop jar 命令


①本地运行:
使用eclipse来本地运行:所用的库用hadoop_win的库;然而在yarn上运行的库要用linux版的库,因为hadoop文件夹中是linux的库所以在编写程序时用win版的库。 以下这三行不配置默认就是local, 默认就是file:///;即在本地上运行,数据输入输出都是设置在本地。
A:
conf.set("mapreduce.framework.name", "local"); //local即本地运行
conf.set("fs.defaultFS", "hdfs://mini1:9000/");//用的hdfs文件系统

这种情况下,只能是从hdfs上获取文件---->本地进行计算---->运算后文件只能保存在本地
在运行的参数上设置是 args[2]={ hdfs://host:9000/Input d:\a } : 即从hdfs的Input获取文件运算保存在本地磁盘d的a文件夹下。

B:
conf.set("mapreduce.framework.name", "local");//local即本地运行
conf.set("fs.defaultFS", " file:///")  ; //即用的是 本地的文件系统

在这种情况下,从本地获取文件---->本地进行计算---->运算后结果文件保存在本地
在运行的参数上设置是 args[2]={d:\Input d:\a } : 即从d盘的Input文件夹下获取文件,运算保存在本地磁盘d的a文件夹下。

………………………………………………………………………………………………………………………………………………

运行集群模式,就是把程序提交到yarn中去运行

A 、将程序打成 JAR 包,然后在集群的任意一个节点上用 hadoop 命令启动
hadoop jar wordcount.jar example.WordCountDriver /inputpath /outputpath

B 、直接在 linux eclipse 中运行 main 方法

//要想运行为集群模式,以下3个参数要指定为集群上的值

/*conf.set("mapreduce.framework.name", "yarn"); 

conf.set("yarn.resourcemanager.hostname", "mini1");
conf.set("fs.defaultFS", "hdfs://mini1:9000/");*/
Job job = Job.getInstance(conf);
(项目中要带参数:mapreduce.framework.name=yarn以及yarn的两个基本配置)

C 、如果要在 windows eclipse 中提交 job 给集群,则要修改 YarnRunner


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值