目录
一、官方文档翻译
地址:http://spark.apache.org/docs/latest/cluster-overview.html
Spark应用是以线程(processes)的方式独立运行在集群上,其协调通过你的程序的main方法的SparkContext(称为驱动程序:driver program)。
SparkContext可以运行在不同的资源上(Spark standalone、Mesos、YARN),一旦连接上,Spark会请求Cluster Mananger在集群的节点上启动executor。executor为你的应用程序计算和存储数据。接下来,SparkContext发送你的应用代码到executor。最后,SparkContext发送任务Task到executor来跑。
术语:
1、Application:Spark程序 = 1 driver + n executor
2、Driver program:main里面创建SparkContext
3、Cluster manager:资源管理器
4、Deploy mode:两种部署模式, 分别为cluster、client
- cluster 在集群内启动driver
- client 在客户端启动driver
5、Worker node:工作节点
6、Executor:在worker节点上启动的进程,用来运行task和缓存数据
7、task:最小的执行单元,例如map、filter...
8、job:遇到action 产生job = n + stage
9、stage:job遇到shuffle拆分,一个stage包含了n个task
需要注意的是:
1、每个应用有自己的executor进程,默认相互隔离,因此不同的应用之间不能共享数据。
2、Spark并不关注使用的cluster manager,只要能够获取资源跑作业就OK。
3、Driver必须能够和worker nodes通信,来发送调度作业,接收信息。
4、Driver尽可能的靠近worker nodes,cluster模式
二、以WC为例分析
使用spark-shell --master local
sc.textFile("file:///opt/mydata/olddata/wc.txt").flatMap(_.split(",")).map((_, 1)).reduceByKey(_ + _).saveAsTextFile("file:///opt/mydata/olddata/out/wc-out")
spark-shell 就是一个Application,因为底层创建sc
wc中的saveAsTextFile触发了一个job
job里面由于有reduceByKey,所以拆分成2个stage
1 stage:map((_,1))
1个Task
2 stage:saveAsTextFile
1个Task
三、通俗来讲
说到底,就是现实中的劳务派遣。
甲方有一个项目需要乙方来做。
甲方的负责人就是driver program,甲方负责人可以选择远程办公(deploy mode:client),也可以选择驻场办公(deploy mode:cluster),乙方负责人就是Cluster Mananger,负责通知手下来干活。该项目需要乙方三个部门(Worker Node)来施工,每个部门抽出5个人为一个项目组(executor)专门实施该项目。 每个人手上做的工作为一个(Task),部门合作的时候,产生stage,当项目完结的时候,为一个Job。