将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