searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

大数据计算引擎Spark简介

2024-12-11 08:57:59
7
0

Spark 是一种用于大数据工作负载的分布式开源处理系统,它使用内存中缓存和优化的查询执行方式,可针对任何规模的数据进行快速分析查询

  • 特点

    1. 速度快

      与 MapReduce 相比,Spark 基于内存的运算效率要快100倍以上,基于硬盘的运算效率也要快10倍以上

      Spark 实现了高效的 DAG 执行引擎,能够通过内存计算高效地处理数据流

    2. 易用性

      Spark 编程支持 Java、Python、Scala 及 R 语言,并且还拥有超过 80 种高级算法

      除此之外,Spark 还支持交互式的 Shell 操作,开发人员可以方便地在 Shell 客户端中使用 Spark 集群解决问题

    3. 通用性

      Spark 提供了统一的解决方案,适用于批处理、交互式查询 (SparkSQL)、实时流处理 (SparkStreaming)、机器学习 (SparkMLlib) 和图计算 (GraphX)

      它们可以在同一个应用程序中无缝地结合使用,大大减少大数据开发和维护的人力成本和部署平台的物力成本

    4. 兼容性

      Spark 可以运行在 Yarn 模式、Mesos 模式、Standalone 独立模式或 Cloud 中,并且还可以访问各种数据源,包括本地文件系统、HDFS、Cassandra、HBase 和 Hive 等

  • 使用场景

    • Spark 是基于内存的迭代计算框架,适用于需要多次操作特定数据集的场合
    • 由于RDD 的特性,Spark 不适用与异步细粒度更新状态的应用,如 web 服务储存或增量的 web 爬虫和索引
    • Spark 适用于数据量不是特别的,但要求实时统计分析的需求
    • Spark 可以作为 Hive 的计算引擎,比 MR 计算速度更快

 

Spark 为什么快

  1. 磁盘 IO 方面

    RDD 和 DAG 使 Spark 能在内存中进行迭代式运算,迭代过程的中间结果都写入内存可以重用,减少了磁盘 IO

    MR 虽然可以在编写 map 和 reduce 时使用更复杂的代码实现在内存中计算的效果,但是扩展性和复用性太差

  2. Shuffle 方面

    Spark 的 Shuffle 只有在部分场景下才需要排序,大部分场景下是基于 Hash 的分布式聚合,更省时间

    MR 的 Shuffle 进行过程中要进行很多次排序

  3. 任务调度方面

    Spark Task 是基于多线程模型的,控制资源占用的粒度粗,但节省了启动和关闭进程的开销

    MR 的 Task 都是基于多进程模型的,控制资源占用的粒度细,当启动和关闭进程的开销大

 

