Spark Core 的核心理论

1. Spark Core的核心功能

 (1)SparkContext:

   通常而言,DriverApplication 的执行与输出都是通过SparkContext完成的,在正式提交Application 之前,首先需要初始化SparkContext。SparkContext隐藏了网络通信、分布式部署、消息通信、存储能力、计算能力、缓存、测量系统、文件服务、web服务等内容。应用程序的开发者只需要使用SparkContext 提供的API完成功能开发。
  一个application ---> 一个或者多个job----->一个或者多个stage----->多个task
  SparkContext 内置的DAGScheduler 负责去创建Job,将一个application转化成为多个Job。(相应的Job的划分,是看应用程序中,执行了多少个action算子)
  SparkContext 内置的TaskScheduler :负责进行任务的派发,发送到相应的节点,执行task。

 (2)存储体系:

   Spark优先考虑使用节点的内存作为存储,当内存不足时槽考虑使用磁盘,这极大的减少了磁盘I/O,提升了执行的效率,使得Spark适用于实时计算、流式计算等场景。此外,Spark还提供了以内存为中心的高容错的分布式文件系统Tachyon ,供用户选择。

 (3)计算引擎:


   计算引擎由 SparkContext 中的 DAGScheduler、RDD 以及具体节点上的 Executor 负责执行的 Map 和 Reduce 任务组成。DAGScheduler 和 RDD 虽然位于 SparkContext 内部,但是在任务正式提交与执行之前将Job 中的 RDD 组织成有向无环图(简称 DAG)、并对 Stage 进 行划分决定了任务执行阶段任务的数量、迭代计算、shuffle 等过程。

 (4)部署模式:

   单节点不足以提供足够的存储计算能力,所以作为大数据处理的Spark在SparkContext的TaskScheduler 组件中提供了,Standalone 部署模式的实现和YANR、Mesos 等分布式资源管理系统的支持。除了可用于实际生产环境 的 Standalone、YARN、Mesos、kubernetes、Cloud 等部署模式外,Spark 还提供了 Local 模式和 local-cluster 模式便于开发和调试。
  Standalone、YARN、Mesos、kubernetes、Cloud:用于分布式生产场景。
  Local用于本地测试。

2. Spark 集群架构:


   Cluster Manager:spark集群的管理者,主要负责资源你的分配与管理。集群管理分配的资源属于一级分配,它将各个worker上的内存、CPU,等资源分配给应用程序,但是并不对executor的资源分配。目前:StandaloneYARN、Mesos、K8S,EC2 等都可以作为 Spark 的集群管理器。
   Master:spark集群的主节点。
   Worker:Spark集群的工作节点,对spark应用程序来说,由集群管理器分配得到资源的worker主要负责以下工作:创建 Executor,将资源和任务进一步分配给 Executor,同步资源信息给 Cluster Manager。
   Executor:执行计算任务的进程。主要负责执行任务,以及与 Worker、Driver Application 的信息同步。(主要是初始化一个线程池,调度其中的线程执行相应的计算任务)
   Driver Appication:客户端驱动程序,也可以理解为客户端的应用程序,用于将任务程序转化为RDD和DAG,并与Cluster Manager 进行通信与调度,其中SparkContext这个对象的创建就是在Driver Appication中。
  Deploy mode:部署的模式,在写好的代码,提交到集群中运行时:--master 指定资源的管理器。
其中常见的有yarn,在使用yarn的方式进行任务提交的时候,通常必须配置另一个参数:--deploy-mode client/cluster 有client和cluster两种。
client,表示就把Driver程序,放在提交的节点。
cluster 表示把Driver程序,放在集群中的任意节点。Driver程序决定了SparkContext对象在哪里创建。

各个角色之间的关系:
    
   Spark 计算平台有两个重要角色,Driver 和 executor,不论是 StandAlone 模式还是 YARN 模式, 都是 Driver 充当 Application 的 master 角色,负责任务执行计划生成和任务分发及调度; executor 充当 worker 角色,负责实际执行任务的 task,计算的结果返回 Driver。

3. Spark 编程模型:

 (1)spark应用程序从编写到输出的流程:


   - 用户使用SparkContext 提供的 API(常用的有 textFile、sequenceFile、runJob、stop 等) 编写Driver Application程序。
   - 使用sparkContext对象提交的用户应用程序,首先会使用 BlockManager 和 BroadcastManager 将任务的资源配置进行广播。然后由 DAGScheduler 将任务转换为 RDD 并组织成 DAG, DAG 还将被划分为不同的 Stage。最后由 TaskScheduler 借助 ActorSystem 将任务提交给集群管理器(ClusterManager)。
   - 集群管理器(ClusterManager)给任务分配资源,即将具体任务分配到 Worker 上,Worker 创建 Executor 来处理任务的运行。Standalone、YARN、Mesos、kubernetes、EC2 等都可以作 为 Spark 的集群管理器。

 (2)spark计算模型:


   RDD 可以看做是对各种数据计算模型的统一抽象,Spark 的计算过程主要是 RDD 的迭代计算 过程,如上图。RDD 的迭代计算过程非常类似于管道。分区数量取决于 partition 数量的设定,每个分区的数据只会在一个 Task 中计算。所有分区可以在多个机器节点的 Executor 上 并行执行。

