大数据学习七

Spark 架构与运行机制

SPARK

1、Spark的生态系统

    Spark Core:engine

    Spark SQL :交互式查询

    Spark Streaming:流式计算

    MLLib:机器学习和数据挖掘

    GraphX:图计算

2、基本概念

   RDD:分布式内存的一个抽象

   DAG:有向无环图,反映RDD之间的依赖关系

   Executor:运行在工作节点上的一个进程,负责运行具体的Task;

   Application:用户编写的程序

   Task:运行在Executor上的工作单元

   Job:一个Job包含多个RDD以及作用于相应RDD上的操作

   Stage:是Job调度的基本单元,一个Job会分为多组Task,每一组Task称为Stage。

  3、Spark运行架构包括:

     集群资源管理器cluster Manager,可以自带的Mesos,也可以基于YARN

    工作节点Worker Node

    每个应用的控制节点Driver

   每个节点上负责具体任务的执行进程Executor

4、Executor的两个优点:

     一是可以多线程,减少任务的启动开销;

     二是Executor中有一个BlockManager存储模块,会将内存和磁盘共同作为存储设备,有效减少IO开销。

5、一个Application由一个Driver和若干个Job构成,一个Job有若干个Stage,一个Stage由若干个没有shuffle关系的Task组成。

    当执行一个Application时,Driver向cluster manager申请资源,启动Executor,并向Executor发送应用程序代码和文件,在后在Executor上执行Task,运行结束后,结果返回给Driver,或者写到HDFS中。

6、Spark运行的基本流程

    1)首先由Driver创建一个Spark context, 进行资源申请、任务的分配和监控;

    2)资源管理器为Executor分配资源,并启动Executor;

    3)SparkContext根据RDD的依赖关系构建DAG图,DAG图交给DAGScheduler解析成Stage,然后交给底层的TaskScheduler处理,Task Scheduler将Task发放给Executor运行,并提供相关代码;

   4)Task在Executor上执行,并把结果反馈给TaskScheduler,然后TaskScheduler反馈给DAGScheduler,运行完后写入数据并释放所有资源。

7、Spark运行架构的特点:

    1)每一个Application都有自己的Executor进程,并且Executor在Application运行期间一直驻留。Executor以多线程方式运行Task。

    2)Spark运行过程与资源管理器无关,只要能够获取Executor进程,并保持通信就成。

    3)Task采用了数据本地性和推测执行等优化机制。

8、RDD概念

    RDD本质上是一个只读的分区记录集合,不能直接修改,每个分区就是一个数据集片段,并且一个RDD的不同分区可以来自不同的节点。

9、RDD的运行原理

    RDD提供了一组丰富的操作支持常见的数据运算,分为“Action”和“Transformation”两种类型,并且RDD的转换接口的都死Map、Filter、groupby,join等粗粒度的数据转换操作。

    Scala语言实现了RDD的API,可以通过Scala可以实现对RDD的操作。

RDD典型当执行过程:

   RDD读入外部数据源进行创建;

   RDD经过一些列的转换操作,每一次操作都产生不同的RDD,供下一个转换使用;

   最后一个RDD经过Action操作转换,输出到外部数据源。

  这一系列的处理称为学院关系,即DAG拓扑排序的结果。优点:惰性调用,管道化,避免同步等待,不需要保存中间结果,每次操作变得简单。

10、RDD设计的特性

   1)高效的容错性

      血缘关系只需要找到父亲节点,不需要重新计算丢失分区,无需回滚操作。

   2)中间结果保存到内存中,数据在多个RDD之间进行传递,避免了不必要的磁盘读写开销;

   3)存放的对象可以是Java对象,无需对象的序列化和反序列化。

11、RDD的依赖关系

    窄依赖关系:一个父RDD的分区对应于一个子RDD的分区或者多个父RDD对应于一个子RDD分区

    宽依赖:一个父RDD的分区对应于一个子RDD的多个分区。

12、Stage的划分

   Spark通过分析各个RDD的依赖关系生产了DAG,在通过分析各个RDD中的分区之间的依赖关系决定如何划分Stage,具体的划分是:

   在DAG反解析过程中,遇到宽依赖就断开;

   遇到窄依赖就把当前的RDD加入到Stage;

    将窄依赖尽量划分到同一个Stage中,可以实现流水线计算。

  Stage的类型包含两种:ShuffleMapStage和ResultStage,

    ShuffleMapStage:不是最终的Stage,在他之后还有别的Stage,所以她的输出需要经过Shuffle处理,并作为后续Stage的输入;这种Stage以Shuffle为输出边界,输入可以是外部数据源,也可以是别的ShuffleMapStage的输出;在一个Job里,可能有这种Stage存在;

    ResultStage是最终的Stage,没有输出,直接将结果存储。一个Job里必须有这种Stage。

   因此,一个Job可能包含一个或者多个Stage,但至少有一个ResultStage。


   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值