关于YARN(Hadoop入门三)

一.关于YARN

YARN是(Yet Another Resource Negotaitor)Hadoop的集群资源管理系统。

1.1 YARN的产生背景

  • 因为YARN是从MapReduce1.x(hadoop-0.23)中拆分出来的,叫做MapReduce 2.0 (MRv2)或者YARN。
  • mapreduce1.x的结构是master/slave : 分别对应的是JobTracker和TaskTracker。其中JobTracker是单点的、压力大,扩展难,也仅仅只能够支持mapreduce作业。YARN是具有通用性的,其它分布式计算框架也可以跑在YARN上,如Spark,Tez,Strom等等。
  • 资源利用率与运营成本:YARN把所有的计算框架运行在一个集群中,共享一个集群的资源,按需分配,资源利用率高。

MapReduce1.x的架构
关于YARN(Hadoop入门三)_第1张图片

在YARN上跑的分布式计算框架:
关于YARN(Hadoop入门三)_第2张图片

二.YARN的工作机制

YARN有两个主要有全局的ResourceManager(RM) 和每个应用都有的 ApplicationManager(AM)。同样是master/salve结构,分别对应:ResourceManager(RM)NodeManager(NM)。RM和每个节点的从属节点NM构成数据计算框架。RM是在系统中的所有应用程序之间仲裁资源的最终权威。每个应用程序AM实际上是一个特定于框架的库,它的任务是与RM协商资源,并与NM一起执行和监视任务。

2.1 YARN的架构

关于YARN(Hadoop入门三)_第3张图片

2.1.1 MapReduce1.x和YARN在组成上的比较

MapReduce1.x中,Jobtrack同时负责作业调度(与之等价的是ResourceManager)和任务监控,重启失败或迟缓的任务,记录任务流水(与之等价的是Application Master),记录已完成作业的作业历史(与之等价的是时间轴服务器Timeline Server)。Tasktracker负责任务执行(与之等价的是节点管理器NM)。每个Tasktracker有配置有固定长度的slot,是静态分配的,而YARN中NodeManager管理一个资源池,是按需分配的。

MapReduce1.x YARN
Jobtracker ResourceManager(RM),Application Master(AM),Timeline Server
Tasktracker NodeManager(NM)
Slot Container

2.2 YARN架构中的各个组件及负责的功能

关于YARN(Hadoop入门三)_第4张图片

  • Client: 向RM提交任务、杀死任务等
  • ApplicationMaster:
    每个应用程序对应一个AM
    AM向RM申请资源用于在NM上启动对应的Task
    数据切分
    为每个task向RM申请资源(container)
    与NM通信
    任务的监控
  • NodeManager: 多个
    向RM发送心跳信息、任务的执行情况
    接收来自RM的请求来启动任务
    处理来自AM的命令
  • ResourceManager:集群中同一时刻对外提供服务的只有1个,负责资源相关
    处理来自客户端的请求:提交、杀死
    启动/监控AM
    监控NM
    资源相关
  • Container:任务的运行抽象
    memory,cpu,disk,network…
    task是运行在container里面的
    可以运行AM、也可以运行map/reduce task

2.3 YARN执行流程:

YARN运行的程序主要分为两类:短应用程序长应用程序。短应用是指一定时间内(可能是秒级,分钟级,小时级等)可运行完成并正常退出的应用,比如MapReduce作业,Tez DAG作业等。长应用通常是永不终止的应用程序,常是一些服务,比如Strom Service,HBase Service等。两者一种是数据处理程序,另一种是部署服务程序,尽管作用不同,但在YARN执行的流程是一样的。
关于YARN(Hadoop入门三)_第5张图片
1)客户端联系RM,提交应用程序,其中包括启动ApplicationMaster程序。
2)RM向NM申请资源即第一个Container,并于NM通信,要求在这个Container中启动ApplicationMaster,启动容器运行AM。
3)AM启动后,首先向RM注册,这样就可以让客户端向RM通信并通过AM直接获取任务执行情况。AM运行后具体执行什么依赖于应用本身,有可能是简单的运行计算,也有可能向RM申请更多的资源(对应是第4步)。
4)AM采用轮询的方式通过RPC向RM申请与领取资源。
5)AM向NM申请到资源Container后,与对应的NM通信并要求启动任务。
6)NM为任务设置好运行环境(包括环境变量,JAR包,二进制程序等),将任务启动命令写到脚本中并通过运行该脚本启动程序。
7)各个任务通过RPC协议向AM发送心跳(任务的运行情况和进度),以便在任务失败后重新启动任务。
同时,应用程序运行中,用户也可以通过RPC向AM查询应用程序的当前运行状态。
8)应用程序运行完成后AM向RM提出注销并关闭自己。

三.使用YARN运行程序

3.1 YARN环境配置

1)在hadoop文件中找到配置文件 etc/hadoop/mapred-site.xml配置如下属性:


    
        mapreduce.framework.name
        yarn
    

2)etc/hadoop/yarn-site.xml配置属性:


	
		yarn.nodemanager.local-dirs
		#这里是自己配置的存放临时文件的文件夹,可以在hdfs-site.xml中找到hadoop.tmp.dir属性
		/home/hadoop/app/tmp/nm-local-dir
	
    
        yarn.nodemanager.aux-services
        mapreduce_shuffle
    

