【概述】spark(一):spark特点、知识范畴、spark架构、任务提交流程、支持哪些运行环境

学习或者复习一门技术之前需要认识这个技术:包括这个技术的特点、架构、它是怎么运作的、它能在哪里运行等;
然后可以学习怎么使用它开放的API对一些业务场景进行开发实现;
其次对于某些特定场景我们可能使用到一些高级特性。
 
本文先带大家对spark有一个整体概念上的认识和了解。

一. spark概述

1. spark的特点

a. spark是继Hadoop的MapReduce之后,最具影响的大数据框架之一。

与Hadoop相比,Spark基于Mapreduce将计算的中间结果内存化并引入DAG(有向无环图)执行引擎。

  1. 是对Mapreduce的重大改进,中间数据压缩保存到内存,运算时间会比磁盘低两个数量级。
  2. 是对RDD的建模,描述了RDD之间的依赖关系。

b. Spark生态系统是以Spark core(RDD)为核心提供计算框架。

无论是Spark SQL、Spark Streaming、GraphX还是MLlib,都可以使用Spark核心API处理问题,它们的方法几乎是通用的,处理的数据也可以共享,对数据的无缝集成大大提高了灵活性。
 
Spark最核心的数据结构只有一种:RDD(Resilient Distributed Dataset,弹性分布式数据集),从API上来说,它和普通集合几乎完全相同,但是它却抽象了分布式文件系统中的文件,可以说RDD是一个分布式的集合。

c. 微批的流计算

Spark Streaming将流式计算分解成一系列短小的批处理计算,并且提供高可靠和吞吐量服务。

d. 函数式编程思想

函数式接口
Spark API同样提供了map、reduce、filter等算子(operator)来构建数据处理管道,用户的业务逻辑以高阶函数的形式定义,用户通过高阶函数与算子之间的组合,像搭积木一样,构建了整个作业的执行计划。
 
惰性求值
Spark的算子分为两类,转换(transform)算子和行动(action)算子,只有行动算子才会真正触发整个作业提交并运行。
 
容错
spark job由一个个算子结合起来,算子之间的依赖称为血缘。通过保存血缘关系和上游数据集,当下游出现问题时,可利用这两者进行计算恢复。这利用了函数(血缘依赖)在给定参数(上游数据)的情况下一定能得到既定输出(下游数据)的特性。

 

2. spark的知识范畴

在这里插入图片描述
 
 

二. spark架构

1. spark的架构抽象

官网:Cluster Mode Overview

Spark是主从架构,如下图是spark高层次的架构抽象。
在Spark的架构中,Driver主要负责作业调度工作,Executor主要负责执行具体的作业计算任务,ClusterManager主要负责资源管理和调度。
在这里插入图片描述

Spark applications run as independent sets of processes on a cluster, coordinated by the SparkContext object in your main program (called the driver program).
 
Specifically, to run on a cluster, the SparkContext can connect to several types of cluster managers (either Spark’s own standalone cluster manager, Mesos, YARN or Kubernetes), which allocate resources across applications. Once connected, Spark acquires executors on nodes in the cluster, which are processes that run computations and store data for your application. Next, it sends your application code (defined by JAR or Python files passed to SparkContext) to the executors. Finally, SparkContext sends tasks to the executors to run.

 

2. spark的成员角色与相关基础概念

  1. Driver:

用于创建运行时环境和管理任务执行,具体的:
 
运行Application的main函数并创建SparkContext,创建SparkContext的目的是为了准备Spark应用程序的运行环境。SparkContext负责与ClusterManager通信,进行资源申请、任务的分配和监控等,当Executor部分运行完毕后,Driver同时负责将SparkContext关闭。

  1. Executor:

运行Spark的Task。
worker节点上的一个进程, 该进程负责运行某些Task, 并且负责将数据存到内存或磁盘上,每个Application都有各自独立的一批Executor。

  1. Cluter Manager:

指的是在集群上获取资源的外部服务。目前有四种类型:

  • Standalone : spark原生的资源管理,由Master负责资源的分配
  • Apache Mesos:与hadoop MR兼容性良好的一种资源调度框架
  • Hadoop Yarn: 主要是指Yarn中的ResourceManager
  • K8s
  1. Task

spark job的工作单元:
被送到某个Executor上的工作单元,多个Task组成一个Stage,而Task的调度和管理等是由TaskScheduler负责

  1. Stage

每个Job会被拆分成多组Task,作为一个TaskSet称为Stage。
Stage的划分和调度由DAGScheduler来负责的,Stage的边界就是发生shuffle的地方。

  1. DAGScheduler

根据Job构建基于Stage的DAG(Directed Acyclic Graph有向无环图),并提交Stage给TaskScheduler。

  1. TaskScheduler

调度、管理taskSet:
将TaskSET提交给worker运行,每个Executor运行什么Task就是在此处分配的.
TaskScheduler维护所有TaskSet,当Executor向Driver报告心跳时,TaskScheduler会根据资源剩余情况分配相应的Task。另外TaskScheduler还维护着所有Task的运行标签,重试失败的Task。

 

