一、角色介绍
Spark 架构使用了分布式计算中 master-slave 模型, master 是集群中含有 master 进程的节点, slave 是集群中含有 worker 进程的节点。
◆ Driver Program :运行main 函数并且新建 SparkContext 的程序。
◆ Application :基于 Spark 的应用程序,包含了 driver 程序和集群上的 executor 。
◆ Cluster Manager :指的是在集群上获取资源外部服务。目前有三种类型
(1)Standalone: spark 原生的资源管理,由 Master 负责资源的分配
(2)Apache Mesos: 与 hadoop MR 兼容性良好的一种资源调度框架
(3)Hadoop Yarn: 主要是指 Yarn 中的 ResourceManager
◆ Worker Node: 集群中任何可以运行 Application 代码的节点,在 Standalone Standalone 模式中指的是通过 slaves 文件配置的 Worker 节点,在 Spark on Yarn 模式下就是 NodeManager 节点
◆ Executor :是在一个 worker node 上为某应用启动的 一个进程,该进程负责 运行任务,并且负责将数据存在内存或者磁盘上。每个应用都有各自独立的 executor 。
◆ Task :被送到某个 executor上的工作单元
二、spark的运行过程
Spark任务的调度流程:
1, 执行语句,操作RDD时生成有向无环图(DAG);
2,有向无环图(DAG)交给DAGScheduler,DAGScheduler将任务划分成不同的阶段(stage),一个stage有很多个分区,每一个分区就是一个task,形成一个TaskSet
3,TaskSet 交给TaskScheduler,TaskScheduler会对TaskSet进行遍历取出每一个Task。通过clustermanager加载task,并且重新加载失败的或者奇怪的task
4,将任务提交给Worker ,开启线程分配任务执行所需要的资源。
任务的提交过程需要注意:
1,在spark的任务中,RDD action操作之后首先将结果发送到Driver节点上就是main函数的 SparkContext 的程序
在实际的开发场景中,数据量会很大,如果使用了action之后会将Driver内存使用殆尽导致OOM的异常,解决的方式,直接将数据进行落地saveAsTextFile而不使用action
2,不能够在map中创建Spark
map中的操作是有几个分片就将结果分成几份,这样的话会将spark分别创建在不同的节点上,违背了数据的一致性
补充
如果是从hdfs中读取数据,每个split对应一个block块,每个块对应每个RDD中的分区,所以如果从hdfs中读取数据的话,spark并行度是由block块决定。