目录
Yarn模式是指Spark直接调用Yarn进行资源调度,Standalone下资源调度用的是Spark自身的Master和ApplicationMaster;
在Yarn模式下直接直接用Yarn的ResourceManager、NodeManager和Container环境做资源调度,Spark计算框架的ApplicationMaster和Executor存在于Container中。
Spark ApplicationMaster负责和Yarn交互做资源调度,
Spark Driver负责和Executor交互做任务调度,
Spark中的Master和Worker没有了,换成了对应的yarn的RM和NM,Executor和Driver依然存在。
1. Yarn模式运行流程
(1)客户端提交应用程序,SparkSubmit
(2)让RM启动Spark的ApplicationMaster程序,用于Spark与Yarn之间资源交互
(3)AM向RM申请资源,用于启动Executor
(4)RM获取集群的资源信息(NM)
(5)RM将资源信息发送给AM,由AM中的Driver判断任务调度的地址
(6)Driver划分任务,分配任务task发送给Executor执行
(7)Executor执行任务,执行完毕后,通知Driver
(8)Driver和AM交互通知RM回收资源
(9)Executor、Container、Driver、ApplicationMaster就都释放资源消失
(10)最终留下Yarn的RM和NM,在client端打印结果。
2. 安装Yarn模式
(1)修改hadoop配置文件yarn-site.xml添加如下内容
[kevin@hadoop100 hadoop]$ vi yarn-site.xml
<!--是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认是true -->
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<!--是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是true -->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
这里默认是true,本地测试时为避免任务失败都改成false了
(2)修改spark-env.sh,添加配置
[kevin@hadoop100 conf]$ vi spark-env.sh
YARN_CONF_DIR=/opt/module/hadoop-2.7.2/etc/hadoop
(3)分发配置文件
[kevin@hadoop100 conf]$ xsync /opt/module/hadoop-2.7.2/etc/hadoop/yarn-site.xml
[kevin@hadoop100 conf]$ xsync spark-env.sh
(4)启动HDFS和Yarn集群服务,就可以正常开始运行了,Spark的Yarn模式配置完毕
3. 日志查看
(1)修改配置文件spark-default.conf,添加信息
spark.yarn.historyServer.address=hadoop100:18080
spark.history.ui.port=18080
这里把历史日志地址选在了hadoop100这台主机上,端口是18080
(2)重启Spark的历史服务
[kevin@hadoop100 spark]$ sbin/stop-history-server.sh
[kevin@hadoop100 spark]$ sbin/start-history-server.sh
(3)启动hadoop历史服务
[kevin@hadoop100 hadoop-2.7.2]$ sbin/mr-jobhistory-daemon.sh start historyserver
(4)历史服务配置完毕,点开18080端口查看历史服务
ps:如果Web端显示不了,可能是由于hadoop中配置文件设定主机名冲突,四个.site文件检查一下,确保服务的主机名信息一致