余老师带你学习大数据-Spark快速大数据处理第三章第十一节YARN调度器和实战编写

YARN编写实战

Yarn调度器配置

理想情况下,我们应用对Yarn资源的请求应该立刻得到满足,但现实情况资源往往是有限的,特别是在一个很繁忙的集群,一个应用资源的请求经常需要等待一段时间才能的到相应的资源。在Yarn中,负责给应用分配资源的就是Scheduler。其实调度本身就是一个难题,很难找到一个完美的策略可以解决所有的应用场景。

在Yarn框架中,调度器是一块很重要的内容。有了合适的调度规则,就可以保证多个应用可以在同一时间有条不紊的工作。最原始的调度规则就是FIFO,即按照用户提交任务的时间来决定哪个任务先执行,但是这样很可能一个大任务独占资源,其他的资源需要不断的等待。也可能一堆小任务占用资源,大任务一直无法得到适当的资源,造成饥饿。

为了解决以上问题,yarn提供了两种调度器,分别为:容量调度器和公平调度器。

容量调度器

原理

针对多用户调度,容量调度器采用的方法稍有不同。集群由很多队列组成,这些队列可能是层次结构的(因此,一个队列可能是另一个队列的子队列),每个队列被分配有一定的容量。本质上,容量调度器允许用户或组织为每个用户或组织模拟出一个使用FIFO调度策略的独立集群。容量调度器说的通俗点,可以理解成一个个的资源队列。这个资源队列是用户自己去分配的。

配置文件改动

1、调度器所占的最大份额设置为0.5。如果分配的过小,一个任务大概3G的内存,am会一直在等待过程中,无法进行下去。
在这里插入图片描述

2、root的队列是default,default的容量是100%,所有的任务都在同一个队列里面。
在这里插入图片描述

容量调度器演示

1、将default队列的情况打印出来。
命令:yarn queue -status default注:包括状态、容量、当前的容量、最大的容量
在这里插入图片描述

公平调度器

原理

公平调度器的目标是让每个用户公平共享集群能力。如果只有一个作业在运行,就会得到集群的所有资源。随着提交的作业越来越多,闲置的任务就会以“让每个用户公平共享集群”这种方式进行分配。某个用户的耗时短的作业将在合理的时间内完成,即便另一个用户的长时间作业正在运行而且还在运行过程中。

将整个集群资源都分配给应用程序,当提交其他应用程序的时候,已经释放的资源分配给新的应用程序。因此,每个应用程序最后都能粗略的获得等量的资源。

代码解释

Client向Resource Manager申请资源运行ApplicationMaster,ApplicationMaster向Node Manager申请资源也就是container,这里我们申请了10个container,去运行javaPi程序。
在这里插入图片描述

Client.java

在这里插入图片描述

1、创建Yarn的Client端,启动Yarn的Client端。

2、用YarnClient创建Application,得到application的上下文。注意,在Yarn中不允许提交相同名字的应用程序。

3、设置am的资源申请量,1G和一核。

4、设置application的环境变量。

ApplicationMaster.java

在这里插入图片描述

1、创建AMRMClient端,Application Master要向Resource Manager申请资源。

2、创建nmClient端,是向Node Manager交互的客户端。

3、向RM注册心跳信息。

4、申请container。

Yarn编程实战

下载程序

1、在app-11上,确保集群是启动的。
命令:jps在这里插入图片描述

2、切换到tmp目录下。
命令:cd /tmp
在这里插入图片描述

3、创建yarn文件。
命令:mkdir yarn
在这里插入图片描述

4、进入程序所在的文件夹下。
命令:cd Spark-stack/yarnExample/src/main/

在这里插入图片描述

5、将Java文件拷贝到新建的yarn文件夹下。
命令:cp -r java/* /tmp/yarn/
在这里插入图片描述

6、进入yarn目录下。
命令:cd /tmp/yarn/
在这里插入图片描述

编译程序

7、确定tools.jar存在。
命令:export HADOOP_CLASSPATH=${JAVA_HOME}/lib/tools.jar
在这里插入图片描述

8、使用hadoop命令编译程序。
命令:hadoop com.sun.tools.javac.Main org/apache/hadoop/yarn/examples/*.java注:程序文件在examples目录下,编译.java文件。
在这里插入图片描述

9、查看examples目录下。
命令:ls org/apache/hadoop/yarn/examples/
注:会出现许多的class文件。

在这里插入图片描述

10、将class文件打包。
命令:jar cf app.jar org/apache/hadoop/yarn/examples/*.class
在这里插入图片描述

打开程序应用状态监视

11、new terminal,之后使用hadoop用户登录。
命令:su – hadoop

在这里插入图片描述

12、监视。
命令:yarn top
在这里插入图片描述

运行程序

13、返回之前的new terminal,使用hadoop命令提交程序。

命令:hadoop jar app.jar org.apache.hadoop.yarn.examples.Client注:程序会一直运行下去,一直获取appID的情况。
在这里插入图片描述

Top的监视结果。

在这里插入图片描述

14、按Ctrl+c停止程序。

在这里插入图片描述

查看打印

15、新建new terminal,hadoop用户登录。

命令:su – hadoop
在这里插入图片描述

16、javaPi打印,先进入hadoop-3.1.2/logs目录下。
命令:cd /hadoop/Hadoop/hadoop-3.1.2/logs/
在这里插入图片描述

17、在进入userlogs目录下。

命令:cd /hadoop/Hadoop/hadoop-3.1.2/logs/userlogs/
注:这里有所有的执行container任务。

在这里插入图片描述

18、进入application_1602472376409_0001目录下。

命令:cd application_1602472376409_0001/注:app-11上有两个个container,分别为02和06.
在这里插入图片描述

查看其它机器的container

19、在app-12上,hadoop用户登录。

命令:su – hadoop

在这里插入图片描述

20、进入application_1602472376409_0001目录下。

命令:cd/hadoop/Hadoop/hadoop-3.1.2/logs/userlogs/application_1602472376409_0001/注:这里的container有三个。

在这里插入图片描述

21、在app-13上,hadoop用户登录。

命令:su – hadoop
在这里插入图片描述

22、进入application_1602472376409_0001目录下。

命令:cd/hadoop/Hadoop/hadoop-3.1.2/logs/userlogs/application_1602472376409_0001/注:这里的container有四个。
在这里插入图片描述

23、随机查看一个contain的运行结果。

命令:cat container_1602472376409_0001_01_000009/stdout
在这里插入图片描述

常见问题

在这里插入图片描述

问题解释:在javaPi中有些字符串不识别,这里是注释的中文不识别。
问题解决:将javaPi中的中文解释删除。

详细学习内容可观看Spark快速大数据处理扫一扫~~~或者引擎搜索Spark余海峰
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45810046/article/details/109161696