Spark 架构

  • 核心模块

    • Spark Core

      包含Spark的基本功能,尤其是定义 RDD 的 API、操作以及这两者上的动作

      其他 Spark 的库都是构建在 RDD 和 Spark Core 之上的

    • Spark SQL

      提供通过 Apache Hive 的 SQL 变体 Hive 查询语言 (HiveQL) 与 Spark 进行交互的 API

      每个数据库表被当做一个 RDD,Spark SQL 查询被转换为 Spark 操作

    • Spark Streaming

      对实时数据流进行处理和控制

      Spark Streaming 允许程序能够像普通 RDD 一样处理实时数据

    • MLib

      一个常用机器学习的算法库,算法被实现为对 RDD 的 Spark 操作

      这个库包含可扩展的学习算法,比如分类、回归等需要对大量数据集进行迭代的操作

    • GraphX

      控制图、并行图操作和计算的一组算法和工具的集合

      GraphX 扩展了 RDD API,包含控制图、创建子图、访问路径上所有顶点的操作

  • 基本组件

    • Cluster Manager

      在 Standalone 模式中即为 Master 主节点,控制整个集群,监控 Worker

      在 Yarn 模式中为 ResouceManager

    • Worker

      从节点,负责控制计算节点,启动 Executor 或者 Driver

      在 Yarn 模式中为 NodeManager,负责计算节点的控制

    • Driver

      运行 Application 的 main() 函数并创建 SparkContext,驱使整个应用运行起来的程序,也称之为 Driver 类,主要负责以下功能:

      1. 将用户程序转化为作业 (job)

      2. 在 Executor 之间调度任务 (task)

      3. 跟踪 Executor 的执行情况

      4. 通过 UI 展示查询运行情况

    • Executor

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

      任务彼此之间相互独立,每个 Application 拥有独立的一组 Executor

      Spark 应用启动时,Executor 节点被同时启动,并且始终伴随着整个 Spark 应用的生命周期而存在

      如果有 Executor 节点发生了故障或崩溃,Spark 应用也可以继续执行,会将出错节点上的任务调度到其他 Executor 节点上继续运行

      核心功能:

      1. 负责运行组成 Spark 应用的任务,并将结果返回给 Driver 进程

      2. 通过自身的块管理器 (Block Manager) 为用户程序中要求缓存的 RDD 提供内存式存储

        RDD 是直接缓存在 Executor 进程内的,因此任务可以在运行时充分利用缓存数据加速运算

    • SparkContext

      整个应用的上下文,控制应用的生命周期

    • RDD

      RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是 Spark 中最基本的数据处理模型

      代码中是一个抽象类,它代表一个弹性的、不可变、可分区、里面的元素可并行计算的集合

      RDD 是 Spark 的最小计算单元,用于储存计算的数据和逻辑,一个复杂的逻辑可以分解成多个 RDD 并行运行

    • DAG Scheduler

      根据任务 (Task) 构建基于 Stage 的 DAG,并提交 Stage 给 TaskScheduler

    • TaskScheduler

      将任务 (Task) 分发给 Executor 执行

    • SparkEnv

      线程级别的上下文, 存储运行时的重要组件的引用

0条评论
作者已关闭评论
k****n
6文章数
0粉丝数
k****n
6 文章 | 0 粉丝
k****n
6文章数
0粉丝数
k****n
6 文章 | 0 粉丝
原创

大数据计算引擎Spark简介

2024-12-11 08:57:59
7
0

Spark 是一种用于大数据工作负载的分布式开源处理系统,它使用内存中缓存和优化的查询执行方式,可针对任何规模的数据进行快速分析查询

  • 特点

    1. 速度快

      与 MapReduce 相比,Spark 基于内存的运算效率要快100倍以上,基于硬盘的运算效率也要快10倍以上

      Spark 实现了高效的 DAG 执行引擎,能够通过内存计算高效地处理数据流

    2. 易用性

      Spark 编程支持 Java、Python、Scala 及 R 语言,并且还拥有超过 80 种高级算法

      除此之外,Spark 还支持交互式的 Shell 操作,开发人员可以方便地在 Shell 客户端中使用 Spark 集群解决问题

    3. 通用性

      Spark 提供了统一的解决方案,适用于批处理、交互式查询 (SparkSQL)、实时流处理 (SparkStreaming)、机器学习 (SparkMLlib) 和图计算 (GraphX)

      它们可以在同一个应用程序中无缝地结合使用,大大减少大数据开发和维护的人力成本和部署平台的物力成本

    4. 兼容性

      Spark 可以运行在 Yarn 模式、Mesos 模式、Standalone 独立模式或 Cloud 中,并且还可以访问各种数据源,包括本地文件系统、HDFS、Cassandra、HBase 和 Hive 等

  • 使用场景

    • Spark 是基于内存的迭代计算框架,适用于需要多次操作特定数据集的场合
    • 由于RDD 的特性,Spark 不适用与异步细粒度更新状态的应用,如 web 服务储存或增量的 web 爬虫和索引
    • Spark 适用于数据量不是特别的,但要求实时统计分析的需求
    • Spark 可以作为 Hive 的计算引擎,比 MR 计算速度更快

 

