[第十章]Spark

Spark与Hadoop对比

Hadoop存在如下一些缺点:
  • 表达能力有限
  • 磁盘IO开销大
  • 延迟高
    • 任务之间的衔接涉及IO开销
    • 在前一个任务执行完成之前,其他任务就无法开始,难以胜任复杂、多阶段的计算任务
Spark主要具有如下优点:
  • Spark的计算模式也属于MapReduce,但不局限于Map和Reduce操作,还提供了多种数据集操作类型,编程模型比Hadoop MapReduce更灵活
  • Spark提供了内存计算,可将中间结果放到内存中,对于迭代运算效率更高
  • Spark基于DAG的任务调度执行机制,要优于Hadoop MapReduce的迭代执行机制

Spark与Flink对比

notion image

生态系统

大数据处理主要包括以下三个类型:
  • 复杂的批量数据处理:通常时间跨度在数十分钟到数小时之间
  • 基于历史数据的交互式查询:通常时间跨度在数十秒到数分钟之间
  • 基于实时数据流的数据处理:通常时间跨度在数百毫秒到数秒之间
notion image
应用场景
时间跨度
其他框架
Spark生态系统中的组件
复杂的批量数据处理
小时级
MapReduce、Hive
Spark
基于历史数据的交互式查询
分钟级、秒级
Impala、Dremel、Drill
Spark SQL
基于实时数据流的数据处理
毫秒、秒级
Storm、S4
Spark Streaming Structured Streaming
基于历史数据的数据挖掘
-
Mahout
MLlib
图结构数据的处理
-
Pregel、Hama
GraphX

运行架构

基本概念

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

设计架构

集群资源管理器(Cluster Manager)、运行作业任务的工作节点(Worker Node)、每个应用的任务控制节点(Driver)和每个工作节点上负责具体任务的执行进程(Executor)
  • 资源管理器可以自带或Mesos或YARN
  • 一个应用由一个Driver和若干个作业构成,一个作业由多个阶段构成,一个阶段由多个没有Shuffle关系的任务组成
  • 当执行一个应用时,Driver会向集群管理器申请资源,启动Executor,并向Executor发送应用程序代码和文件,然后在Executor上执行任务,运行结束后,执行结果会返回给Driver,或者写到HDFS或者其他数据库中
notion image

Spark运行基本流程

(1)首先为应用构建起基本的运行环境,即由Driver创建一个SparkContext,进行资源的申请、任务的分配和监控 (2)资源管理器为Executor分配资源,并启动Executor进程 (3)SparkContext根据RDD的依赖关系构建DAG图,DAG图提交给DAGScheduler解析成Stage,然后把一个个TaskSet提交给底层调度器TaskScheduler处理;Executor向SparkContext申请Task,Task Scheduler将Task发放给Executor运行,并提供应用程序代码 (4)Task在Executor上运行,把执行结果反馈给TaskScheduler,然后反馈给DAGScheduler,运行完毕后写入数据并释放所有资源
notion image

RDD运行原理

依赖关系⭐

notion image
notion image
  • 宽依赖
    • 全连接
  • 窄依赖
    • 非全连接
  • 划分
    • 在DAG中进行反向解析
    • 遇到宽依赖就断开,窄依赖尽量抱团放在同一个Stage中
Prev
[第九章]数据仓库Hive
Next
[第十一章]流计算
Loading...
Article List
一个NotionNext搭建的博客
数据库系统概论
大数据原理与应用
javaWeb应用开发基础教程
python
毕业设计
大数据技术综合应用
实训-航空数据系统
java面向对象程序设计
数据结构
算法分析与设计
SPARK
Python爬虫大数据采集与挖掘
云计算
概率论与数理统计
数字逻辑
计算机网络
计算机组成原理
linux
操作系统
人工智能导论
数据仓库与数据挖掘
数据可视化
大数据安全与隐私保护
c语言
C++