Spark2.x学习笔记:4、Spark程序架构与运行模式
来源:互联网 发布:电动汽车行业前景知乎 编辑:程序博客网 时间:2024/06/04 18:15
4、 Spark程序架构与运行模式
4.1 Spark程序最简架构
所有的Spark程序运行时,主要由两大类组件Driver和Excutor构成。
- 每个Spark程序运行时都有一个Driver,Driver是进程包含了运行所需要的CPU和内存等资源,Driver是我们应用程序main函数所在进程。比如当我们运行一个spark-shell时,就创建了一个driver 程序 。
- Executor可以有多个,其职责是运行给定的Spark 作业中的单个任务。Driver 必须协调各独立任务到executor 中,也就是由driver向集群申请资源,集群分配资源,启动executor。当excutor 启动后,它们会将自己注册到driver,所以driver 随时都能看到完整的executor视图。每个executor 表现为能执行任务和保存RDD 数据的进程。Executor 在Spark 应用开始的时候被启动一次,一般会在应用的整个生命周期都运行。Executor 有两个任务。一个是运行构成应用的任务并返回结果到driver。第二个是通过每个executor 中都存在的被称为块管理器(Block Manager)的服务为用户程序中缓存的RDD 提供内存存储。
- Task 是Spark 处理中的最小单元。Task 在executor 进程运行来计算和保存结果。
总结:Driver和Excutor都是进程,Task是Excutor进程下的线程。由driver向集群申请资源,集群分配资源,启动executor。driver将spark应用程序的代码和文件传送给executor。executor上运行task,运行完之后将结果返回给driver或者写入外界。
Spark运行模式可以分为三类:本地模式,独立模式,Spark on YARN/Mesos。
4.2 本地模式
前面2章的内容,Spark都是以本地模式运行。
在本地模式下,Spark应用程序以多线程形式直接在本地运行,方便程序调试。
本地模式有可以分为以下三种:
- local:只启动一个executor
- local[k]:启动k个executor
- local[*]:启动和CPU数相同的executor
在前面的spark-shell中日志中,可以看到输出信息master = local[*]
,表示spark-shell是在本地模式下运行,默认启动和CPU数相同的个executor。
4.3 独立模式
独立模式(standalone)表示Spark运行在独立的集群中,无依赖任何其他资源管理系统。
Standalone模式需要将Spark复制到集群中的每个节点,然后分别启动每个节点即可;Spark Standalone模式的集群由Master与Worker节点组成,程序通过与Master节点交互申请资源,Worker节点启动Executor运行。
当Driver中的SparkContext初始化的时候会提交程序给Master,Master如果接受该程序在Spark中运行的话,就会为当前的程序分配AppID,同时会分配具体的计算资源,需要特别注意的是,Master是根据当前程序提交的配置信息来给集群中的Worker发指令分配具体的计算资源,但是,Master发出指令后并不关心具体的资源是否已经分配,转来说Master是发指令后就记录了分配的资源,以后客户端再次提交其它的程序的话就不能使用该资源了。
提示:大多博客介绍的《Spark完全分布式环境搭建》实际上就是Spark独立模式(standalone)。而Spark运行模式最常用的是Spark on YARN/Mesos。
4.4 Spark on YARN/Mesos
从架构和应用角度上看,spark是一个仅包含计算逻辑的开发库(尽管它提供个独立运行的master/slave服务,但考虑到稳定后以及与其他类型作业的继承性,通常不会被采用),而不包含任何资源管理和调度相关的实现,这使得spark可以灵活运行在目前比较主流的资源管理系统上,典型的代表是mesos和yarn,我们称之为“spark on mesos”和“spark on yarn”。将spark运行在资源管理系统上将带来非常多的收益,包括:与其他计算框架共享集群资源;资源按需分配,进而提高集群资源利用率等。
(1)Spark on Mesos模式
Mesos是Apache下的开源分布式资源管理框架。由于血缘关系,Spark官方推荐这种模式,很多公司也采用该模式。Spark On Mesos模式参考:http://dongxicheng.org/apache-mesos/meso-architecture/
(2)Spark on YARN模式
Spark On YARN模式,这是一种最有前景的部署模式。
Spark on YARN框架解析:
- 基于YARN的Spark作业首先由Spark客户端生成作业信息,提交给ResourceManager,ResourceManager在某一个NodeManager汇报时把AppMaster分配给该NodeManager;
- 该NodeManager启动Spark AppMaster,Spark AppMaster 启动后初始化作业,然后向ResourceManager申请资源;
- 申请到相应资源后,Spark AppMaster通过RPC让对应若干个NodeManager启动相应的 Spark Executor,Spark Executor向Spark AppMaster汇报完成相应的任务。
- Spark客户端会通过Spark AppMaster获取作业运行状态。
(3)Client模式
在Spark on YARN/Mesos模式中,根据Spark Application的Driver是否在集群中运行,Spark on YARN/Mesos运行模式又可以分为Client模式和Cluster模式。
(4)Cluster模式
- Spark2.x学习笔记:4、Spark程序架构与运行模式
- Spark2.x学习笔记:18、Spark Streaming程序解读
- Spark2.x学习笔记:5、Spark On YARN模式
- Spark2.x学习笔记:17、Spark Streaming之HdfsWordCount 学习
- Spark2.x学习笔记:8、 Spark应用程打包与提交
- Spark2.x学习笔记:3、 Spark核心概念RDD
- Spark2.x学习笔记:7、Spark应用程序设计
- Spark2.x学习笔记:9、 Spark编程实例
- Spark2.x学习笔记:13、Spark SQL快速入门
- Spark2.x学习笔记:14、Spark SQL程序设计
- Spark2.x学习笔记:15、Spark SQL的SQL
- Spark2.x学习笔记:16、Spark Streaming入门实例NetworkWordCount
- Spark2.x学习笔记:1、Spark2.2快速入门(本地模式)
- Spark2.x学习笔记:6、在Windows平台下搭建Spark开发环境(Intellij IDEA)
- Spark2.x学习笔记:12、Shuffle机制
- [spark]-Spark2.x集群搭建与参数详解
- Spark2.1.1<Spark架构综述>
- Spark2.x学习笔记:11、RDD依赖关系与stage划分
- leetcode1. Two Sum
- kafka_2.11-0.8.2.1+java 生产消费程序demo示例
- 【九度OJ】1013:开门人和关门人
- 模仿优酷菜单
- 关于#pragma pack(n)引发的一系列问题
- Spark2.x学习笔记:4、Spark程序架构与运行模式
- stm32F1RTC
- python re
- html5-localstorage操作(小demo)
- 1的平方加2的平方....一直加到n的平方和是多少?有公式吗
- linux查看端口占用情况
- 文章标题
- C# 堆和栈的简述
- 【C语言】【unix c】信号阻塞和未决信号