导读Spark的运行模式指的是Spark应用程序以怎样的方式运行,单节本地点运行还是多节点集群运行,自己进行资源调度管理还是依靠别人进行调度管理。Spark提供了多种多样,灵活多变的部署模式。

作者:小舰 中国人民大学计算机硕士

来源:DLab数据实验室(ID:rucdlab)

一、部署模式

这是spark官方给出的master的配置选项,也从另一个侧面说明了spark的不同部署和运行模式。


Spark部署模式总体来讲可以分为以下几种:

Local:这种模式一般用在本地IDEA中调试运行使用,在进行spark实例创建的时候指定master为local,其中local为利用本节点单核单线程运行,local[n]为n核多线程运行;

例如:./spark-shell - -master local[n] ,n代表线程数

Standalone:即独立模式,自带完整的服务,可单独部署到一个集群中,无需依赖任何其他资源管理系统。从一定程度上说,该模式是其他两种的基础。目前Spark在standalone模式下是没有任何单点故障问题的,这是借助zookeeper实现的。

Yarn/Mesos:这其实可以理解为依靠第三方资源管理器来进行资源管理的部署方式:Mesos是官方推荐的一种部署模式,由于Spark开发之初就考虑到支持Mesos,因此,目前而言,Spark运行在Mesos上会比运行在YARN上更加灵活,更加自然。但是由于Hadoop生态的完善发展,大部分的企业都是将Spark作为组件引入到了Hadoop生态中,因此更多的是借助Yarn来进行资源管理。这是一种很有前景的部署模式。

Yarn部署模式下,又根据driver启动在本地(client)还是在Yarn集群内部的AM中(cluster)中分为以下两种:

1) yarn-cluster:适用于生产环境;

2) yarn-client:适用于交互、调试,希望立即看到app的输出

Kubernetes:一个开源系统,用于自动化、容器化应用程序的部署,扩展和管理。随着容器化技术的发展,如果考虑到平台上云,或者有时候为了更好的动态扩展、资源隔离的时候,可以采用容器化部署的方式。

二、运行机制

spark运行最重要的概念包括sparkcontext以及executor,SparkContext中包含了划分stage的DAGScheduler和划分task的TaskScheduler,executor具体来接收task然后创建线程池来进行运行。对于不同的模式,这里面的资源申请和任务调度稍有不同,我们用两种最常用的模式来进行分析。

standalone模式运行机制


这张图表示的是standalone模式下的运行流程。上面虽然标了1-6个步骤,但是我大体可以将其分为三个步骤:

1.资源申请:在该模式下,Client中创建了SparkContext(简称SC),SC向master注册并申请资源,master管理了多个worker节点,通过心跳可以时刻备案哪些worker有资源,然后将有空闲的worker挑选出来,创建Executor,分配给SC(Executor会向SC报道)

2.任务运行:在Executor向SC报道之后,SC就知道可以在它上面运行具体任务了,就会将任务进行分解,先分解成Stage,然后进一步分解出task,发送到Executor中执行;Executor创建线程池,来运行这些任务,并及时向SC汇报执行情况;

3.任务注销:当任务执行完毕,SC向master进行注销操作

Yarn模式运行机制


这是yarn模式下,准确的说是yarn-client模式(因为SparkContext在Client中所以为yarn-client)下的运行流程。

这张图也是标记了1-6多个步骤,我依然给分为三个阶段:

1.资源申请:Yarn模式跟Standalone模式最大的区别就是,资源不是由spark自己管理,而是依赖第三方资源管理器进行管理,因此资源申请就要更费劲一点。首先,client中创建了SparkContext(SC),为了找到能够帮它创建Executor的master,它需要先向ResourceManager(用了Yarn,RM就是新的老大)申请创建ApplicationMaster(简称AM),RM会在各个NodeManager(简单理解为节点,简称NM)中找一个空闲的container(Yarn资源管理模式下的最小的资源申请单位)来启动AM。有了AM,AM就可以向RM申请NM来为SC创建Executor啦,同样,Executor在启动之后会向SC注册并申请task;

2.任务运行:有了Executor,基本就跟Standalone模式差不多了,在Executor向SC报道之后,SC就知道可以在它上面运行具体任务了,就会将任务进行分解,先分解成Stage,然后进一步分解出task,发送到Executor中执行;Executor创建线程池,来运行这些任务,并及时向SC汇报执行情况;

3.任务注销:任务运行完成之后,client的SC向RM注销自己并关闭自己

上面讲了两种重要部署模式下的运行机制,如果是yarn-cluster会是怎样的逻辑呢,其实如果你理解了以上两种运行方式,这个也就能自己推理出来了,放一张图自己试试看(tips:只是driver从client跑到了ApplicationMaster节点了而已)。


总结

了解了spark的部署模式及其运行机制,你就对spark的认识又有了一步质的提高,当然理论与实践还是会有差别,不同部署模式可能会出现一些不兼容的问题,我们还是需要多动手运行,从实践中掌握更多。

●Spark原理与实战--Spark任务提交与运行(六)

