Spark Core 的核心理论增强

1. spark的核心概念

 (1)Application

   表示应用程序,包含一个 Driver Program 和若干 Executor。(编写的spark代码)

 (2)Driver program

   Spark 中的 Driver 即运行上述 Application 的 main()函数并且创建 SparkContext,其中创建 SparkContext 的目的是为了准备 Spark 应用程序的运行环境。由 SparkContext 负责与 ClusterManager 通信,进行资源的申请,任务的分配和监控等。程序执 行完毕后关闭 SparkContext。

 (3)Cluster Manager

   在 Standalone 模式中即为 Master(主节点),控制整个集群,监控 Worker。 在 YARN 模式中为资源管理器(resourcemanager)。

 (4)Spark Context

   整个应用的上下文,控制应用程序的生命周期,负责调度各个运算资源, 协调各个 Worker 上的 Executor。初始化的时候,会初始化 DAGScheduler 和 TaskScheduler 两个核心组件。

 (5)RDD

   Spark 的基本计算单元,一组 RDD 可形成执行的有向无环图 RDD Graph。

 (6)DAGScheduler

   将application拆分成多个job,对于每一个job构建成一个DAG,将这个DAG划分成多个stage,最终把stage提交给TaskScheduler。

 (7)TaskScheduler

  将DAGScheduler提交过来的stage,拆分成多个task集合,然后将 TaskSet 提交给 Worker(集群)运行,每个 Executor 运行什么 Task 就 是在此处分配的。

 (8)Worker

  集群中可以运行 Application 代码的节点。在 Standalone 模式中指的是通过 slave 文件配置的 worker 节点,在 Spark on Yarn 模式中指的就是 NodeManager 节点。(即运行Executor的节点)

 (9)Executor

  某个 Application 运行在 Worker 节点上的一个进程,该进程负责运行某些 task, 并且负责将数据存在内存或者磁盘上。在 Spark on Yarn 模式下,其进程名称为 CoarseGrainedExecutorBackend,一个 CoarseGrainedExecutorBackend 进程有且仅有一个 executor 对象,它负责将 Task 包装成 taskRunner,并从线程池中抽取出一个空闲线程运行 Task, 这样,每个 CoarseGrainedExecutorBackend 能并行运行 Task 的数据就取决于分配给它的 CPU 的个数。

 (10)Stage

  每个 Job 会被拆分很多组 Task,每组作为一个 TaskSet,其名称为 Stage

 (11)Job

包含多个 Task 组成的并行计算,是由 Action 行为触发的,触发一次action,就是一个job

 (12)SparkEnv

  线程级别的上下文,存储运行时的重要组件的引用。SparkEnv 内创建并包含 如下一些重要组件的引用:
   MapOutPutTracker:负责 Shuffle 元信息的存储。
   BroadcastManager:负责广播变量的控制与元信息的存储。
   MapOutPutTracker:负责存储管理、创建和查找块.
   MetricsSystem:监控运行时性能指标信息。
   SparkConf:负责存储配置信息。

2. spark的任务运行流程

 (1)基本运行流程:


第一步(构建DAG):使用算子操作RDD进行各种transformation 操作,最后通过action算子触发spark的作业提交。提交后,spark会根据转化过程中所产生的RDD之间依赖关系构建DAG有向无环图。
第二步(DAG的切割):DAG 切割主要根据 RDD 的依赖是否为宽依赖来决定切割节点,当遇到宽依赖就将任务划分 为一个新的调度阶段(Stage)。每个 Stage 中包含一个或多个 Task。这些 Task 将形成任务集 (TaskSet),提交给底层调度器进行调度运行。
第三步(任务调度):每一个 Spark 任务调度器只为一个 SparkContext 实例服务。当任务调度器收到任务集后负责 把任务集以 Task 任务的形式分发至 Worker 节点的 Executor 进程中执行,如果某个任务失败, 任务调度器负责重新分配该任务的计算。
第四步(执行任务):当 Executor 收到发送过来的任务后,将以多线程(会在启动 executor 的时候就初始化好了 一个线程池)的方式执行任务的计算,每个线程负责一个任务,任务结束后会根据任务的类 型选择相应的返回方式将结果返回给任务调度器。(cluster manager)。

 (2)大体运行流程:

  • 初始化sparkcontext,sparkcontext向资源管理器注册并申请运行executor资源
  • 资源管理器分配executor资源并启动,Executor 运行情况将 随着心跳发送到资源管理器上
  • Executor向driver反向注册,告知driver资源准备完毕,可以执行任务
  • sparkcontext构建RDD,然后通过DAGscheduler将RDD切分成多个stage,然后分装成为taskset交给task schdeluder。
  • taskscheduler向worker中的executor发送task 执行相应的任务。

    补充:spark on yarn 中的client/cluster的区别?
    spark on yarn -- cluster

    spark on yarn -- client

    注意:在spark作业运行的过程中,一般情况下,会有大量的数据在driver和集群中进行交互,所有如果使用client模式,则会在程序运行的过程中,造成大量的网络数据传输,造成网络流量的激增,而基于cluster模式,因为driver和appmaster在一个节点上,driver本身就在集群中,所以数据的传输也是在集群内部中完成,网络传输压力相对较小。

      (3)详细运行流程:


    根据上图的信息:
       - 启动spark集群,通过spark-shell启动spark集群中的相应的master和worker。master是集群的管理者,清楚集群中的从节点的个数、从节点的资源情况,以及从节点是否存活。
       - worker节点的注册,当worker进程启动之后,向master进程发送注册消息,所以worker是一个基于AKKA actor的事件驱动模型,master同样也是。worker注册成功之后,也会向master发送心跳,监听主节点是否存在,以及汇报心跳。
       -driver提交作业:driver向spark集群提交作业,就是向master提交作业,注册spark应用需要的资源,说白了就是向master申请应用程序运行的资源。
       - master分配资源:当driver提交作业请求之后,mater接收到相应的请求,会向worker节点指派相应的作业任务,就是在worker节点中启动相应的executor进程,executor维护一个线程池,线程池中的线程是真正去执行task任务。
       - worker启动executor:当worker节点接收到master启动executor之后,会相应的启动一个或者多个executor,并向master汇报启动成功信息,表示可以接收任务。
       - 向 driver的反向注册:当worker节点启动executor成功之后,会向driver反向注册,告诉driver哪些executor可以接收任务,执行spark任务。
       - driver接收worker的注册:driver接收到worker的注册信息之后,就初始化相应的 executor_info信息,根据worker发送过来的executorid,可以确定,哪些executor对自己服务。
       - driver初始化sparkcontext:sparkcontext构建RDD,然后通过DAGscheduler将RDD切分成多个stage,然后分装成为taskset交给task schdeluder。
       - taskscheduler向worker中的executor发送task执行相应的任务
       - executor执行任务:当executor进程接收到了driver发送过来的taskset之后,进行反序列化然后将这些task分装到一个叫taskrunner的线程中,然后放入到本地的线程池中调度相应的作业执行。当执行完毕之后,将所得到的结果进行落地(返回给driver/打印输出/保存到本地/保存到hdfs...)

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

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

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

Spark Core 的核心理论

1. Spark Core的核心功能  (1)SparkContext:    通常而言,DriverApplication 的执行与输出都是通过SparkContext完成的,在正式提交Application 之前,首先需要初始化SparkContext.SparkContext隐藏了网络通信.分布式部署.消息通信.存储能力.计算能力.缓存.测量系统.文件服务.web服务等内容.应用程序的开发者只需要使用SparkContext 提供的API完成功能开发.  一个application ---

急中生智~利用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的机器