概述

Spark 是一种基于内存的快速、通用、可扩展的大数据分析计算引擎。


Spark 对比 Hadoop

Hadoop的MapReduce和Spark都是数据处理框架,有何区别?

  • Spark在多个作业(RDD)之间数据通信基于内存,速度更快,且MapReduce是基于磁盘,速度很慢


Spark 核心模块

  • Spark Core:核心功能实现
  • Spark Sql:用来操作结构化数据
  • Spark Streaming:针对实时数据进行流式计算
  • Spark MLib:机器学习算法库
  • Spark GraphX:图计算框架和算法库


运行架构

架构概览

Spark 核心是计算引擎,采用了Master-Slave结构

#yyds干货盘点# 大数据技术栈之Spark架构总结_数据

Driver:代表master节点,用于执行Spark任务中的main方法,负责实际代码的执行,主要负责

  • 将用户程序转化为作业(Job)
  • 在Executor间调度任务(Task)
  • 跟踪Executor的执行情况
  • 通过UI展示查询运行情况

Executor:是集群中工作节点(Worker)中的一个JVM进程,负责在Sprak作业中运行具体任务(Task)

  • 负责运行Job,并将结果返回给驱动器进程
  • 通过自身的Block Manager为用户程序中要求缓存的RDD提供内存式存储


通用运行流程

#yyds干货盘点# 大数据技术栈之Spark架构总结_计算引擎_02

  1. 提交Spark任务,启动Driver程序
  2. Driver向集群资源管理器注册应用程序
  3. 资源管理器根据任务的配置文件分配Executor并启动
  4. Driver开始执行main函数,Spark查询为懒执行,当执行到 Action 算子时开始反向推 算,根据宽依赖进行 Stage 的划分,随后每一个 Stage 对应一个 TasksetTaskset 中有多 个 Task,查找可用资源 Executor 进行调度;
  5. 根据本地化原则,Task 会被分发到指定的 Executor 去执行,在任务执行的过程中, Executor 也会不断与 Driver 进行通信,报告任务运行情况。



Spark 核心编程

RDD

Resilient Distributed DataSet(弹性分布式数据集),是Spark最基本的数据处理模型

弹性

  • 存储的弹性:内存与磁盘的自动切换
  • 容错的弹性:数据丢失可以自动恢复
  • 计算的弹性:计算出错重试机制
  • 分片的弹性:可根据需要重新分片

分布式:数据存储在大数据集群的不同节点

数据集:RDD封装了计算逻辑,并不保存数据

数据抽象:RDD是一个抽象类,需求子类实现

可分区、并行计算