Spark 为什么快

  1. 磁盘 IO 方面

    RDD 和 DAG 使 Spark 能在内存中进行迭代式运算,迭代过程的中间结果都写入内存可以重用,减少了磁盘 IO

    MR 虽然可以在编写 map 和 reduce 时使用更复杂的代码实现在内存中计算的效果,但是扩展性和复用性太差

  2. Shuffle 方面

    Spark 的 Shuffle 只有在部分场景下才需要排序,大部分场景下是基于 Hash 的分布式聚合,更省时间

    MR 的 Shuffle 进行过程中要进行很多次排序

  3. 任务调度方面

    Spark Task 是基于多线程模型的,控制资源占用的粒度粗,但节省了启动和关闭进程的开销

    MR 的 Task 都是基于多进程模型的,控制资源占用的粒度细,当启动和关闭进程的开销大

 

Spark 架构

  • 核心模块

    • Spark Core

      包含Spark的基本功能,尤其是定义 RDD 的 API、操作以及这两者上的动作

      其他 Spark 的库都是构建在 RDD 和 Spark Core 之上的

    • Spark SQL

      提供通过 Apache Hive 的 SQL 变体 Hive 查询语言 (HiveQL) 与 Spark 进行交互的 API

      每个数据库表被当做一个 RDD,Spark SQL 查询被转换为 Spark 操作

    • Spark Streaming

      对实时数据流进行处理和控制

      Spark Streaming 允许程序能够像普通 RDD 一样处理实时数据

    • MLib

      一个常用机器学习的算法库,算法被实现为对 RDD 的 Spark 操作

      这个库包含可扩展的学习算法,比如分类、回归等需要对大量数据集进行迭代的操作

    • GraphX

      控制图、并行图操作和计算的一组算法和工具的集合

      GraphX 扩展了 RDD API,包含控制图、创建子图、访问路径上所有顶点的操作

  • 基本组件

    • Cluster Manager

      在 Standalone 模式中即为 Master 主节点,控制整个集群,监控 Worker

      在 Yarn 模式中为 ResouceManager

    • Worker

      从节点,负责控制计算节点,启动 Executor 或者 Driver

      在 Yarn 模式中为 NodeManager,负责计算节点的控制

    • Driver

      运行 Application 的 main() 函数并创建 SparkContext,驱使整个应用运行起来的程序,也称之为 Driver 类,主要负责以下功能:

      1. 将用户程序转化为作业 (job)

      2. 在 Executor 之间调度任务 (task)

      3. 跟踪 Executor 的执行情况

      4. 通过 UI 展示查询运行情况

    • Executor

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

      任务彼此之间相互独立,每个 Application 拥有独立的一组 Executor

      Spark 应用启动时,Executor 节点被同时启动,并且始终伴随着整个 Spark 应用的生命周期而存在

      如果有 Executor 节点发生了故障或崩溃,Spark 应用也可以继续执行,会将出错节点上的任务调度到其他 Executor 节点上继续运行

      核心功能:

      1. 负责运行组成 Spark 应用的任务,并将结果返回给 Driver 进程

      2. 通过自身的块管理器 (Block Manager) 为用户程序中要求缓存的 RDD 提供内存式存储

        RDD 是直接缓存在 Executor 进程内的,因此任务可以在运行时充分利用缓存数据加速运算

    • SparkContext

      整个应用的上下文,控制应用的生命周期

    • RDD

      RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是 Spark 中最基本的数据处理模型

      代码中是一个抽象类,它代表一个弹性的、不可变、可分区、里面的元素可并行计算的集合

      RDD 是 Spark 的最小计算单元,用于储存计算的数据和逻辑,一个复杂的逻辑可以分解成多个 RDD 并行运行

    • DAG Scheduler

      根据任务 (Task) 构建基于 Stage 的 DAG,并提交 Stage 给 TaskScheduler

    • TaskScheduler

      将任务 (Task) 分发给 Executor 执行

    • SparkEnv

      线程级别的上下文, 存储运行时的重要组件的引用

文章来自个人专栏
Spark
1 文章 | 1 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0