1。yarn概述
Yarn是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而mapreduce等运算程序则相当于运行于操作系统之上的应用程序
2.Yarn的重要概念
1)yarn并不清楚用户提交的程序的运行机制
2)yarn只提供运算资源的调度(用户程序向yarn申请资源,yarn就负责分配资源)
3)
yarn中的主管角色叫ResourceManager
4)
yarn中具体提供运算资源的角色叫NodeManager
5)这样一来,yarn其实就与运行的用户程序完全解耦,就意味着yarn上可以运行各种类型的分布式运算程序(mapreduce只是其中的一种),比如mapreduce、storm程序,spark程序……
6)所以,spark、storm等运算框架都可以整合在yarn上运行,只要他们各自的框架中有符合yarn规范的资源请求机制即可
7)Yarn就成为一个通用的资源调度平台,从此,企业中以前存在的各种运算集群都可以整合在一个物理集群上,提高资源利用率,方便数据共享
3.yarn资源调度全流程(核心
,图片看不清的话,可以下载本地查看
)
工作机制详解
(
0
)
Mr
程序提交到客户端所在的节点(
MapReduce
)
(
1
)
yarnrunner
向
Resourcemanager
申请一个
application
。
(
2
)
rm
将该应用程序的资源路径返回给
yarnrunner
(
3
)该程序将运行所需资源提交到
HDFS
上
(
4
)程序资源提交完毕后,申请运行
mrAppMaster
(
5
)
RM
将用户的请求初始化成一个
task
(
6
)其中一个
NodeManager
领取到
task
任务。
(
7
)该
NodeManager
创建容器
Container
,并产生
MRAppmaster
(
8
)
Container
从
HDFS
上拷贝资源到本地
(
9
)
MRAppmaster
向
RM
申请运行
maptask
容器
(
10
)
RM
将运行
maptask
任务分配给另外两个
NodeManager
,另两个
NodeManager
分别领取任务并创建容器。
(
11
)
MR
向两个接收到任务的
NodeManager
发送程序启动脚本,这两个
NodeManager
分别启动
maptask
,
maptask
对数据分区排序。
(
12
)
MRAppmaster
向
RM
申请
2
个容器,运行
reduce task
。
(
13
)
reduce task
向
maptask
获取相应分区的数据。
(
14
)程序运行完毕后,
MR
会向
RM
注销自己。
二:mr的运行模式
MAPREDUCE程序运行模式
2.2.1 本地运行模式
-
mapreduce程序是被提交给LocalJobRunner在本地以单进程的形式运行(yarn的本地模拟器)
-
而处理的数据及输出结果可以在本地文件系统,也可以在hdfs上
config.set("fs.defaultFS","hdfs://hadoop102:8020") //这是集群,也可以不用配置,因为配置文件里指定了该配置
config.set( mapreduce.framework.name=local
);//本地,本地里可以不用配置,默认配置lib文件里就是local.
- 怎样实现本地运行?写一个程序,不要带集群的配置文件(
本质是你的mr程序的conf中是否有mapreduce.framework.name=local以及yarn.resourcemanager.hostname参数
)
- 本地模式非常便于进行业务逻辑的debug,只要在eclipse中打断点即可
如果在windows下想运行本地模式来测试程序逻辑,需要在windows中配置环境变量:
%HADOOP_HOME% = d:/hadoop-2.6.1
%PATH% = %HADOOP_HOME%\bin
并且要将d:/hadoop-2.6.1的lib和bin目录替换成windows平台编译的版本(要安装hadoop的windows版本)
2.2.2 集群运行模式
- 将mapreduce程序提交给yarn集群resourcemanager,分发到很多的节点上并发执行
- 处理的数据和输出结果应该位于hdfs文件系统
- 提交集群的实现步骤:
A、将程序打成JAR包,然后在集群的任意一个节点上用hadoop命令启动
$ hadoop jar wordcount.jar cn.itcast.bigdata.mrsimple.WordCountDriver inputpath outputpath
B、直接在linux的eclipse中运行main方法
(项目中要带参数:mapreduce.framework.name=yarn以及yarn的两个基本配置,一般集群上yarn-site.xml都已配置了。如果不是本地连接的话,不需要配置)
config.set("fs.defaultFS","hdfs://hadoop102:8020")
config.set(mapreduce.framework.name","yarn")
config.set("yarn.resourcemanager.hostname","hadoop103");
方法二:也可以将core_site.xml等配置文件直接复制到工程下,也行。
C、如果要在windows的eclipse中提交job给集群,则要修改YarnRunner类
总结:所谓的hadoop jar ,yarn jar ,java -jar 本质都是启动jar包中main方法。