Spark的原理解析
文章目录
- 前言
- 一. Spark简介
- Spark与MapReduce对比
- 二.基本概念和架构设计
- Spark运行的基本流程(这里以YARN为例)
- RDD的一个基本运行概述
- RDD的典型执行过程如下
- RDD的依赖关系
- 总结
前言
今天主要学习的是一个Spark框架的原理解析,spark的运行流程,RDD的一个执行过程,依赖关系的一个介绍
一. Spark简介
Spark是由scala开发的,scala运行于JAVA平台(JVM),并兼容现有的JAVA程序,所以使用scala编写的程序由Java jdk就能运行,并不需要scala jdk
Spark与MapReduce对比
由上图可以看出,使用Hadoop MR进行迭代计算非常耗资源
Spark将数据载入内存后,之后的迭代计算都可以直接使用内存中的中间结果作运算,避免了从磁盘中频繁读取数据
二.基本概念和架构设计
Spark运行的基本流程(这里以YARN为例)
- 客户端提交应用程序的时候,首先为应用构起基本运行环境SparkContext并向RM注册并申请资源,即由Driver创建一个SC进行资源的申请,任务的分配和监控
这里的Driver理解为用户编写的应用程序,SparkContex(SC)t就类似RM中的AM功能 - RM收到请求后会启动Executor并分配资源,并向SC注册并申请Task,并时刻与SC保持通信防止断联。
- 待作业运行完后SC向RM申请注销并关闭自己
RDD的一个基本运行概述
RDD的典型执行过程如下
1.RDD读入外部数据源并创建,如果数据源大就会创建多个分区,不同的分区就会到不同的数据节点上,就是因为这一特性,才叫RDD:分布式弹性数据集
2.RDD经过一系列的转换操作:每一次转换操作都会形成新的RDD供下一个转换操作使用,这样串起来就构成了DAG图
3.最后一个RDD经过动作操作输出到外部数据源
处理过程中,RDD都会转换,但不会具体的生成结果,只有遇到动作操作(action)才会去计算相应的结果
RDD的依赖关系
如上图所示,RDD的依赖关系分为宽依赖和窄依赖,什么有窄依赖,下面我说一下宽依赖,表现为存在一个父RDD的一个分区对应一个子RDD的多个分区