部署模式概述

Spark支持的主要的三种分布式部署方式分别是standalone、spark on mesos和 spark on YARN

standalone模式

即独立模式,自带完整的服务,可单独部署到一个集群中,无需依赖任何其他资源管理系统。它是Spark实现的资源调度框架,其主要的节点有Client节点、Master节点和Worker节点。

yarn模式

yarn是统一的资源管理机制,在上面可以运行多套计算框架,如map
reduce、storm等根据driver在集群中的位置不同,分为yarn client和yarn cluster。

mesos模式

mesos是一个更强大的分布式资源管理框架,它允许多种不同的框架部署在其上,包括yarn。

基本上,Spark的运行模式取决于传递给SparkContextMASTER环境变量的值,个别模式还需要辅助的程序接口来配合使用,目前支持的Master字符串及URL包括:

Master URL   Meaning
local   在本地运行,只有一个工作进程,无并行计算能力。local[K] 在本地运行,有K个工作进程,通常设置K为机器的CPU核心数量。local[*] 在本地运行,工作进程数量等于机器的CPU核心数量。spark://HOST:PORT   以Standalone模式运行,这是Spark自身提供的集群运行模式,默认端口号: 7077。mesos://HOST:PORT  在Mesos集群上运行,Driver进程和Worker进程运行在Mesos集群上,部署模式必须使用固定值:--deploy-mode cluster。yarn-client    在Yarn集群上运行,Driver进程在本地,Work进程在Yarn集群上,部署模式必须使用固定值:--deploy-mode client。Yarn集群地址必须在HADOOP_CONF_DIRorYARN_CONF_DIR变量里定义。yarn-cluster 在Yarn集群上运行,Driver进程在Yarn集群上,Work进程也在Yarn集群上,部署模式必须使用固定值:--deploy-mode cluster。Yarn集群地址必须在HADOOP_CONF_DIRorYARN_CONF_DIR变量里定义。

用户在提交任务给Spark处理时,以下两个参数共同决定了Spark的运行方式。

· –master MASTER_URL :决定了Spark任务提交给哪种集群处理。
· –deploy-mode DEPLOY_MODE:决定了Driver的运行方式,可选值为Client或者Cluster。

standalone框架组成

standalone集群由三个不同级别的节点组成,分别是

  1. Master 主控节点,可以类比为董事长或总舵主,在整个集群之中,最多只有一个Master处在Active状态
  2. Worker 工作节点 ,这个是manager,是分舵主, 在整个集群中,可以有多个worker,如果worker为零,什么事也做不了
  3. Executor 干苦力活的,直接受worker掌控,一个worker可以启动多个executor,启动的个数受限于机器中的cpu核数

standalone部署模式下又分为client模式cluster模式,其中client模式下,driver和client运行于同一JVM中,不由worker启动,该JVM进程直到spark application计算完成返回结果后才退出。如下图所示。

而在cluster模式下,driverworker启动,client在确认spark application成功提交给cluster后直接退出,并不等待spark application运行结果返回。如下图所示

从部署图来进行分析,每个JVM进程在启动时的文件依赖如何得到满足。

  1. Master进程最为简单,除了spark jar包之外,不存在第三方库依赖
  2. DriverExecutor在运行的时候都有可能存在第三方包依赖,分开来讲

Driver比较简单,spark-submit在提交的时候会指定所要依赖的jar文件从哪里读取
Executor由worker来启动,worker需要下载Executor启动时所需要的jar文件,那么从哪里下载呢。

Standalone模式下任务运行过程

  1. 用户通过bin/spark-submit部署工具或者bin/spark-class启动应用程序的Driver进程,Driver进程会初始化SparkContext对象,并向Master节点进行注册。
  2. Master节点接受Driver程序的注册,检查它所管理的Worker节点,为该Driver程序分配需要的计算资源ExecutorWorker节点完成Executor的分配后,向Master报告Executor的状态。
  3. Worker节点上的ExecutorBackend进程启动后,向Driver进程注册。
  4. Driver进程内部通过DAG Schaduler,Stage Schaduler,Task Schaduler等过程完成任务的划分后,向Worker节点上的ExecutorBackend分配TASK
  5. ExecutorBackend进行TASK计算,并向Driver报告TASK状态,直至结束。
  6. Driver进程在所有TASK都处理完成后,向Master注销。

