Spark简介

基于内存的计算框架,迭代计算效率高,基于DAG的任务调度执行机制。

应用场景

批量数据处理 Spark Core
历史数据交互查询 Spark SQL
实时数据流数据处理 Spark Streaming
历史数据挖掘机器学习 MLlib
图计算 Graph X

核心概念

  • RDD:是Resillient Distributed Dataset(弹性分布式数据集)的简称,是分布式内存的一个抽象概念,提供了一种高度受限的共享内存模型,是只读分区的集合,多个分区被分配到多个机器进行并行运算,通过执行转换操作创建新的RDD
  • DAG:是Directed Acyclic Graph(有向无环图)的简称,反映RDD之间的依赖关系
  • Executor:是运行在工作节点(WorkerNode)的一个进程,负责运行Task
  • Application:用户编写的Spark应用程序
  • Task:运行在Executor上的工作单元
  • Job:一个Job包含多个RDD及作用于相应RDD上的各种操作
  • Stage:是Job的基本调度单位,一个Job会分为多组Task,每组Task被称为Stage,或者也被称为TaskSet,代表了一组关联的、相互之间没有Shuffle依赖关系的任务组成的任务集

架构设计

Spark入门
Spark运行架构包括集群资源管理器(Cluster Manager)、运行作业任务的工作节点(Worker Node)、每个应用的任务控制节点(Driver)和每个工作节点上负责具体任务的执行进程(Executor)
Spark入门
一个Application由一个Driver和若干个Job构成,一个Job由多个Stage构成,一个Stage由多个没有Shuffle关系的Task组成

运行流程

Spark入门

  1. 为应用构建基本的运行环境,Driver创建SharkContex,进行资源的申请和任务的分配和监控
  2. 资源管理器给Executor分配资源并启动进程
  3. SparkContext根据应用代码的RDD依赖关系构建DAG图,DAG图提交给DAG Scheduler分解成多个Stage,Stage含有Task集合,把Task给Task Scheduler进行调度,当Executor有空闲资源会向SparkContext申请Task,Task Scheduler根据“计算向数据靠拢”理念,给合适的Executor分配Task
  4. Task在Executor上运行,把执行结果反馈给TaskScheduler,然后反馈给DAGScheduler,运行完毕后写入数据并释放所有资源

RDD

RDD操作:分为转换和动作,支持粗粒度的数据转换(map,filter,groupBy,join)
RDD执行过程:血缘关系
Spark入门

  1. 读入数据源,生成RDD
  2. 进行一系列的转换操作生成新的RDD,供下一步使用
  3. 最后执行动作操作输出到数据源

惰性调用,前面的转换只是逻辑记录,只有到最后的动作操作才会一次性地从头运行一遍。
管道化,不保存中间结果,避免同步等待,操作简单。
RDD特性

  1. 天生的容错机制,通过血缘关系,重新计算丢失的分区,只需记录RDD的转换轨迹(DAG图)
  2. 中间结果存在内存,避免磁盘开销
  3. 可以存Java对象,避免序列化和反序列化

RDD依赖关系
Spark入门
窄依赖:一个父RDD分区对应一个子RDD分区或者多个父RDD分区对应一个子RDD分区
宽依赖:一个父RDD分区对应多个子RDD分区,一旦子RDD分区损坏,要想恢复需找多个父RDD分区代价大
Stage划分:遇到宽依赖就断开,遇到窄依赖就加入
Spark入门
可以实现流水性计算

相关文章: