10.5 spark on yarn

将spark的application运行在yarn上

Application:一个应用程序,WordCount

job:是与action类的算子一一对应的

stage:一组并行计算的task(pipeline)

task:一个任务单元,Thread

Master:资源管理的主节点

Worker:资源管理的从节点

Executor:真正计算的进程

ThreadPool(Executor中):线程池里面计算每一个task(Thread)


yarn:

ResourceManager(进程) 资源管理主节点 -RS

NodeManager(进程) 资源管理从节点 -NM

ApplicationMaster(进程) -AM

哪个计算框架想要在yarn上执行,必须实现ApplicationMaster接口

为当前的application申请资源

给NM发送消息,启动Container Executor

spark on yarn执行流程:

Yarn-Client模式:

1,在客户端通过Spark-submit提交一个application

2,在客户端上启动一个Driver进程

3,Driver启动完成后,client会向RS发送请求(给我找一台NM,我要启动AM)

4,RS接受了请求,找到某台NM,RS会向NM进程发送一条消息(给我启动一台Container容器,我要启动AM进程)

5,AM已经启动了,AM会向RS发送请求(给我一批资源,我要运行application)

6,RS接受了请求,给他找到一批NM返回给AM

7,AM会向这一批NM发送消息(给我启动一个Container,我要启动Executor)

8、Executor会反向注册给客户端里启动的Driver进程

9、Driver就有了一批计算进程(Executor)

10、Driver就可以发送task到Executor里面去执行了。

Yarn-client用于测试,因为Driver端运行在本地,程序在集群中运行的Log可以在本地查看到,方便进行测试

缺点是:

因为Driver会与yarn集群中的Executor进行大量的通信,会造成客户机网卡流量的大量增加,可能会被公司的SA运维人员警告。

Yarn-cluster模式:

1,在客户端通过Spark-submit提交一个application

2,会向RM发送请求,(给我找一台NM,我要启动AM),RM接收之后在某个NM上分配container,启动AM(相当于Driver)

3,这是候AM就会发送请求到RM,请求一批container,用于启动Executor

4,请求到一批container之后,AM就会连接NM来启动Executor(这里的NM就相当于spark standlone模式下的worker节点)

5,Executor启动之后就会反向注册到Driver(AM)

Yarn-cluster主要用于生产环境中,因为Driver运行在Yarn集群中某一台nodeManager中,每次提交任务的Driver所在的机器都是随机的,不能产生某一台机器网卡流量激增的现象

缺点是:

调试不方便,本地用Spark-Submit提交后看不到log,只能通过yarn application-logs applicationId这种命令来查看log,很是不方便。

client模式 和 cluster模式对比:

1、client模式Driver在客户端启动 测试

2、cluster模式Driver是在Yarn集群中某一台NM中启动 生产环境

3、ApplicationMaster在不同的模式下作用不一样:

ApplicationMaster 在Client模式下:

(1)为当前的Application申请资源

(2)给NM发送消息,NM启动Container(一组计算资源的单位)Executor

ApplicationMaster 在Cluster模式下:

(1)为当前的Application申请资源

(2)给NM发送消息,NM启动Container(一组计算资源的单位)Executor

(3)任务调度


spark on yarn 配置:

注意事项:

(1)yarn集群所在的节点必须有Spark的安装包

(2)Spark跑在Yarn集群上,不需要启动Spark standalone集群,不需要master worker这一些几点

master-> RS

Worker->NM

配置:(在standalone模式配置的基础上)

1、在Spark-env.sh下面添加一行 注意hadoop环境变量需要配置 --注意其他集群同步

export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=node2:4180,node3:4180,node4:4180 -Dspark.deploy.zookeeper.dir=/spark0415"

2、启动yarn集群 因为在Yarn集群运行application需要依赖HDFS

所以只 启动HDFS集群 start-all.sh 注意:不需要启动spark集群

3、提交任务到yarn集群中运行

client 模式

./spark-submit --master yarn-client --class org.apache.spark.examples.SparkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar 100

cluster 模式

./spark-submit --master yarn-cluster --class org.apache.spark.examples.SparkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar 100

猜你喜欢

转载自blog.csdn.net/u011418530/article/details/81177956