目录
6.yarn资源检查配置(防止虚拟机内存不足导致无法运行程序)
2.YARN-client和YARN-cluster启动流程
3.YARN-client与YARN-cluster的不同之处
一、spark on yarn本质
Master角色由YARN的ResourceManager担任.
worker角色由YARN的NodeManager担任.
Driver角色运行在YARN容器内或提交任务的客户端进程中
Executor运行在YARN提供的容器内
二、spark on yarn 配置
1.spark-env.sh文件
#添加内容
HADOOP_CONF_DIR=/export/servers/hadoop/etc/hadoop
YARN_CONF_DIR=/export/servers/hadoop/etc/hadoop
分发文件
2.yarn-site.xml文件
#添加内容
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
<property>
<name>yarn.log.server.url</name>
<value>http://server01:19888/jobhistory/logs</value>
</property>
分发文件
3.spark-defaults.conf文件
#添加内容
spark.yarn.historyServer.address server01:18080
分发文件
4.上传spark依赖jar包
hdfs dfs -mkdir -p /spark/apps/jars/
hdfs dfs -put /export/servers/spark/jars/* /spark/apps/jars
5.修改spark-defaults.conf文件
spark.yarn.jars hdfs://server01:8020/spark/apps/jars/*
分发文件
6.yarn资源检查配置(防止虚拟机内存不足导致无法运行程序)
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
分发文件
7.启动集群
--node1执行
#启动HDFS和YARN
hdfs --daemon start namenode
hdfs --daemon start datanode
yarn --daemon start resourcemanager
yarn --daemon start nodemanager
#启动MRHistoryserver服务
mapred --daemon start historyserver
#启动spark historyserver服务
/export/servers/spark/sbin/start-history-server.sh
8.测试集群运行
${SPARK_HOME}/bin/spark-submit \
> --master yarn \
> --class org.apache.spark.examples.SparkPi \
> ${SPARK_HOME}/examples/jars/spark-examples_2.13-3.2.4.jar \
> 100
三、部署模式DeployMode
1.client和cluster模式
使用spark-submit脚本提交应用运行时,指定参数:--deploy-mode,表示Driver Program运行的地方
·值:client(默认),表示Dirver Program进程process运行在应用提交客户端Client
client模式下:Driver名称为Spark Submit,Executor名称为CoarseGrainedExecutorBackend
SPARK_HOME=/export/servers/spark
${SPARK_HOME}/bin/spark-submit \
--master spark://server01:7077,server02:7077,server03:7077 \
--deploy-mode client \
--driver-memory 512m \
--executor-memory 512m \
--executor-cores 1 \
--total-executor-cores 2 \
--class org.apache.spark.examples.SparkPi \
${SPARK_HOME}/examples/jars/spark-examples_2.13-3.2.4.jar \
1000
·值:cluster,表示Dirver Program进程process运行在应集群从节点中,如worker或Node manager中
cluster模式下:Driver名称为DriverWrapper,Executor名称为CoarseGrainedExecutorBackend
SPARK_HOME=/export/servers/spark
${SPARK_HOME}/bin/spark-submit \
--master spark://server01:7077,server02:7077,server03:7077 \
--deploy-mode cluster \
--supervise \
--driver-memory 512m \
--executor-memory 512m \
--executor-cores 1 \
--total-executor-cores 2 \
--class org.apache.spark.examples.SparkPi \
${SPARK_HOME}/examples/jars/spark-examples_2.13-3.2.4.jar \
1000
在企业实际生产环境中,Deploy Mode部署模式为:Cluster,测试开发时为:Client
2.YARN-client和YARN-cluster启动流程
- YARN-cluster启动流程
(1)任务提交后会和Resource Manger通讯申请启动Application Master;
(2)随后Resource Manager分配Container,在合适的Node Manager上启动Application Master,此时的Application Master就是Driver;
(3)Driver启动后向Resource Manager生气Executor内存,Resource Manager街道Application Master的资源申请后分配Container,然后在合适的Node Manager上启动Executor进程;
(4)Executor进程启动完成后会向Driver反向注册;
(5)Executor全部注册完成后会Driver开始执行main函数,之后执行到Action算子时,触发应该job,并根据宽依赖开始划分stage,每个stage生成会有的taskSet,之后将task分发到各个Executor上执行
2.YARN-client启动流程
(1)Driver在任务提交的本地机器上运行,Driver启动后会和Resource Manager通讯申请启动Application Master;
(2)随后Resource Manager分配Container,在合适的Node Manager上启动Application Master,此时的Application Master相当于一个Executor Laucher,只负责向Resource Manager申请Executor内存;
(3)Resource Manager接到Application Master的资源申请后分配Container,然后Application Master在资源分配指定的Node Manager上启动Executor进程;
(4)Executor进程启动后会向Driver反向注册,Executor全部注册完成后Driver开始执行main函数;
(5)之后执行到Action算子时,触发一个Job,并根据宽依赖开始划分Stage,每个Stage生成对应的TaskSet,之后将Task分发到各个Executor上执行。
3.YARN-client与YARN-cluster的不同之处
①YARN-client模式,Driver运行在本地机器上;YARN-cluster模式,Driver运行在YARN集群上某个NodeManger节点上。
②YARN-client模式会导致本地机器负责Spark任务的调度,所以网卡流量会激增;YARN-cluster模式没有流量激增的问题。
③YARN-client的Driver运行在本地,通常的来说本地机器和YARN集群不在同一个机房,所以性能不会很好;YARN-cluster模式下,Driver和YARN集群运行在同一个机房内,性能上来说会好一点。
Cluster模式 | Client模式 | |
Driver运行位置 | YARN容器内 | 客户端进程内 |
通讯效率 | 高 | 低于Cluster模式 |
日志查看 | 日志输出在容器内,查看不方便 | 日志输出在客户端的标准输出流中,方便查看 |
生产可用 | 推荐 | 不推荐 |
稳定性 | 稳定 | 基于客户端进程,收到客户端进程影响 |