文档章节

troubleshooting yarn-client模式导致的网卡流量激增问题

crayzer_yixiu
 crayzer_yixiu
发布于 2016/10/30 17:21
字数 1405
阅读 64
收藏 0

很多公司都是通过Yarn来进行调度,mapreduce on yarn、spark on yarn、甚至storm on yarn。

Yarn集群分成两种节点:

  • ResourceManager负责资源的调度;
  • NodeManager负责资源的分配、应用程序执行这些东西。
  • 通过Spark-submit脚本来提交,用yarn-client提交模式,这种模式其实会在本地启动起来driver程序

Spark on yarn执行流程

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

  1. 在客户端给我们启动一个driver
  2. 去ResourceManager申请启动container(资源)
  3. 通知一个NodeManager在container里面启动ApplicationMaster
  4. ApplicationMaster去找ResourceManager申请Executor
  5. ResourceManager返回可以启动的NodeManager的地址
  6. ApplicationMaster去找NodeManager启动Executor
  7. Executor进程会反过来去向Driver注册上去
  8. 最后Driver接收到了Executor资源之后就可以去进行我们spark代码的执行了
  9. 执行到某个action就触发一个JOB
  10. DAGScheduler会划分JOB为一个个Stage
  11. TaskScheduler会划分Stage为一个个Task
  12. Task发送到Executor执行
  13. Driver就来进行Task的调度

Application-Master???

  • yarn中的核心概念,任何要在yarn上启动的作业类型(mr、spark),都必须有一个。每种计算框架(mr、spark),如果想要在yarn上执行自己的计算应用,那么就必须自己实现和提供一个ApplicationMaster相当于是实现了yarn提供的接口,spark自己开发的一个类
  • spark在yarn-client模式下,application的注册(executor的申请)和计算task的调度,是分离开来的。standalone模式下,这两个操作都是driver负责的。
  • ApplicationMaster(ExecutorLauncher)负责executor的申请;driver负责job和stage的划分,以及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集群里面每台机器是虚拟机还是物理机呢?网卡流量激增后会不会对其他东西产生影响呢?如果网络流量激增,要不要给Yarn集群增加一些网络带宽等等这些东西。那就是他们俩个团队的事情了,和你就没有关系了
  • 使用了yarn-cluster模式以后,
    • 就不是你的本地机器运行Driver,进行task调度了。是yarn集群中,某个节点会运行driver进程,负责task调度。

© 著作权归作者所有

crayzer_yixiu
粉丝 26
博文 57
码字总数 87921
作品 0
杭州
高级程序员
私信 提问
Spark下Yarn-Cluster和Yarn-Client的区别

转自:Spark下Yarn-Cluster和Yarn-Client的区别 0 首先注意的概念 ResourceManager:是集群所有应用程序的资源管理器,能够管理集群的计算资源并为每个Application分配,它是一个纯粹的调度器...

晴天哥
2018/03/08
0
0
spark-submit报错:Application application_1529650293575_0148 finished with failed status

我的原创地址:https://dongkelun.com/2018/07/06/sparkSubmitException1/ 前言 记录spark-submit提交Spark程序出现的一个异常,以供第一次出现这种异常且不知道原因,该怎么解决的的同学参考...

董可伦
2018/08/09
0
0
Spark在不同集群中的运行架构

Spark注重建立良好的生态系统,它不仅支持多种外部文件存储系统,提供了多种多样的集群运行模式。部署在单台机器上时,既可以用本地(Local)模式运行,也可以使用伪分布式模式来运行;当以分...

姚兴泉
2018/08/07
0
0
Spark的运行架构分析(二)之运行模式详解

在上一篇博客 spark的运行架构分析(一)中我们有谈到Spark的运行模式是多种多样的,那么在这篇博客中我们来具体谈谈Spark的运行模式 本博客转载自https://blog.csdn.net/gamer_gyt/article...

lubin2016
2018/04/18
0
0
Yarn Clinet模式运行spark报错问题

应用场景 安装部署完完全分布式的spark后,发现yarn-cluster模式可以运行不报错,但是yarn-client报错,无法进行计算PI的值,导致spark并不能使用,报错信息如下所示,只需要修改yarn的配置即...

wsc449
2017/11/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

设计模式之访问者模式

定义 Represent an operation to be performed on the elements of an object structure. Visitor lets you define a new operation without changing the classes of the elements on which......

陈年之后是青葱
昨天
9
0
PhotoShop 高级应用 : 分层云彩 - 简单闪电效果

1.创建黑白渐水平渐变图层 2.选择滤镜选项卡: 渲染--->分层云彩功能 3.将滤镜-云彩效果渲染后的图层进行反相操作 【此时出现闪电效果】 6.调整色阶,使得闪电效果更明显 7.创建剪贴蒙版:色...

东方墨天
昨天
9
0
三种实现Android主界面Tab的方式

三种实现Android主界面Tab的方式 https://www.cnblogs.com/caobotao/p/5103673.html

shzwork
昨天
9
0
java8-Optional类

背景 NPE问题,100%的Java程序员都碰到,并且曾经是心中的痛。 1965年英国TonyHoare引入了Null引用,后续的设计语言包括Java都保持了这种设计。 一个例子 业务模型 Person 有车一族, 有Car...

春天springcarter
昨天
11
0
py 登录github时token以及cookie的应用

import requestsfrom bs4 import BeautifulSoup## 获取tokenr1 = requests.get('https://github.com/login')s1 = BeautifulSoup(r1.text,'html.parser')token = s1.find(name='input',......

子枫Eric
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部