spark cluster和spark client的区别---转载

Spark支持Yarn,Mesos,Standalone三种集群部署模式,它们的共同点:Master服务(Yarn ResourceManager,Mesos master,Spark standalone)来决定哪些应用可以运行以及在哪什么时候运行,Slave服务(Yarn NodeManger)运行在每个节点上,节点上实际运行着Executor进程,此外还监控着它们的运行状态以及资源的消耗

Spark On Yarn模式,又分cluster和client模式。cluster和client的最大区别在于,driver运行在哪里。

 

本篇文章,部分来自网络。

一,yarn-cluster工作流

spark-cluster工作流

yarn-cluster模式下作业执行流程:

1. 客户端生成作业信息提交给ResourceManager(RM)
2. RM在某一个NodeManager(由Yarn决定)启动container并将Application Master(AM)分配给该NodeManager(NM)
3. NM接收到RM的分配,启动Application Master并初始化作业,此时这个NM就称为Driver
4. Application向RM申请资源,分配资源同时通知其他NodeManager启动相应的Executor
5. Executor向NM上的Application Master注册汇报并完成相应的任务

二,yarn-client工作流

spark-client工作流

yarn-client模式下作业执行流程:

1. 客户端生成作业信息提交给ResourceManager(RM)
2. RM在本地NodeManager启动container并将Application Master(AM)分配给该NodeManager(NM)
3. NM接收到RM的分配,启动Application Master并初始化作业,此时这个NM就称为Driver
4. Application向RM申请资源,分配资源同时通知其他NodeManager启动相应的Executor
5. Executor向本地启动的Application Master注册汇报并完成相应的任务

三,spark-cluster和spark-client对比

模式提交模式driver(main方法,用户程序)ApplicationMasterResourceManagerNodeManagerMasterWorkerContainerExecutor
spark on yarn(client)–master yarn –deploy-mode clientdriver运行在提交作业的机器上(可以看到程序打印日志)运行在某一台机器上,向RM申请资源(container),杀死任务管理资源,接受任务根据RM命令,分配containerContainer里面运行着Spark Executor运行在Container里里面运行Task
spark on yarn(cluster)–master yarn –deploy-mode clusterdriver运行在集群上某个机器上(看不到日志,只可以看到running状态),Driver在AppMaster执行运行在集群某一台机器上,申请资源(container),杀死任务.管理资源,接受任务根据RM命令,分配containerContainer里面运行着Spark Executor运行在Container里,里面运行Task

spark-submit提交任务时,
cluster模式,会把jar包,分配到某一个nodemanager中,你是不知道的。但是可以通过命令,或者管理工具,去查找才能知道。并且日志无输出

[root@bigserver3 conf]# ps axu |grep -i jar
root 19676 2.2 3.4 2916432 394984 ? Sl 01:05 0:33 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/bin/java -Dproc_nodemanager -Xmx1000m -Dhadoop.log.dir=/home/bigdata/hadoop/logs -Dyarn.log.dir=/home/bigdata/hadoop/logs -Dhadoop.log.file=yarn-root-nodemanager-bigserver3.log -Dyarn.log.file=yarn-root-nodemanager-bigserver3.log -Dyarn.home.dir= -Dyarn.id.str=root -Dhadoop.root.logger=INFO,RFA -Dyarn.root.logger=INFO,RFA -Djava.library.path=/home/bigdata/hadoop/lib/native -Dyarn.policy.file=hadoop-policy.xml -server -Dhadoop.log.dir=/home/bigdata/hadoop/logs -Dyarn.log.dir=/home/bigdata/hadoop/logs -Dhadoop.log.file=yarn-root-nodemanager-bigserver3.log -Dyarn.log.file=yarn-root-nodemanager-bigserver3.log -Dyarn.home.dir=/home/bigdata/hadoop -Dhadoop.home.dir=/home/bigdata/hadoop -Dhadoop.root.logger=INFO,RFA -Dyarn.root.logger=INFO,RFA -Djava.library.path=/home/bigdata/hadoop/lib/native -classpath /home/bigdata/hadoop/etc/hadoop:/home/bigdata/hadoop/etc/hadoop:/home/bigdata/hadoop/etc/hadoop:/home/bigdata/hadoop/share/hadoop/common/lib/*:/home/bigdata/hadoop/share/hadoop/common/*:/home/bigdata/hadoop/share/hadoop/hdfs:/home/bigdata/hadoop/share/hadoop/hdfs/lib/*:/home/bigdata/hadoop/share/hadoop/hdfs/*:/home/bigdata/hadoop/share/hadoop/yarn/lib/*:/home/bigdata/hadoop/share/hadoop/yarn/*:/home/bigdata/hadoop/share/hadoop/mapreduce/lib/*:/home/bigdata/hadoop/share/hadoop/mapreduce/*:/bigdata/hadoop/contrib/capacity-scheduler/*.jar:/bigdata/hadoop/contrib/capacity-scheduler/*.jar:/home/bigdata/hadoop/share/hadoop/yarn/*:/home/bigdata/hadoop/share/hadoop/yarn/lib/*:/home/bigdata/hadoop/etc/hadoop/nm-config/log4j.properties org.apache.hadoop.yarn.server.nodemanager.NodeManager
root 23024 0.0 0.0 113136 1216 ? Ss 01:15 0:00 /bin/bash -c /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/bin/java -server -Xmx512m -Djava.io.tmpdir=/bigdata/hadoop/tmp/nm-local-dir/usercache/root/appcache/application_1551675014530_0010/container_e61_1551675014530_0010_02_000001/tmp -Dspark.yarn.app.container.log.dir=/home/bigdata/hadoop/logs/userlogs/application_1551675014530_0010/container_e61_1551675014530_0010_02_000001 org.apache.spark.deploy.yarn.ApplicationMaster --class 'netjoy.spark_sql.track_app.run' --jar file:/home/bigdata/web/target/sparkApp3-1.0-SNAPSHOT.jar --arg 'debug' --properties-file /bigdata/hadoop/tmp/nm-local-dir/usercache/root/appcache/application_1551675014530_0010/container_e61_1551675014530_0010_02_000001/__spark_conf__/__spark_conf__.properties 1> /home/bigdata/hadoop/logs/userlogs/application_1551675014530_0010/container_e61_1551675014530_0010_02_000001/stdout 2> /home/bigdata/hadoop/logs/userlogs/application_1551675014530_0010/container_e61_1551675014530_0010_02_000001/stderr

client模块,jar包跑在本地,进程日志输出,都是可以获取的。可控性比较强。

四,正式环境用spark-cluster,还是spark-client

1,appmanager和nodemanger是不是在同一网段。

2,整个spark on yarn集群节点数,有多少

本人主要参考以上二点;

如果节点数很多,采用spark-cluster,这样可以资源均衡。

如果在appmanager和nodemanger不在同一网段,采用spark-cluster模式,减少网络延迟。

如果节点数少,又在同一网段,client模式和cluster模式,都是可以的。

就算正式环境采用了spark-cluster模式,在刚上线时也要采用spark-client模式,这样可以获取信息,都没有问题了,稳定了,在切换到spark-cluster模式。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值