总结

Spark能够以standalone模式运行,这是Spark自身提供的运行模式,用户可以通过手动启动masterworker进程来启动一个独立的集群,也可以在一台机器上运行这些守护进程进行测试。standalone模式可以用在生产环境,它有效的降低了用户学习、测试Spark框架的成本。

standalone模式目前只支持跨应用程序的简单FIFO调度。然而,为了允许多个并发用户,你可以控制每个应用使用的资源的最大数。默认情况下,它会请求使用集群的全部CUP内核。

缺省情况下,standalone任务调度允许worker的失败(在这种情况下它可以将失败的任务转移给其他的worker)。但是,调度器使用master来做调度,这会产生一个单点问题:如果master崩溃,新的应用不会被创建。为了解决这个问题,可以zookeeper的选举机制在集群中启动多个master,也可以使用本地文件实现单节点恢复。

yarn集群模式

YARN总体上也Master/slave架构——ResourceManager/NodeManager

(RM)负责对各个NodeManager(NM)上的资源进行统一管理和调度。

container是资源分配和调度的基本单位,其中封装了机器资源,如内存、CPU、磁盘和网络等,每个任务会被分配一个Container,该任务只能在该Container中执行,并使用该Container封装的资源`。

NodeManager的作用则是负责接收并启动应用的container、而向RM回报本节点上的应用Container运行状态和资源使用情况。

ApplicationMaster与具体的Application相关,主要负责同ResourceManager协商以获取合适的Container,并跟踪这些Container的状态和监控其进度。

如下图所示为yarn集群的一般模型。

Spark在yarn集群上的部署方式分为两种,yarn client(driver运行在客户端)和yarn cluster(driver运行在master上),driver on master如下图所示。

(1) Spark Yarn Client向YARN中提交应用程序,包括Application Master程序、启动Application Master的命令、需要在Executor中运行的程序等;
(2) Resource manager收到请求后,在其中一个node manager中为应用程序分配一个container,要求它在container中启动应用程序的Application Master,Application master初始化sparkContext以及创建DAG Scheduler和Task Scheduler。
(3) Application master根据sparkContext中的配置,向resource manager申请container,同时,Application master向Resource manager注册,这样用户可通过Resource manager查看应用程序的运行状态
(4) Resource manager 在集群中寻找符合条件的node manager,在node manager启动container,要求container启动executor,
(5) Executor启动后向Application master注册,并接收Application master分配的task
(6) 应用程序运行完成后,Application Master向Resource Manager申请注销并关闭自己。

Driver on client如下图所示:

 (1) Spark Yarn Client向YARN的Resource Manager申请启动Application Master。同时在SparkContent初始化中将创建DAG Scheduler和TASK Scheduler等
(2) ResourceManager收到请求后,在集群中选择一个NodeManager,为该应用程序分配第一个Container,要求它在这个Container中启动应用程序的ApplicationMaster,与YARN-Cluster区别的是在该ApplicationMaster不运行SparkContext,只与SparkContext进行联系进行资源的分派
(3) Client中的SparkContext初始化完毕后,与Application Master建立通讯,向Resource Manager注册,根据任务信息向Resource Manager申请资源(Container)
(4) 当application master申请到资源后,便与node manager通信,要求它启动container
(5) Container启动后向driver中的sparkContext注册,并申请task
(6) 应用程序运行完成后,Client的SparkContext向ResourceManager申请注销并关闭自己。

Yarn-client和Yarn cluster模式对比

在Yarn-client(Driver on client)中,Application Master仅仅从Yarn中申请资源给Executor,之后client会跟container通信进行作业的调度。如果client离集群距离较远,建议不要采用此方式,不过此方式有利于交互式的作业。

总结

  • 主要就是分为standalone模式和yarn模式
  • 每个模式又可以分为client or cluster模式

Spark部署模式入门相关推荐

  1. Spark部署模式、任务提交

    Spark部署模式与任务提交 一.作业提交 1.1 spark-submit Spark 所有模式均使用 spark-submit 命令提交作业,其格式如下: ./bin/spark-submit \ ...

  2. 【大数据Spark系列】Spark部署模式与作业提交

    文章目录 Spark部署模式与作业提交 一.作业提交 1.1 spark-submit 1.2 deploy-mode 1.3 master-url 二.Local模式 三.Standalone模式 ...

  3. 编写一个脚本判断某个用户是否处在活动模式_大数据技术之Spark内核解析(二)Spark 部署模式...

    Spark支持3种集群管理器(Cluster Manager),分别为: 1. Standalone:独立模式,Spark原生的简单集群管理器,自带完整的服务,可单独部署到一个集群中,无需依赖任何其他 ...

  4. Spark内核解析之二:Spark 部署模式

    前言 Spark支持3种集群管理器(Cluster Manager),分别为: Standalone:独立模式,Spark原生的简单集群管理器,自带完整的服务,可单独部署到一个集群中,无需依赖任何其他 ...

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

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

  6. spark任务shell运行_Spark原理与实战(七)部署模式与运行机制

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

  7. spark封神之路(2)-spark运行模式

    本专栏系列视频教程 2 spark运行模式入门 1.官网地址 http://spark.apache.org/ 2.文档查看地址 https://spark.apache.org/docs/2.1.1 ...

  8. 一篇文章读懂:Spark运行模式

    Spark性能调优与原理分析 01.Spark运行模式 运行Spark的应用程序,其实仅仅需要两种角色,Driver和Executor.Driver负责将用户的应用程序划分为多个Job,分成多个Tas ...

  9. 【Spark】RDD入门编程实践(完整版)

    文章目录 1 RDD创建 1.1 从文件系统中加载数据 1.2 通过并行集合 2 RDD的操作 2.1 转换 2.1.1 filter 2.1.2 map 2.1.3 flatMap 2.1.4 gr ...

最新文章

  1. # 从零開始搭建Hadoop2.7.1的分布式集群
  2. 第六章-Hadoop优化与发展
  3. 【学习笔记】吴恩达机器学习 WEEK1
  4. 手机qq2008触屏版_天猫精灵 CC10 电池版体验:只卖 799 元的平板电脑,比 iPad 更适合老人小孩...
  5. floatmap 二维数组_用J中的多维数组进行Arrays.fill
  6. winform实现简单的计算器V1版本
  7. python教程--__init_.py的作用
  8. Django开发中常用的命令总结
  9. 链接聚合是将一组物理接口_500字描述华为VLAN聚合工作原理 你看懂了吗?
  10. 蓝桥杯 ALGO-117 算法训练 友好数
  11. 使用BI软件的好处有哪些
  12. php推荐位调用,推荐位数据循环调用
  13. ubuntu18安装wine QQ——2021.11.9
  14. 计算机显示器本身物理分辨率,电脑显示器常见的分辨率是多少
  15. 华为认证计算机英语,hcna考试是英文还是中文
  16. 常用软件过程模型-快速原型模型,快速原型模型有哪几种?各有何特点?
  17. ElementUI表格序号翻页后重置的解决办法
  18. 关于jupyter notebook闪退问题【我真真的够了,大家以后不要乱捣鼓电脑了,绝了】
  19. LeetCode——1834. 单线程 CPU(Single-Threaded CPU)[中等]——分析及代码(Java)
  20. 国防科技大学计算机考纲,国防科技大学2022年硕士研究生考试大纲-F1007雷达原理...

热门文章

  1. html调整div上下顺序,用了float后div块之间的上下顺序不对了_html/css_WEB-ITnose
  2. python教学查询,python基础教程之查询集 QuerySet和管理器Manager
  3. python转移矩阵_使用Python / Numpy中的单词构建转换矩阵
  4. EasyUI中的combobox下拉框自适应高度
  5. mysql 城市二级联动_MYSQL二级联动
  6. linux mint 安装内核,使用Ukuu在Ubuntu/Linux Mint上安装Linux Kernel 5.0的方法
  7. 安装redis k8s_K8S 生态周报| Docker v19.03.6-rc2 发布
  8. android 屏幕录制方案,Android录制屏幕的实现方法
  9. 约瑟夫环循环队列问题java_java 实现约瑟夫环
  10. 北京大学生物信息学(转录组)