Spark中的一些基本概念,及运行流程

1 Spark中的一些基本概念

话不多说,先来一个官网地址:链接
Spark中的一些基本概念,及运行流程
1. Application:用户基于spark构建的应用程序,由一个Driver和多个Excutor组成。
2. Application jar:将用户基于spark的代码打包成的jar包。
3. Driver program:运行application的main()函数并自动创建SparkContext。通常SparkContext 代表driver program。
4. Cluster Manager:负责获取集群资源的外部服务(如standalone模式的Master和yarn模式的RM)。
5. Deploy mode:运行模式,如standalone模式,yarn模式,local模式,mesos模式。
6. Excutor:为某个Application运行在worker node 上的一个进程(如standalone模式的Worker和yarn模式的NM)。该进程负责运行task并负责将数据存储在内存或者硬盘上,每个application 都有自己独立的 executors。
7. Task:executor上执行的最小的工作单元。
8. Job:可以被拆分成多个task并行计算的单元,一般为spark action 触发的一次执行作业。
9. Stage:一个job被拆分成许多的Stage,一个Stage包含多个Task,Stage是提交作业的最小单位,Stage之间彼此依赖。

总结:1个action会触发1个job,1个job包含n个stage,每个stage包含n个task,1个executor上执行n个task,一个Application是由一个driver 程序和n个 executor组成。提交的时候,通过Cluster Manager和Deploy mode控制。

2 Spark运行流程

Spark中的一些基本概念,及运行流程
1) 构建Spark Application的运行环境(启动SparkContext),SparkContext向资源管理器(可以是Standalone、Mesos或YARN)注册并申请运行Executor资源;

2) 资源管理器分配Executor资源并启动StandaloneExecutorBackend,Executor运行情况将随着心跳发送到资源管理器上;

3) SparkContext构建成DAG图,将DAG图分解成Stage,并把Taskset发送给Task Scheduler。Executor向SparkContext申请Task,Task Scheduler将Task发放给Executor运行同时SparkContext将应用程序代码发放给Executor。

4) Task在Executor上运行,运行完毕释放所有资源。

3 Spark运行架构特点:

  1. 每个Application获取专属的executor进程,该进程在Application期间一直驻留,并以多线程方式运行tasks。这种Application隔离机制有其优势的,无论是从调度角度看(每个Driver调度它自己的任务),还是从运行角度看(来自不同Application的Task运行在不同的JVM中)。当然,这也意味着Spark Application不能跨应用程序共享数据,除非将数据写入到外部存储系统。
  2. Spark与资源管理器无关,只要能够获取executor进程,并能保持相互通信就可以了。

  3. 提交SparkContext的Client应该靠近Worker节点(运行Executor的节点),最好是在同一个Rack里,因为Spark Application运行过程中SparkContext和Executor之间有大量的信息交换;如果想在远程集群中运行,最好使用RPC将SparkContext提交给集群,不要远离Worker运行SparkContext。

  4. Task采用了数据本地性和推测执行的优化机制。