原文地址:http://blog.51cto.com/14048416/2338050

时间: 2024-10-09 19:30:46

Spark Core 的核心理论的相关文章

Spark Core 的核心理论增强

1. spark的核心概念  (1)Application    表示应用程序,包含一个 Driver Program 和若干 Executor.(编写的spark代码)  (2)Driver program    Spark 中的 Driver 即运行上述 Application 的 main()函数并且创建 SparkContext,其中创建 SparkContext 的目的是为了准备 Spark 应用程序的运行环境.由 SparkContext 负责与 ClusterManager 通信,

急中生智~利用Spark core完成"ETL"!

背景介绍:今天接到老板分配的一个小任务:开发一个程序,实现从数据库中抽取数据并生成报表的功能(这是我们数据库审计平台准备上线的一个功能).既然是要生成报表,那么首先得有数据,于是便想到从该业务系统的测试环境抽取业务表的数据,然后装载至自己云主机上的Mysql中.本来以为只要"select ...into outfile"和"load data infile..."两个命令就可以搞定的,可是还是出了意外.测试环境导出的txt文件在云主机load时,报了"Ro

大数据技术之_19_Spark学习_02_Spark Core 应用解析+ RDD 概念 + RDD 编程 + 键值对 RDD + 数据读取与保存主要方式 + RDD 编程进阶 + Spark Core 实例练习

第1章 RDD 概念1.1 RDD 为什么会产生1.2 RDD 概述1.2.1 什么是 RDD1.2.2 RDD 的属性1.3 RDD 弹性1.4 RDD 特点1.4.1 分区1.4.2 只读1.4.3 依赖1.4.4 缓存1.4.5 CheckPoint第2章 RDD 编程2.1 RDD 编程模型2.2 RDD 创建2.2.1 由一个已经存在的 Scala 集合创建,即集合并行化(测试用)2.2.2 由外部存储系统的数据集创建(开发用)2.3 RDD 编程2.3.1 Transformatio

大数据技术之_27_电商平台数据分析项目_02_预备知识 + Scala + Spark Core + Spark SQL + Spark Streaming + Java 对象池

第0章 预备知识0.1 Scala0.1.1 Scala 操作符0.1.2 拉链操作0.2 Spark Core0.2.1 Spark RDD 持久化0.2.2 Spark 共享变量0.3 Spark SQL0.3.1 RDD.DataFrame 与 DataSet0.3.2 DataSet 与 RDD 互操作0.3.3 RDD.DataFrame 与 DataSet 之间的转换0.3.4 用户自定义聚合函数(UDAF)0.3.5 开窗函数0.4 Spark Streaming0.4.1 Dst

【Spark Core】任务运行机制和Task源代码浅析1

引言 上一小节<TaskScheduler源代码与任务提交原理浅析2>介绍了Driver側将Stage进行划分.依据Executor闲置情况分发任务,终于通过DriverActor向executorActor发送任务消息. 我们要了解Executor的运行机制首先要了解Executor在Driver側的注冊过程.这篇文章先了解一下Application和Executor的注冊过程. 1. Task类及其相关 1.1 Task类 Spark将由Executor运行的Task分为ShuffleMa

spark core源码分析6 Spark job的提交

本节主要讲解SparkContext的逻辑 首先看一个spark自带的最简单的例子: object SparkPi { def main(args: Array[String]) { val conf = new SparkConf().setAppName("Spark Pi") val spark = new SparkContext(conf) val slices = if (args.length > 0) args(0).toInt else 2 val n = ma

【Spark Core】任务执行机制和Task源码浅析1

引言 上一小节<TaskScheduler源码与任务提交原理浅析2>介绍了Driver侧将Stage进行划分,根据Executor闲置情况分发任务,最终通过DriverActor向executorActor发送任务消息. 我们要了解Executor的执行机制首先要了解Executor在Driver侧的注册过程,这篇文章先了解一下Application和Executor的注册过程. 1. Task类及其相关 1.1 Task类 Spark将由Executor执行的Task分为ShuffleMap

TypeError: Error #1034: 强制转换类型失败:无法将 mx.controls::[email&#160;protected] 转换为 spark.core.IViewport。

1.错误描述 TypeError: Error #1034: 强制转换类型失败:无法将 mx.controls::[email protected] 转换为 spark.core.IViewport. at mx.binding::Binding/defaultDestFunc()[E:\dev\4.0.0\frameworks\projects\framework\src\mx\binding\Binding.as:270] at Function/http://adobe.com/AS3/2

这些组件分别处理Spark Core提供内存计算框架

Spark不仅支持Scala编写应用程序,而且支持Java和Python等语言进行编写,特别是Scala是一种高效.可拓展的语言,能够用简洁的代码处理较为复杂的处理工作. l通用性强 Spark生态圈即BDAS(伯克利数据分析栈)包含了Spark Core.Spark SQL.Spark Streaming.MLLib和GraphX等组件,这些组件分别处理Spark Core提供内存计算框架.SparkStreaming的实时处理应用.Spark SQL的即席查询.MLlib或MLbase的机器