大数据处理框架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/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,874评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,102评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,676评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,911评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,937评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,935评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,860评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,660评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,113评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,363评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,506评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,238评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,861评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,486评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,674评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,513评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,426评论 2 352

推荐阅读更多精彩内容