●Spark原理与实战--数据抽象DataFrame(五)●Spark原理与实战--数据抽象RDD(四)●Spark原理与实战--GraphX图查询(三)●Spark原理与实战--SparkStreaming流处理(二)●Spark原理与实战--环境搭建及WordCount(一)●Spark数据倾斜解决方案实战(三)●Spark数据倾斜解决方案实战(二)●Spark数据倾斜解决方案实战(一)

文章都看完了不点个 吗

欢迎    点赞、在看、分享  三连哦~~

spark任务shell运行_Spark原理与实战(七)部署模式与运行机制相关推荐

  1. spark任务shell运行_Spark原理与实战之部署模式与运行机制

    前言: Spark的运行模式指的是Spark应用程序以怎样的方式运行,单节本地点运行还是多节点集群运行,自己进行资源调度管理还是依靠别人进行调度管理.Spark提供了多种多样,灵活多变的部署模式. 一 ...

  2. idea创建python spark项目的步骤_Spark入门(二)--如何用Idea运行我们的Spark项目

    用Idea搭建我们的Spark环境 用IDEA搭建我们的环境有很多好处,其中最大的好处,就是我们甚至可以在工程当中直接运行.调试我们的代码,在控制台输出我们的结果.或者可以逐行跟踪代码,了解spark ...

  3. 论GTA线上科技的使用原理及GTA线上模式P2P运行原理

    在正确使用科技之前首先要了解一下游戏科技的原理以及GTA线上模式p2p网络运行原理 关于p2p我建议用心去看一下,了解之后对于你之后上手2t或者玩别的gta科技有很大的帮助如果看不懂可以看我下面说的话 ...

  4. 下运行maven命令_如何在批处理模式下运行 top 命令

    可能已经知道 top 命令的绝大部分操作,除了很少的几个操作,如果我没错的话,批处理模式就是其中之一. -- Magesh Maruthamuthu(作者) top 命令 是每个人都在使用的用于 监控 ...

  5. spark sql 查看分区_Spark 3.0 中七个必须知道的 SQL 性能优化

    本文来自 IBM 东京研究院的高级技术人员 Kazuaki Ishizaki 博士在 Spark Summit North America 2020 的 <SQL Performance Imp ...

  6. 七. PHP模式设计----运行及描写叙述任务

    1. 解析器模式//解析器内容类 //用于存放表达式的运算结果,并且能依据传入的表达式返回当初记录的结果 class InterpreterContext{private $expressionsto ...

  7. spark任务shell运行_大数据系列:Spark的工作原理及架构

    介绍 本Apache Spark教程将说明Apache Spark的运行时架构以及主要的Spark术语,例如Apache SparkContext,Spark shell,Apache Spark应用 ...

  8. spark sql 本地调试_Spark精华问答|Spark的三种运行模式有何区别?

    戳蓝字"CSDN云计算"关注我们哦! Spark是一个针对超大数据集合的低延迟的集群分布式计算系统,比MapReducer快40倍左右,是hadoop的升级版本,Hadoop作为第 ...

  9. Spark详解(十一):Spark运行架构原理分析

    1. Spark 运行架构总体分析 1.1 总体介绍 Spark应用程序的运行架构基本上由三部分组成,包括SparkContext(驱动程序).ClusterManger(集群资源管理器)和Execu ...

最新文章

  1. Apache 架构师总结的 30 条架构原则
  2. 【Python刷题】_8
  3. selenium webdriver(python)_selenium、webdriver及浏览器的关系及对应版本安装
  4. php 传递类名,php 对象和数组序列化 serialize()返回字符串方便存储和传递 unserialize()反序列化 不丢失类型和结构...
  5. 计算机中年级排名怎么操作,智学网如何查看年级排名 智学网看年级排名方法【详解】...
  6. 使用Maven命令安装jar包到repo中
  7. 怎么用c语言写贪吃蛇贴吧,刚学C语言,想写一个贪吃蛇的代码
  8. linux系统管理之单机系统管理 - 超级用户和进程管理
  9. ecshop最全去版权
  10. 2017百度之星初赛:A-1001. 小C的倍数问题
  11. web前端网页设计作业_如何学习网页前端设计培训?
  12. XenServer 6.5实战系列之九:Creating a VM Template from a VM Snapshot
  13. 佳博GP-L80180 打印机 win7下 驱动方式 打印
  14. 一行python代码带你装B
  15. 电脑耳机有声外放无声的解决方法
  16. 计算机硬盘密码,电脑常识之--如何给移动硬盘[硬盘]加密码
  17. 【网络原理】详解访问域名 www.baidu.com 中的DNS解析过程
  18. 一起读论文 | 文本分类任务的BERT微调方法论
  19. 头文件防卫式声明/引用/static/extern/
  20. [python3] 发送微信 同步手机端

热门文章

  1. 关于JVM默认内存的增加
  2. vue中,format与value-format比较
  3. 访问订单列表时报错404
  4. Python综合练习:学生信息管理(文件版)
  5. 19软件班专业英语学期总结
  6. 【BZOJ1084】【codevs2454】最大子矩阵,DP
  7. 【BZOJ2456】mode,卡内存
  8. bzoj3198 [sdoi2013] spring 哈希挂表+容斥
  9. 2017.6.26 旅行 思考记录
  10. 2017.4.22 进制转换 思考记录