转自:http://www.jobplus.com.cn/article/getArticleDetail/30566

spark的四种分布式运行模式

如图所示,上方为spark的架构图,spark的组件可以分为四个部分,driver、cluster Manager、worker和executor
根据clusterManager的不同,spark可以分成四种不同的运行模式,standalone、local cluster、spark on yarn 和spark on mesos

standalone模式:

standalone模式既独立模式,自带完整服务,可单独部署到一个集群中,无需依赖其他任何资源管理系统,只支持FIFO调度器。从一定程度上说,它是spark on yarn 和spark on mesos 的基础。在standalone模式中,没有AM和NM的概念,也没有RM的概念,用户节点直接与master打交道,由driver负责向master申请资源,并由driver进行资源的分配和调度等等。

localCluster模式:

standalone模式的单机版,master和worker分别运行在一台机器的不同进程上

spark on Yarn模式:

这是一种很有前景的部署模式。但限于YARN自身的发展,目前仅支持粗粒度模式(Coarse-grained Mode)。这是由于YARN上的Container资源是不可以动态伸缩的,一旦Container启动之后,可使用的资源不能再发生变化,不过这个已经在YARN计划中了。 spark on yarn 的支持两种模式:

(1) yarn-cluster:适用于生产环境;(2) yarn-client:适用于交互、调试,希望立即看到app的输出

yarn-cluster和yarn-client的区别在于yarn appMaster,每个yarn app实例有一个appMaster进程,是为app启动的第一个container;负责从ResourceManager请求资源,获取到资源后,告诉NodeManager为其启动container。yarn-cluster和yarn-client模式内部实现还是有很大的区别。如果你需要用于生产环境,那么请选择yarn-cluster;而如果你仅仅是Debug程序,可以选择yarn-client。

spark on mesos模式:

这是很多公司采用的模式,官方推荐这种模式(当然,原因之一是血缘关系)。正是由于Spark开发之初就考虑到支持Mesos,因此,目前而言,Spark运行在Mesos上会比运行在YARN上更加灵活,更加自然。目前在Spark On Mesos环境中,用户可选择两种调度模式之一运行自己的应用程序(可参考Andrew Xia的“Mesos Scheduling Mode on Spark”):

  1. 粗粒度模式(Coarse-grained Mode):每个应用程序的运行环境由一个Dirver和若干个Executor组成,其中,每个Executor占用若干资源,内部可运行多个Task(对应多少个“slot”)。应用程序的各个任务正式运行之前,需要将运行环境中的资源全部申请好,且运行过程中要一直占用这些资源,即使不用,最后程序运行结束后,回收这些资源。举个例子,比如你提交应用程序时,指定使用5个executor运行你的应用程序,每个executor占用5GB内存和5个CPU,每个executor内部设置了5个slot,则Mesos需要先为executor分配资源并启动它们,之后开始调度任务。另外,在程序运行过程中,mesos的master和slave并不知道executor内部各个task的运行情况,executor直接将任务状态通过内部的通信机制汇报给Driver,从一定程度上可以认为,每个应用程序利用mesos搭建了一个虚拟集群自己使用。

  2. 细粒度模式(Fine-grained Mode):鉴于粗粒度模式会造成大量资源浪费,Spark On Mesos还提供了另外一种调度模式:细粒度模式,这种模式类似于现在的云计算,思想是按需分配。与粗粒度模式一样,应用程序启动时,先会启动executor,但每个executor占用资源仅仅是自己运行所需的资源,不需要考虑将来要运行的任务,之后,mesos会为每个executor动态分配资源,每分配一些,便可以运行一个新任务,单个Task运行完之后可以马上释放对应的资源。每个Task会汇报状态给Mesos slave和Mesos Master,便于更加细粒度管理和容错,这种调度模式类似于MapReduce调度模式,每个Task完全独立,优点是便于资源控制和隔离,但缺点也很明显,短作业运行延迟大。

关于driver

首先不知道这个main函数指的是什么,是像C语言中的main函数一样吗,其次看到那句create context让我想到的是源码中有一段代码在某个场合创建了一个driver然后在driver里面创建的context,但看了两天的代码以后,发并没有找到。思考了很久以后才明白driver是什么意思:

用户提交的应用程序代码在spark中运行起来就是一个driver,用户提交的程序运行起来就是一个driver,他是一个一段特殊的excutor进程,这个进程除了一般excutor都具有的运行环境外,这个进程里面运行着DAGscheduler Tasksheduler Schedulerbackedn等组件。

这段计算π值的程序代码在spark上运行起来就是一个driver,可以看到这段程序里有个main函数,它是整个应用程序的开始,也可以看到在这段代码中创建了context,这样与官网给的解释就完全对上了。

Q:一个应用程序是如何与一个driver一一对应的呢,在worker.scala中我们找到了创建driver的代码,一步步往上追溯就能发现一个Driver如何与一个应用程序一一对应起来的

(二)driver做什么

运行应用程序的main函数

  • 创建spark的上下文
  • 划分RDD并生成有向无环图(DAGScheduler)
  • 与spark中的其他组进行协调,协调资源等等(SchedulerBackend)
  • 生成并发送task到executor(taskScheduler)

(三)driver运行在哪里(在这里只讨论yarn模式)

官网上说:There are two deploy modes that can be used to launch Spark application on Yarn.In cluster mode,the Spark driver run inside an application master process.And in the client mode,the driver runs in the client process.

yarn-cluster模式下,client将用户程序提交到到spark集群中就与spark集群断开联系了,此时client将不会发挥其他任何作用,仅仅负责提交。在此模式下。AM和driver是同一个东西,但官网上给的是driver运行在AM里,可以理解为AM包括了driver的功能就像Driver运行在AM里一样,此时的AM既能够向AM申请资源并进行分配,又能完成driver划分RDD提交task等工作

