Spark学习之路(二)——Spark运行架构

1、Spark的基本概念:

  • RDD:弹性分布式数据集,是分布式内存的一个抽象概念,提供了一种高度受限的共享内存模型。(弹性:分区数量可变化,数据集可大可小;分布式:分布式地保存在多台机器内存中)
  • DAG:有向无环图,反应RDD之间的依赖关系。
  • Executor:执行器,是运行在工作节点(Worker Node)上的一个进程,负责运行任务,并为应用程序存储数据。
  • 应用:用户编写的Spark应用程序。
  • 任务:运行在Executor上的工作单元。
  • 作业:一个作业包含多个RDD及作用于相应RDD上的各种操作。
  • 阶段:作业调度的基本单位,一个作业分为多组任务,每组任务被称为“阶段”。

2、Spark的运行架构:

在这里插入图片描述
Spark运行架构包括集群资源管理器(Cluster Manager(YARN、Mesos))、运行作业任务的工作节点(Worker Node)、每个应用的任务控制节点(Driver)和每个工作节点上具体负责执行任务的执行器(Executor)。
Saprk与MapReduce计算框架相比,Spark采用Executor的优点:①利用多线程来执行具体的任务,减少任务的启动开销(MapReduce采用的是进程模型);②Executor中有一个BlockManager存储模块,会将内存和磁盘共同作为存储设备,可将计算的中间结果存储到该模块中,需要时可直接从该存储模块中的数据,避免读写到HDFS等文件系统里,因而有效减少了IO开销。在这里插入图片描述
1个应用 = 1个Driver + 1~N个Job
1个Job = 1~N个Stage
1个Stage = 1~N个Task

3、Spark运行基本流程:

①当提交一个Spark应用时,首先为这个应用构建基本的运行环境,即由任务控制节点(Driver)创建一个SparkContext,由SparkContext负责和资源管理器(Cluster Manager)的通信以及进行资源申请、任务分配和监控等。SparkContext会向资源管理器注册并申请运行Executor的资源。
②资源管理器为Executor分配资源,并启动Executor进程,Executor运行情况将随着“心跳”发送到资源管理器上。
③SparkContext根据RDD的依赖关系构建DAG图,DAG图交给DAG调度器(DAGScheduler)进行解析,将DAG图分解成多个阶段(每个阶段都是一个任务集),并且计算出各阶段之间的依赖关系,然后把一个个任务集提交给底层的任务调度器(TaskScheduler)进行处理;Executor向SparkContext申请任务,任务调度器将任务分发给Executor运行,同时SparkContext将应用程序代码发放给Executor。
④任务在Executor上运行,把执行结果反馈给任务调度器,然后反馈给DAG调度器,运行完毕后写入数据并释放所有资源。
在这里插入图片描述

4、Spark运行架构的特点:

  • 每个应用都有自己专属的Executor进程,并且该进程在应用运行期间一直驻留。Executor进程以多线程的方式运行任务;
  • Spark运行过程与资源管理器无关,只要能获取Executor进程并保持通信即可;
  • Executor上有一个BlockManager存储模块,类似于键值存储系统;
  • 任务采用了数据本地性和推测执行等优化机制(本地性:是尽量将计算移到数据所在的节点上进行)。

5、RDD执行过程:

①RDD读入外部数据源进行创建;②RDD经过一系列的转换操作,每次都产生不同的RDD,供下次转换操作使用;③RDD经行动操作进行处理,并输出到外部数据源。
在这里插入图片描述
优点:惰性调用、管道化、避免同步等待、不需要保存中间结果、每次操作变得简单。

6、RDD特性:

①高效的容错性:现有容错机制(数据复制、记录日志);血缘关系(通过RDD父子依赖关系重新计算得到丢失的分区来实现容错)。②中间结果持久化到内存,避免了不必要的读写磁盘开销。③存放的数据可以是Java对象,避免了不必要的对象序列化和反序列化开销。

7、RDD之间的依赖关系——宽依赖&窄依赖

  • 窄依赖:一个父RDD的分区对应于一个子RDD的分区,或多个父RDD的分区对应于一个子RDD的分区。
  • 宽依赖:一个父RDD的分区对应于一个子RDD的多个分区。
    在这里插入图片描述
    对于窄依赖的RDD,可以以流水线的方式计算所有的父分区,不会造成网络之间的数据混合;对于宽依赖的RDD,则通常伴随着Shuffle操作。在DAG中进行反向解析,遇到宽依赖就断开,遇到窄依赖就把当前的RDD加入到当前的阶段中;将窄依赖尽量划分在同一个阶段中,可以实现流水线计算。

8、RDD在Spark中的运行过程:

①创建RDD对象;②SparkContext负责计算RDD之间的依赖关系,构建DAG;③DAGScheduler负责把DAG分解成多个Stage,每个Stage包含多个Task,每个Task会被TaskScheduler分发给各个Worker Node上的Executor去执行。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值