上一篇文章—Spark概述:spark的概述
这篇文章主要是与MapReduce和Hadoop的名词对比
先从一张图了解下Spark和MapReduce的比较
再从一张图了解一下Spark的运行原理
从这张图我们再进一步进行分析Spark和Hadoop的区别
Hadoop
1.一个MapReduce程序就是一个job,而一个job里面可以有一个或者多个task,task又可以区分为map task和reduce task
2.MapReduce中的每个task分别在自己的进程中运行,当该task运行完时,进程也就结束
Spark
Application
在Spark中,一个任务叫Application,也就是spark-submit提交的程序
Driver
完成任务的调度以及和executor和cluster manager进行协调
1.(驱动程序)是Spark的核心组件
2.构建SparkContext(Spark应用的入口,创建需要的变量,还包含集群的配置信息等)
3.将用户提交的job转换为DAG图
4.根据策略将DAG图划分为多个stage,根据分区从而生成一系列tasks
5.根据tasks要求要RM申请资源
6.提交任务并检测任务状态
Executor
1.每个Spark executor作为一个Yarn容器(container运行)
2.真正执行task的单元,一个节点上会包含多个container,一个container包含一个executor
Job
1.一个action算子就算一个job,例如count,first
2.每个action相当于一个阶段性的结束
3.由多个stage组成
Task
1.Spark中最小的执行单元,是一个线程
2.RDD一般是带有partitions的,每个partitions在一个executor上的执行可以认为是一个task
Stage
1.Stage是Spark独有的
2.一般而言一个Job会切换成一定数量的stage
3.各个stage之前按照顺序执行
4.对应一个taskset,一个stage是对task的包装,taskset对应一组关联的相互之间没有shuffle依赖关系的task组成
这里涉及到一个宽窄依赖的概念,窄依赖都是一对一的,比如stage1和stage2。宽依赖需要依赖前面其他节点的数据,比如stage3需要依赖stage1和stage2的数据。
其实stage表示一个阶段,内部有一些并发的数据处理,stage和stage之间有一定的数据依赖关系,stage可以理解成一个DAG有向无环图
下一章开始学习Spark Core相关的知识,敬请期待!