Spark编程模型概述

1、概述
Spark是基于内存的迭代计算框架,适用于需要多次操作特定数据集的应用场合。
Spark是一张有向无环图(从一个点出发最终无法回到该点的一个拓扑),并对其进行优化。
Spark应用程序在集群上运行着独立、平行的操作集合,并且由主入口main函数,也可以称driver program(驱动程序)创建的SparkContext管理。
SparkContext可以连接到几种类型的集群管理中心(cluster manager)(Standalone, Mesos or YARN),而跨应用程序分配资源。
Spark 获得集群中的执行节点(executors),这些节点是并行计算和存储数据的进程集合。


2.整体流程

Spark的Driver Program(简称Driver)包含用户的应用程序

Driver完成task的解析和生成

Driver向Cluster Manager(集群资源管理器)申请运行task需要的资源

Cluster Manager(集群资源管理器)为task分配满足要求的节点,并在节点按照要求创建Executor

创建的Executor向Driver注册

Driver将spark应用程序的代码和文件传送给分配的executor

Executor运行task,运行完之后将结果返回给Driver或者写入HDFS或其他介质。

3.关键术语

Application
构建在spark上的应用程序,由driver program 和集群上的executor组成。是SparkContext的实例。每一个Application都运行在一组独立的Executor进程上。
Application jar
包含spark应用程序的jar。有时候用户需要创建一个包含其应用程序和其依赖的jar。该jar不包含hadoop和spark的jar。但是运行时需要。
Spark Context
由Driver负责创建,SparkContext的目的是为了准备Spark应用程序的运行环境。SparkContext负责资源的申请、任务分配和监控等。
当Executor运行结束后,由Driver负责关闭;
Driver program
运行应用程序的main函数以及创建SparkContext(Spark应用的入口,它负责和整个集群的交互,创建需要的变量,还包含集群的配置信息等)
将用户提交的job转换为DAG图(类似数据处理的流程图)
根据策略将DAG图划分为多个stage,根据分区从而生成一系列tasks,完成task的解析和生成
根据tasks要求向Cluseter Manager(资源管理器)申请资源
提交任务并检测任务状态
Cluster manager
获取集群资源的外部服务 (如 standalone manager, Mesos, YARN)
Deploy mode
driver进程运行模式的区别。在cluster模式下,框架在集群的内部启动driver。在client模式下,由submitter 在集群的外部启动driver。
Worker node
在集群中能够运行应用程序代码的任何节点。
每个Worker节点存在一个多个CoarseGrainedExecutorBackend进程,每个进程包含一个Executor对象,该对象持有一个线程池,每个线程执行一个Task。
Executor
 在Work Node上为应用程序运行而启动的进程。该进程运行各个task,并且在内存或者磁盘上存储数据,这些数据可以 供各个task访问。每个应用程序都有其自己的Executor。一个Executor对应一个JVM实例。一个Worker Node上可以有多个Executor。
Task
发送到executor上的work执行单元。一个Task对应JVM里面的一个线程,其调度和 管理又TaskScheduler负责。
Job
Job由Spark Action(如:save,collect)触发产生。由多个task组成的并行计算模型。 每个job则是一些stage序列的结果。在driver的日志文件中可以看到job的信息。
Stage
每个Job会拆分为多个Task,作为一个TaskSet,称为Stage;Stage的划分和调度是由DAGScheduler负责的。这些Stage互相依赖,如map stage和reduce stage。Stage分为Result Stage和Shuffle Map Stage。在driver的log中可以看到stage的信息。
RDD
表示已被分区、被序列化、不可变的、有容错机制的、能被并行操作的数据集合
RDD DAG
一组RDD构成的有向无环图。当RDD遇到一个action算子时候,将之前所有的算子形成一个rdd graph. 并把这个rdd graph转化为job提交到cluster中执行

DAGScheduler

根据Job构建基于Stage的DAG,划分Stage依据是RDD之间的依赖关系。

TaskScheduler

将TaskSet提交给Worker运行,每个Worker运行了什么Task于此处分配。同时还负责监控、汇报任务运行情况等。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值