三. Spark支持的运行模式

1. standalone模式

standalone是Spark实现的资源调度框架,由客户端、Master节点和多个Worker节点组成。 其中SparkContext既可以运行在Master节点上,也可以运行在客户端。

在这里插入图片描述

任务提交流程:
在这里插入图片描述
大概的流程是:

  • Client提交任务,启动SparkContext并向Master注册job,Master返回资源列表给client,并通知Worker创建Executor,Executor创建完毕之后反向注册给Master和Driver,Driver发送任务给Executor,Executor开始执行任务
  • Executor(CoarseGrainedExecutorBackend)把任务的执行状态发送给SparkContext,如果有taskSet执行完毕SparkContext会继续发送其他任务集;
  • 当job运行完之后,SparkContext进行资源回收。

上面的描述简化了一些角色的活动过程,接下来继续查看:
创建sparkContext的过程包括:

初始化DAGScheduler 和 TaskScheduler调度器,SparkDeploySchedulerBackend,以及在其内部启动DriverEndpoint 和 ClientEndpoint。
其中:

  • ClientEndpoint:用于向Master注册应用程序
  • DriverEndpoint:用于发送任务给work中的executor
  • DAGScheduler:(根据宽依赖)将job划分成多个Stage,每个Stage创建一个TaskSet,并将TaskSet提交给TaskScheduler
  • TaskScheduler:用于接收TaskSet,并发送给Executor。如果某个任务失败, 任务调度器负责重新分配该任务的计算。

Executor的创建和执行:

Master返回资源列表给client端后通知Worker中的WorkerEndpoint创建CoarseGrainedExecutorBackend进程。
该进程会创建执行容器Executor,在Executor运行过程中 CoarseGrainedExecutorBackend(粗粒度执行后端)汇报执行情况给SparkContext。

 

2. spark on yarn

在这里插入图片描述
大致流程:

  • 客户端提交应用到RM,RM找一个节点创建ApplicationMaster;接着AM向RM申请资源,RM返回资源列表,并选取nodemanager在其Container中创建Spark执行器对象Executor。
  • Executor创建好后,通知AM可以将任务发送过来,AM分解任务并发送给Executor,开始执行任务。
  • Executor向AM汇报任务的执行情况,当任务执行结束之后,AM申请注销资源。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 答:Spark提交到Yarn的流程主要包括以下几个步骤:1.运行Spark应用程序;2.将Spark应用程序打包成jar或zip文件;3.使用spark-submit命令提交应用程序到Yarn;4.Yarn接收应用程序并将其分配给节点;5.Yarn调度器负责调度应用程序;6.Yarn监控应用程序的执行;7.应用程序结束时,Yarn将结果发送给用户。 ### 回答2: 将Spark程序提交到YARN的流程如下: 1. 准备YARN集群:首先需要搭建一个YARN集群,包括至少一个YARN管理节点(ResourceManager)和多个YARN工作节点(NodeManager)。ResourceManager负责整个集群的资源分配和任务调度,NodeManager负责执行具体的计算任务。 2. 准备Spark程序和配置:将要运行Spark程序编写好,并进行必要的配置。Spark程序可以使用Scala、Java或Python等语言编写,配置文件可以设置Spark应用的相关参数,如内存分配、并行度等。 3. 打包Spark应用程序:将编写好的Spark程序及其依赖库打包成一个可执行的Jar包,以方便在YARN上运行。 4. 提交Spark应用到YARN:使用YARN提供的命令或客户端工具,将打包好的Spark应用程序提交到YARN集群。在提交时,需要指定应用程序的配置信息,如所需的资源、启动脚本、提交人等。 5. YARN任务调度:一旦Spark应用程序被提交到YARN集群,YARN的ResourceManager会对其进行资源分配和任务调度。根据应用程序的需求,ResourceManager会为其分配合适的资源,并确定在哪些节点上启动相应的任务。 6. 启动Spark任务:YARN的NodeManager接收到Spark任务后,负责启动Executor进程。每个Executor进程是一个独立的Java进程,负责执行Spark应用程序的具体计算任务。 7. 执行Spark应用程序:一旦Executor进程启动,Spark应用程序开始在YARN集群上执行。Executor会根据应用程序的逻辑,调度并执行具体的计算任务,包括读取数据、转换处理等操作。 8. 监控和管理:在Spark应用程序执行的过程中,可以通过YARN提供的监控工具来查看任务运行状态、资源使用情况等。此外,还可以通过YARN的管理命令对任务进行调度、监控和管理。 9. 完成和收集结果:一旦Spark应用程序执行完毕,可以从YARN集群上收集各个任务的输出结果。根据需要,可以将结果存储到HDFS、本地文件系统或其他存储介质中。 以上是将Spark程序提交到YARN的基本流程,通过YARN的资源管理和任务调度,可以有效地管理和利用集群资源,并实现分布式的Spark计算。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

roman_日积跬步-终至千里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值