术语解释
Application: 基于Spark用户,包含了Driver程序
在spark中,你启动了一个spark shell 就相当于一个application,以什么为基准呢,就是说,一个sparkContext,只要你有这个类,那么就说你有一个Application,但是在Spark shell中已经给你创建好了sc,
Driver: 运行main函数并且新建SparkContext
cluster Manager:在集群上获取额外资源的外部服务(eg: standlone,Mesos,Yarn)
Worker Node:集群中可以运行任何应用代码的节点
Executor:是在一个Worker Node上韦某一个应用启动的以个进程,该进程负责运行任务,并且负责将数据存在内存或者磁盘上,每个应用都有各自独立的Exexutor
不同的application 会对应不同的Executor,两个应用是应用在不同的JVM里面的,他们之间是相互隔离的。
Task:被送到Executor上的工作单元
Job:包含 多任务的并行计算,可以看做和Spark的action对应。
在hadoop中,你提交一个任务就叫一个job.包含。
在spark中,你只要做了有个action就算是一个job.
transform只会告诉元数据,我要做什么操作,在原数据里面它只会记录这个操作,不会真正去执行,到了action的时候,它才会真正的去执行。
Stage:一个job会被拆分很多组件任务,每组任务被称为stage(就像MR分为map任务和reduce任务一样)
一个Stage的边界:要么是从外部去取数据,sc.textFile("") 代表
一个stage的开始,
一个stage的结束:非常可能是由于要Shuffle,到Shuffle阶段了,比如A join B的时候,就要发生Shuffle,是要两个RDD去join,reduceByKey,当然一个Stage结束也可能 是任务结束了,比如要save到HDFS上或者count.
Spark运行流程:
Driver 创建了SparkContext程序,
Spark应用在集群上面其实就是运行一组独立的进程,这些进行都是由SparkContext来协调的,包含SparkContext的程序叫做DriverProgram,这个集群呢又可以通过SparkContext又可以通过集群连接到不同的Cluster Manager,不同的ClusterManager包括:standlone,Mesos,Yarn,就是说,你连接到这个ClusterManager之后,这个ClusterManager会为应用分配资源,一旦连接了以后,这个SparkContext会或者各个连接节点的Executor,每个应用都会有自己的Executor,这个Executor才是真正在Worker上运行的工作进程,他们会做一系列的事情,比如为你的应用计算,重组数据啊,然后其他一些工作都是Executor来做,在最后获取Executor以后,你的应用代码