这篇文章主要是简单的介绍一下Spark应用如何在集群上运行, 更进一步的理解Spark所涉及到的相关主件
Spark应用在集群上是独立运行的进程, 通过主程序(main program)的SparkContext进行协调. 一般我们成Spark的主程序为driver程序(driver program)
特别的, 在集群上运行Spark, SparkContext对象支持和多种不同类型的集群管理器(Cluster manager)进行通信. 包括Spark自己的standalone集群管理器, Mesos还有YARN. SparkContext和Cluster manager连接之后, Cluster manager会在集群的worker节点上启动executor进程(真正进行数据处理, 计算和存储), 接下来把应用程序的代码(JAR包或Python文件)发送到executor进程, 最后SparkContext在executor进程上调度task执行
上诉的流程, 简单用几个步骤进行描述
从上图可以看出
对于这个架构, 有几个我们必须了解
目前有三种类型的Cluster manager支持Spark
Spark应用程序可以通过 spark-submit进行提交
每个driver程序都有一个web UI, 端口4040. 前端可以展示tasks, executors和存储使用情况.
Term Meaning
----------------------------------------------------------------------------------
Application 用户开发的Spark应用程序, 包括driver程序和集群的executors进程
----------------------------------------------------------------------------------
Application jar 包含用户Spark应用程序的jar包, 有些时候用户创建一个jar包, 包含应用
所有的依赖项. 但是用户的jar包不应该包括Hadoop或者Spark相关的库
----------------------------------------------------------------------------------
Driver program 应用程序执行main函数的进程, 同时生成SparkContext
----------------------------------------------------------------------------------
Cluster manager 集群服务用于分配资源
----------------------------------------------------------------------------------
Deploy mode driver程序运行的区别. "cluster"模式, driver程序运行在集群的任意wroker
节点. "client"模式, driver程序运行在本地
----------------------------------------------------------------------------------
Worker node 集群的任何一个可以执行应用的节点
----------------------------------------------------------------------------------
Executor 每个应用在worker节点上启动的一个进程, 执行task任务同时把数据放在
内存或者磁盘. 每个应用都有自己的executor进程
----------------------------------------------------------------------------------
Task executor执行的一个单元
----------------------------------------------------------------------------------
Job 多个并行计算task组成一个Job
----------------------------------------------------------------------------------
Stage 每个job被分割成多个不同task集合, 每个task集合称为stage
例如map和reduce是Mapeduce的一个stage