Spark项目实战-troubleshooting之解决yarn-client模式导致的网卡流量激增问题

一、yarn-client模式

我们先来回顾下yarn-client模式的整个流程,如下:

几个关键点:

1、Driver

Driver到底是什么? 我们写的spark程序,打成jar包用spark-submit来提交。jar包中的一个main类,通过jvm的命令启动起来。 JVM进程,这个进程其实就是咱们的Driver进程。Driver进程启动起来以后,执行我们自己写的main函数,从new SparkContext() 。

2、ApplicationMaster?

yarn中的核心概念,任何要在yarn上启动的作业类型(mr、spark),都必须有一个AM。就是说每种计算框架(mr、spark),如果想要在yarn上执行自己的计算应用,那么就必须自己实现和提供一个ApplicationMaster。相当于是实现了yarn提供的接口,spark自己开发的一个类。

3、spark在yarn-client模式下,application的注册(executor的申请)和计算task的调度,是分离开来的。但是standalone模式下,这两个操作都是driver负责的。ApplicationMaster(ExecutorLauncher)负责executor的申请,driver负责job和stage的划分,以及task的创建、分配和调度。

4、driver接收到属于自己的executor进程的注册之后,就可以去进行我们写的spark作业代码的执行了。 会一行一行的去执行咱们写的那些spark代码,执行到某个action操作的时候就会触发一个job,然后DAGScheduler会将job划分为一个一个的stage,为每个stage都创建指定数量的task,TaskScheduler将每个stage的task,分配到各个executor上面去执行。 task就会执行咱们写的算子函数。

二、yarn-client模式下,会产生什么样的问题呢?

由于咱们的driver是启动在本地机器的,而且driver是全权负责所有的任务的调度的,也就是说要跟yarn集群上运行的多个executor进行频繁的通信(中间有task的启动消息、task的执行统计消息、task的运行状态、shuffle的输出结果)。

咱们来想象一下。比如你的executor有100个,stage有10个,task有1000个。每个stage运行的时候,都有1000个task提交到executor上面去运行,平均每个executor有10个task。接下来问题来了,driver要频繁地跟executor上运行的1000个task进行通信。通信消息特别多,通信的频率特别高。运行完一个stage,接着运行下一个stage,又是频繁的通信。

在整个spark运行的生命周期内,都会频繁的去进行通信和调度。所有这一切通信和调度都是从你的本地机器上发出去的和接收到的。这是最要人命的地方,你的本地机器,很可能在30分钟内(spark作业运行的周期内),进行频繁大量的网络通信。那么此时,你的本地机器的网络通信负载是非常非常高的。会导致你的本地机器的网卡流量会激增!!!

三、解决的方法

实际上解决的方法很简单,就是心里要清楚,yarn-client模式是什么情况下,可以使用的?yarn-client模式,通常咱们就只会使用在测试环境中,你写好了某个spark作业,打了一个jar包,在某台测试机器上用yarn-client模式去提交一下。因为测试的行为是偶尔为之的,不会长时间连续提交大量的spark作业去测试。

还有一点好处,yarn-client模式提交,可以在本地机器观察到详细全面的log。通过查看log,可以去解决线上报错的故障(troubleshooting)、对性能进行观察并进行性能调优。

实际上线了以后,在生产环境中都得用yarn-cluster模式去提交你的spark作业。yarn-cluster模式,就跟你的本地机器引起的网卡流量激增的问题,就没有关系了。也就是说,就算有问题也应该是yarn运维团队和基础运维团队之间的事情了。使用了yarn-cluster模式以后,就不是你的本地机器运行Driver进行task调度了。是yarn集群中某个节点会运行driver进程,负责task调度。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值