3)启动YARN:运行启动文件

 $ sbin/start-yarn.sh

关闭时运行停止文件:

  $ sbin/stop-yarn.sh

4)启动后输入jps查看进程:
关于YARN(Hadoop入门三)_第6张图片
5)查看Web UI:
输入http://192.168.132.128:8088,IP地址对应的是自己部署的Hadoop,这里可以查看提交到YARN的应用程序的执行情况等信息。

3.2 提交hadoop自带mr用例

我选择一个hadoop自带的计算PI值的用例,路径是/home/hadoop/app/hadoop-2.6.0-cdh5.15.1/share/hadoop/mapreduce
包名叫hadoop-mapreduce-examples-2.6.0-cdh5.15.1.jar,输入命令:
hadoop jar hadoop-mapreduce-examples-2.6.0-cdh5.15.1.jar pi 5 1000
终端输出:

Number of Maps  = 5
Samples per Map = 1000
19/05/03 21:57:44 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Wrote input for Map #0
Wrote input for Map #1
Wrote input for Map #2
Wrote input for Map #3
Wrote input for Map #4
Starting Job
19/05/03 21:57:46 INFO client.RMProxy: Connecting to ResourceManager at /0.0.0.0:8032
19/05/03 21:57:47 INFO input.FileInputFormat: Total input paths to process : 5
19/05/03 21:57:47 INFO mapreduce.JobSubmitter: number of splits:5
19/05/03 21:57:47 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1556891500400_0005
19/05/03 21:57:47 INFO impl.YarnClientImpl: Submitted application application_1556891500400_0005
19/05/03 21:57:47 INFO mapreduce.Job: The url to track the job: http://hadoop000:8088/proxy/application_1556891500400_0005/
19/05/03 21:57:47 INFO mapreduce.Job: Running job: job_1556891500400_0005
19/05/03 21:57:53 INFO mapreduce.Job: Job job_1556891500400_0005 running in uber mode : false
19/05/03 21:57:53 INFO mapreduce.Job:  map 0% reduce 0%
19/05/03 21:57:57 INFO mapreduce.Job:  map 20% reduce 0%
19/05/03 21:57:58 INFO mapreduce.Job:  map 40% reduce 0%
19/05/03 21:58:00 INFO mapreduce.Job:  map 60% reduce 0%
19/05/03 21:58:01 INFO mapreduce.Job:  map 80% reduce 0%
19/05/03 21:58:02 INFO mapreduce.Job:  map 100% reduce 0%
19/05/03 21:58:04 INFO mapreduce.Job:  map 100% reduce 100%
19/05/03 21:58:04 INFO mapreduce.Job: Job job_1556891500400_0005 completed successfully
19/05/03 21:58:04 INFO mapreduce.Job: Counters: 49
	File System Counters
		FILE: Number of bytes read=116
		FILE: Number of bytes written=860583
		FILE: Number of read operations=0
		FILE: Number of large read operations=0
		FILE: Number of write operations=0
		HDFS: Number of bytes read=1360
		HDFS: Number of bytes written=215
		HDFS: Number of read operations=23
		HDFS: Number of large read operations=0
		HDFS: Number of write operations=3
	Job Counters 
		Launched map tasks=5
		Launched reduce tasks=1
		Data-local map tasks=5
		Total time spent by all maps in occupied slots (ms)=15140
		Total time spent by all reduces in occupied slots (ms)=4054
		Total time spent by all map tasks (ms)=15140
		Total time spent by all reduce tasks (ms)=4054
		Total vcore-milliseconds taken by all map tasks=15140
		Total vcore-milliseconds taken by all reduce tasks=4054
		Total megabyte-milliseconds taken by all map tasks=15503360
		Total megabyte-milliseconds taken by all reduce tasks=4151296
	Map-Reduce Framework
		Map input records=5
		Map output records=10
		Map output bytes=90
		Map output materialized bytes=140
		Input split bytes=770
		Combine input records=0
		Combine output records=0
		Reduce input groups=2
		Reduce shuffle bytes=140
		Reduce input records=10
		Reduce output records=0
		Spilled Records=20
		Shuffled Maps =5
		Failed Shuffles=0
		Merged Map outputs=5
		GC time elapsed (ms)=394
		CPU time spent (ms)=3330
		Physical memory (bytes) snapshot=1604169728
		Virtual memory (bytes) snapshot=16814833664
		Total committed heap usage (bytes)=1370488832
	Shuffle Errors
		BAD_ID=0
		CONNECTION=0
		IO_ERROR=0
		WRONG_LENGTH=0
		WRONG_MAP=0
		WRONG_REDUCE=0
	File Input Format Counters 
		Bytes Read=590
	File Output Format Counters 
		Bytes Written=97
Job Finished in 17.975 seconds
Estimated value of Pi is 3.14160000000000000000

其中map数是5,每个map执行的次数是1000,总共执行5000次,最后输出的值是3.14160000000000000000。该命令所用到的算法与代码介绍请参考: https://thinkinginhadoop.iteye.com/blog/710847

你可能感兴趣的:(Hadoop权威指南学习记录)