yarn-client模式下

yarn-client模式下,Driver运行在客户端上,先有driver再用AM,此时driver负责RDD生成、task生成和分发,向AM申请资源等 ,AM负责向RM申请资源,其他的都由driver来完成

总结

用户提交的程序运行起来就是一个driver,他是一个一段特殊的excutor进程,这个进程除了一般excutor都具有的运行环境外,这个进程里面运行着DAGscheduler Tasksheduler Schedulerbackedn等组件

yarn-Cluster模式下driver运行在AM里,这个AM既完成划分RDD生成有向无环图提交task等任务也负责管理与这个application运行有关的executor

yarn-Client模式下由AM负责管理excutor其余的由driver完成

Spark中的Driver相关推荐

  1. 大剑无锋之Spark中的Driver是什么?【面试推荐】

    Spark中的Driver即运行Application的Main()函数并且创建SparkContext,其中创建SparkContext的目的是为了准备Spark应用程序的运行环境.在Spark中由 ...

  2. Spark中的driver和Executor

    Apache Spark使用最先进的DAG调度程序,查询优化器和物理执行引擎,实现批处理和流数据的高性能.这篇文章主要是对driver和executor功能上进行一个分析. 驱动器节点(Driver) ...

  3. Spark中Task,Partition,RDD、节点数、Executor数、core数目(线程池)、mem数

    Spark中Task,Partition,RDD.节点数.Executor数.core数目的关系和Application,Driver,Job,Task,Stage理解 from:https://bl ...

  4. spark中local模式与cluster模式使用场景_Spark 知识点 ( 架构 RDD Task )

    1. Spark介绍 Apache Spark是一个围绕速度.易用性和复杂分析构建的大数据处理框架,最初在2009年由加州大学伯克利分校的AMPLab开发,并于2010年成为Apache的开源项目之一 ...

  5. spark中local模式与cluster模式使用场景_Spark-Submit 和 K8S Operation For Spark

    1 Overview 本文翻译自 Lightbend 的一篇文章,文章日期还比较新,2019/02/26.文章分为两部分,翻译也将分为两个部分.附上文章链接如下: https://www.lightb ...

  6. java 单例模式打包jar_在 Spark 中实现单例模式的技巧

    单例模式是一种常用的设计模式,但是在集群模式下的 Spark 中使用单例模式会引发一些错误.我们用下面代码作例子,解读在 Spark 中使用单例模式遇到的问题. object Example{ var ...

  7. Spark中foreachRDD、foreachPartition和foreach解读

    精选30+云产品,助力企业轻松上云!>>> 点击蓝色"大数据每日哔哔"关注我 加个"星标",第一时间获取大数据架构,实战经验 区别 最近有不少 ...

  8. Spark中资源与任务的关系

    在介绍Spark中的任务和资源之前先解释几个名词: Dirver Program:运行Application的main函数(用户提交的jar包中的main函数)并新建SparkContext实例的程序 ...

  9. Spark中如何使用矩阵运算间接实现i2i

    本文主要包含以下几部分: 1.背景 2.Spark支持的数据类型 2.1 Local Vector(本地向量) 2.2 Labeled point(带标签的点) 2.3 Local Matrix(本地 ...

  10. Spark 中 JVM 内存使用及配置详情、spark报错与调优、Spark内存溢出OOM异常

    一般在我们开发spark程序的时候,从代码开发到上线以及后期的维护中,在整个过程中都需要涉及到调优的问题,即一开始需要考虑如何把代码写的更简洁高效调优(即代码优化),待开发测试完成后,提交任务时综合考 ...

最新文章

  1. C#-CHTTPDownload
  2. c++控制台下输出sin函数图形
  3. 数据结构实验之链表六:有序链表的建立
  4. python利用pygame框架实现类似推箱子游戏 Star Pusher
  5. Java中的编译、反编译和反编译工具全家桶分享
  6. 借助Google搜索找客户和邮箱
  7. mysql proxy maxscale_maxscale参数配置
  8. MFC的坐标转换GetClientRect/GetWindowRect/ClientToScreen/GetCursorPos/ScreenToClient
  9. html5简单表格制作
  10. [蓝桥杯]java实现第39级台阶
  11. 微博微信QQ等开发者平台注册应用时提交签名信息的坑点。
  12. EDK2从搭建到运行
  13. oracle如何总计,如何在Oracle中产生分组小计和总计?
  14. cordova app强制横屏
  15. 新南威尔士大学预科学生宿舍
  16. IDEA打包普通web项目
  17. MQ(二)RabbitMQ快速入门
  18. 2022年现场综合化维护工程师四级认证考试题目
  19. CCF 201709-2 公共钥匙盒 (Java 100分)
  20. java定时数据同步_java 定时同步数据的任务优化

热门文章

  1. 利用python进行正球面的大圆航程与横向线航程计算
  2. 单元测试利器 - Mock
  3. hello heaven
  4. 1 error and 0 warnings potentially fixable with the `--fix` optio
  5. python识别颜色并提取轮廓_用 Python 对图片主体轮廓进行提取、颜色标记、并计算区域面积...
  6. 二维数组更改vue,VueX中直接修改数据报错,修改一维数组,二维数组,报错的原因...
  7. 电类专业(自动化、电气、电子、电力、通信等)的大学四年应该怎么过呢_史蒂文森sun_新浪博客
  8. 微博相册图片获取工具
  9. 微博相册下载助手v7.2 微博图片批量下载神器
  10. STM32基础12--数模转换(DAC)