spark基础综述

Spark特点

1. 减少磁盘 I/O: MapReduce 会将计算中间结果存储到 HDFS 上,后续计算再从 HDFS 上读取数据计算,这样势必造成磁盘 I/O 成为瓶颈。

Spark将内容存储在内存中,减少了磁盘I/O,但是确增加了对内存的大量需求。

2. 增加并行度:Spark任务划分为不同的 stage,允许多个 stage 即可以串行执行,又可以并行执行。

3. 避免重新计算: 当 stage 中某个分区的Task执行失败后,会重新对此 stage调度,但在重新杜调度的时候回过滤已经执行成功的分区任务,避免重复计算和资源浪费。

4. 可选的 Shuffle 排序: Hadoop MapReduce 在 Shuffle 之前有着固定的排序操作,而Spark则可以根据不同场景选择在map端排序还是 reduce 端排序。

5. 灵活的内存管理策略:Spark将内存分为堆上的存储内存、堆外的存储内存、堆上的执行内存、堆外的执行内存4个部分。

执行内存与存储内存并不是有明显的边界,而是"软"边界,执行内存和存储内存的任意一方在资源不足时都可以借用另一方的内存。

6.其他特点: 检查点支持、易于使用、支持交互、支持 SQL、支持流式计算、可用性高、丰富的数据源支持和丰富的文件格式支持。

Spark基础概念

1. RDD(resillient distributed dataset): 弹性分布式数据集。通过Spark的转换API 可以将RDD封装成一系列具有血缘关系的RDD,也就是DAG(有向无环图)。只有通过Spark的动作API才会将RDD及其 DAG 提交到DAGScheduler。RDD的祖先一定是一个跟数据源相关的RDD,负责从数据源迭代读取数据。

2. DAG(Directed Acycle Graph): 有向无环图。Spark使用 DAG 来反映各RDD之间的依赖或血缘关系。

3. Partition: 数据分区,即一个RDD的数据可以划分为多少个分区。Spark根据 Partition 的数量来确定Task的数量。

4. NarrowDependency: 窄依赖,即子RDD依赖于父RDD中固定的 Partition。NarrowDependency分为 OneToOneDependency 和 RangeDependency 两种。

5. ShuffleDependency: Shuffle 依赖,也称为宽依赖,即子RDD对父RDD中的所有 Patition 都可能产生依赖。子RDD对父RDD各个 Partition 的依赖将取决于分区计算器(Partitioner)的算法。

6. Job: 用户提交的作业。当RDD及其 DAG 被提交给 DAGScheduler 调度后,DAGScheduler 会将所有RDD中的转换及动作视为一个 Job。一个Job有一个到多个Task组成。

7. Stage:  Job的执行阶段。DAGScheduler 按ShuffleDependency 作为 Stage 的划分节点对RDD的DAG进行Stage 划分(上游的 Stage 将为 ShuffleMapStage)。因此一个Job可能被划分为一到多个 Stage。Stage 分为 ShuffleMapStage 和 ResultStage 两种。

8. Task: 具体执行任务。一个Job在每个Stage内都会按照RDD的 Partition 数量,创建多个Task。Task 分为 ShuffleMapTask 和 ResultTask 两种。ShuffleMapStage中的Task为 ShuffleMapTask,而 ResultStage 中的Task为 ResultTask。ShuffleMapTask 和 ReduceTask类似Hadoop的Map和Reduce任务

9. Shuffle: Shuffle 是所有MapReduce 计算框架的核心执行阶段,Shuffle 用于打通 Map 任务(在Spark中就是 ShuffleMapTask)的输出与 reduce 任务(在Spark中就是 ResultTask)的输入,map 任务的中间结果按照指定的分区策略(例如:按照 key 哈希)分配给处理某个分区的 reduce 任务。

 

Spark工作机制

主要模块

调度与任务分配

I/O模块

通信控制模块

容错模块

Shuffle模块

调度层次

应用

作业

Stage

Task

调度算法

FIFO

FAIR(公平调度)

Spark应用执行机制

总览

Spark应用提交后经历了一系列的转换,最后成为Task在每个节点上执行.

RDD的Action算子触发Job的提交,提交到Spark中的Job生成RDD DAG

由DAGScheduler转化为Stage Dage

每个Stage中产生相应的Task集合

TaskScheduler将任务分发到Executor执行

每个任务对应相应的一个数据块,使用用户定义的函数处理数据块.

Spark实现了分布式计算和任务处理,并实现了任务的分发,跟踪,执行等工作.最终聚合结果,完成Spark应用的计算.

对RDD的块管理通过BlockManger完成.BlockManager将数据抽象为数据块,在内存或者磁盘进行存储,如果数据不在本节点,则还可以通过远端节点复制到本机进行计算.

Spark应用

执行模式

Local

Standalone

YARN

Mesos

Cluster模式

Client模式

应用的基本组件

  • Application:用户自定义的Spark程序,用户提交后,SparkApp分配资源,将程序转换并执行
  • Driver Program:运行Applicationmain()创建并创建SparkContext
  • RDD Graph:RDDSpark的核心结构,RDD遇到Action算子时,将之前的所有算子形成一个DAG,也就是RDD Graph.再在Spark中转化为Job,提交到集群执行.一个App中可以包含多个Job.
  • Job:一个RDD Graph触发的作业,往往由Spark Action算子触发.SparkContext中通过runJob方法向Saprk提交Job.
  • Stage:每个Job会根据RDD的宽依赖关系呗切分很多Stage,每个Stage中包含一组相同的Task,这一组Task也叫TaskSet.
  • Task:一个分区对应一个Task,Task执行RDD中对应Stage中包含的算子.Task被封装好后放入Executor的线程池中执行

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值