大数据处理框架Spark简介

Spark是一个基于内存的用于处理、分析大数据的集群计算框架。Spark最初由美国加州大学伯克利分校(UC Berkelely)的AMP(Algorithm,Machines and People)实验室与2009年开发,是基于内存计算的大数据并行计算框架,可以用于构建大型的、低延迟的数据分析应用程序。

image.png

1.Spark概述

Spark是一个基于内存的用于处理、分析大数据的集群计算框架。它提供了一套简单的编程接口,从而使得应用程序开发者方便使用集群节点的CPU、内存、存储资源来处理大数据。以下是伯克利分校的Spark数据分析架构图:

5E61445330B6ED0DBFB0388D3C62360C.jpg

可以看出Spark是专注于数据的处理分析,而数据的存储还是要借助于Hadoop分布式文件系统HDFS、Amazon S3等实现,Spark生态系统可以与Hadoop生态系统有着很好的兼容。

2.Spark调度管理基本概念

2.1 Application

基于Spark的应用程序,由一个或多个作业组成。每个应用程序的执行涉及Driver Program和集群上的Executors两部分。

Spark application execution involves runtime concepts such as driver, executor, task, job, and stage. Understanding these concepts is vital for writing fast and resource efficient Spark programs.

2.2 Driver Program

Driver Program中包含了启动运行函数main函数和一个SparkContext类型的实例SparkContext实例是Application与Spark集群进行交互的唯一通道,是每一个Application的入口。Driver Program可以运行在任何可以提交作业的节点上(WorkMaster),并不是必须运行在Master节点上。在实际生产环境中为了减少Master的负担,尽量避免在Master上提交Driver Program。(Spark2.0之后将SparkContext改为SparkSession

spark driver.png

Spark applications run as independent sets of processes on a cluster, coordinated by the SparkContext object in your main program (called the driver program).

2.3 Worker

Worker是Spark集群中任何可以运行Application相关代码的节点。

2.4 Executor

ExecutorWorker上某个Application启动的一个进程,该进程负责执行Task任务并且负责将数据存储在内存或者磁盘中。Executor拥有CPU和内存资源,它是资源管理系统能够给予的最小单位。一个Worker节点上可能有多个Executor,但是每个Executor中仅执行一个Application对应的任务。也就是说,不同的Application通过Executor无法共享数据。

A process launched for an application on a worker node, that runs tasks and keeps data in memory or disk storage across them. Each application has its own executors.

2.5 Task

Task即任务,是被送到Executor上执行的工作单元。RDD中的每个分区都对应相应的Task,而每个Task对应于Executor中的一个线程,这使得系统更加轻量级,Task之间切换时间延迟更短。

A unit of work that will be sent to one executor

2.6 Job

Job即作业,是包含多个Task的并行计算,其与Application中的执行操作一一对应,也就是说Application每提交一个执行操作Spark对应生成一个Job

A parallel computation consisting of multiple tasks that gets spawned in response to a Spark action (e.g. save, collect); you'll see this term used in the driver's logs.

2.7 Stage

通常执行操作之前会有若干转换操作,而每个转换操作意味着父RDD到子RDD的转换,因此一个Job中通常涉及多个RDD。将Job中涉及的RDD进行分组,每组称为一个Stage

Each job gets divided into smaller sets of tasks called stages that depend on each other (similar to the map and reduce stages in MapReduce); you'll see this term used in the driver's logs.

2.8 DAG

DAGDirected Acyclic Graph(有向无环图)的简称,反映RDD之间的依赖关系。

2.9 Cluster Manager

是在集群上获取资源的外部服务。若是Standalone模式的Spark集群,Cluster Manager即为Master;若是基于YARN模式Spark集群,Cluster Manager即为Resource Manager

3.Spark架构设计

Spark运行架构包括集群资源管理器(Cluster Manager)、运行作业任务的工作节点(Worker Node)、每个应用的任务控制节点(Driver)和每个工作节点上负责具体任务的执行进程(Executor),资源管理器可以自带或MesosYARN。与Hadoop MapReduce计算框架相比,Spark所采用的Executor有两个优点:

  • 1、是利用多线程来执行具体的任务,减少任务的启动开销
  • 2、是Executor中有一个BlockManager存储模块,会将内存和磁盘共同作为存储设备,有效减少IO开销
driver sparkcontext clustermanager workers executors.png

一个Application由一个Driver和若干个Job构成,一个Job由多个Stage构成,一个Stage由多个没有Shuffle关系的Task组成。

当执行一个Application时,Driver会向集群管理器申请资源,启动Executor,并向Executor发送应用程序代码和文件,然后在Executor上执行Task,运行结束后,执行结果会返回给Driver,或者写到HDFS或者其他数据库中。

sparkapp sparkcontext master slaves.png

4.Spark运行基本流程

Spark运行的基本流程如下所示:

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

具体的运行流程图如下所示,结合两幅图进行学习:

An Introduction to Job execution flow in Apache Spark
图片.png

总体而言,Spark运行架构具有以下特点:

  • 1、每个Application都有自己专属的Executor进程,并且该进程在Application运行期间一直驻留。Executor进程以多线程的方式运行Task
  • 2、Spark运行过程与资源管理器无关,只要能够获取Executor进程并保持通信即可
  • 3、Task采用了数据本地性和推测执行等优化机制

参考资料

http://dblab.xmu.edu.cn/post/bigdataroadmap/

你可能感兴趣的:(大数据处理框架Spark简介)