Spark部署模式入门
部署模式概述
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
的运行模式取决于传递给SparkContext
的MASTER
环境变量的值,个别模式还需要辅助的程序接口来配合使用,目前支持的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
集群由三个不同级别的节点组成,分别是
- Master 主控节点,可以类比为董事长或总舵主,在整个集群之中,最多只有一个
Master
处在Active
状态 - Worker 工作节点 ,这个是manager,是分舵主, 在整个集群中,可以有多个
worker
,如果worker为零,什么事也做不了 - Executor 干苦力活的,直接受worker掌控,一个worker可以启动多个
executor
,启动的个数受限于机器中的cpu核数
在standalone
部署模式下又分为client模式
和cluster模式
,其中client模式
下,driver和client
运行于同一JVM
中,不由worker启动,该JVM进程
直到spark application
计算完成返回结果后才退出。如下图所示。
而在cluster
模式下,driver
由worker
启动,client
在确认spark application
成功提交给cluster
后直接退出,并不等待spark application
运行结果返回。如下图所示
从部署图来进行分析,每个JVM进程
在启动时的文件依赖如何得到满足。
Master进程
最为简单,除了spark jar包之外,不存在第三方库依赖Driver
和Executor
在运行的时候都有可能存在第三方包依赖,分开来讲
Driver比较简单,spark-submit在提交的时候会指定所要依赖的jar文件从哪里读取
Executor由worker来启动,worker需要下载Executor启动时所需要的jar文件,那么从哪里下载呢。
Standalone模式下任务运行过程
- 用户通过
bin/spark-submit
部署工具或者bin/spark-class
启动应用程序的Driver进程,Driver
进程会初始化SparkContext
对象,并向Master
节点进行注册。 Master
节点接受Driver程序
的注册,检查它所管理的Worker
节点,为该Driver
程序分配需要的计算资源Executor
。Worker
节点完成Executor
的分配后,向Master
报告Executor
的状态。Worker节点
上的ExecutorBackend进程
启动后,向Driver进程
注册。Driver进程
内部通过DAG Schaduler,Stage Schaduler,Task Schaduler
等过程完成任务的划分后,向Worker节点上的ExecutorBackend
分配TASK
。ExecutorBackend
进行TASK
计算,并向Driver
报告TASK状态,直至结束。Driver
进程在所有TASK
都处理完成后,向Master注销。
总结
Spark
能够以standalone模式
运行,这是Spark自身提供的运行模式,用户可以通过手动启动master
和worker
进程来启动一个独立的集群,也可以在一台机器上运行这些守护进程进行测试。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
相关,主要负责同ResourceManage
r协商以获取合适的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部署模式入门相关推荐
- Spark部署模式、任务提交
Spark部署模式与任务提交 一.作业提交 1.1 spark-submit Spark 所有模式均使用 spark-submit 命令提交作业,其格式如下: ./bin/spark-submit \ ...
- 【大数据Spark系列】Spark部署模式与作业提交
文章目录 Spark部署模式与作业提交 一.作业提交 1.1 spark-submit 1.2 deploy-mode 1.3 master-url 二.Local模式 三.Standalone模式 ...
- 编写一个脚本判断某个用户是否处在活动模式_大数据技术之Spark内核解析(二)Spark 部署模式...
Spark支持3种集群管理器(Cluster Manager),分别为: 1. Standalone:独立模式,Spark原生的简单集群管理器,自带完整的服务,可单独部署到一个集群中,无需依赖任何其他 ...
- Spark内核解析之二:Spark 部署模式
前言 Spark支持3种集群管理器(Cluster Manager),分别为: Standalone:独立模式,Spark原生的简单集群管理器,自带完整的服务,可单独部署到一个集群中,无需依赖任何其他 ...
- spark任务shell运行_Spark原理与实战之部署模式与运行机制
前言: Spark的运行模式指的是Spark应用程序以怎样的方式运行,单节本地点运行还是多节点集群运行,自己进行资源调度管理还是依靠别人进行调度管理.Spark提供了多种多样,灵活多变的部署模式. 一 ...
- spark任务shell运行_Spark原理与实战(七)部署模式与运行机制
导读:Spark的运行模式指的是Spark应用程序以怎样的方式运行,单节本地点运行还是多节点集群运行,自己进行资源调度管理还是依靠别人进行调度管理.Spark提供了多种多样,灵活多变的部署模式. 作者 ...
- spark封神之路(2)-spark运行模式
本专栏系列视频教程 2 spark运行模式入门 1.官网地址 http://spark.apache.org/ 2.文档查看地址 https://spark.apache.org/docs/2.1.1 ...
- 一篇文章读懂:Spark运行模式
Spark性能调优与原理分析 01.Spark运行模式 运行Spark的应用程序,其实仅仅需要两种角色,Driver和Executor.Driver负责将用户的应用程序划分为多个Job,分成多个Tas ...
- 【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 ...
最新文章
- # 从零開始搭建Hadoop2.7.1的分布式集群
- 第六章-Hadoop优化与发展
- 【学习笔记】吴恩达机器学习 WEEK1
- 手机qq2008触屏版_天猫精灵 CC10 电池版体验:只卖 799 元的平板电脑,比 iPad 更适合老人小孩...
- floatmap 二维数组_用J中的多维数组进行Arrays.fill
- winform实现简单的计算器V1版本
- python教程--__init_.py的作用
- Django开发中常用的命令总结
- 链接聚合是将一组物理接口_500字描述华为VLAN聚合工作原理 你看懂了吗?
- 蓝桥杯 ALGO-117 算法训练 友好数
- 使用BI软件的好处有哪些
- php推荐位调用,推荐位数据循环调用
- ubuntu18安装wine QQ——2021.11.9
- 计算机显示器本身物理分辨率,电脑显示器常见的分辨率是多少
- 华为认证计算机英语,hcna考试是英文还是中文
- 常用软件过程模型-快速原型模型,快速原型模型有哪几种?各有何特点?
- ElementUI表格序号翻页后重置的解决办法
- 关于jupyter notebook闪退问题【我真真的够了,大家以后不要乱捣鼓电脑了,绝了】
- LeetCode——1834. 单线程 CPU(Single-Threaded CPU)[中等]——分析及代码(Java)
- 国防科技大学计算机考纲,国防科技大学2022年硕士研究生考试大纲-F1007雷达原理...
热门文章
- html调整div上下顺序,用了float后div块之间的上下顺序不对了_html/css_WEB-ITnose
- python教学查询,python基础教程之查询集 QuerySet和管理器Manager
- python转移矩阵_使用Python / Numpy中的单词构建转换矩阵
- EasyUI中的combobox下拉框自适应高度
- mysql 城市二级联动_MYSQL二级联动
- linux mint 安装内核,使用Ukuu在Ubuntu/Linux Mint上安装Linux Kernel 5.0的方法
- 安装redis k8s_K8S 生态周报| Docker v19.03.6-rc2 发布
- android 屏幕录制方案,Android录制屏幕的实现方法
- 约瑟夫环循环队列问题java_java 实现约瑟夫环
- 北京大学生物信息学(转录组)