Spark: 分布式计算引擎框架概述

1. Spark 基于 MapReduce (MR) 开发

  • Spark 是一种强大的分布式计算框架,最初受到 Hadoop MapReduce 的启发。与 Hadoop 不同的是,Spark 专注于内存计算和优化处理流程,提高了计算性能和效率。

2. 分布式概念

20240903220327.png

单机模式示意图

  • 单机模式:在单个节点上运行的单进程系统。这种方式适合开发和测试。
  • 伪分布式模式:在单个节点上模拟多个进程进行并行处理。这是分布式系统的简化版本,用于开发和测试。
20240903220327.png

分布式模式示意图

  • 分布式模式:系统由多个节点组成,每个节点可以运行多个进程,具有真正的并行处理能力。分布式计算可以大大提高处理大量数据时的效率和速度。

3. 计算的本质

  • 计算是指执行特定操作的过程。分布式计算的核心在于将数据切分成小块,由多个节点并行处理,减少单个节点的负载和计算时间。
  • 分布式存储:将大数据分布在多个节点上进行存储。
  • 分布式消息传输:节点之间通过消息传输共享数据,确保计算结果的一致性。

4. 分布式集群的架构

  • Spark 集群中心化:Spark 集群中的资源管理和调度通常由中心化的组件(如 Spark 的 Master 节点或 YARN)管理,负责分配任务和协调节点之间的计算。
20240903220327.png

集群去中心化架构示意图

  • Kafka 去中心化:与 Spark 的中心化管理不同,Kafka 是一种去中心化的消息传输系统,多个节点可以平等地参与数据传输和处理,没有单一的控制节点。

4. 框架与系统的区别

  • 框架:框架是一个不完整的计算程序,它提供了核心功能的实现,但不包括特定的业务逻辑。开发人员可以基于框架开发特定的业务应用程序。Spark 是一个典型的计算框架。
  • 系统:一个完整的系统是包含所有功能的计算程序,具备从核心功能到业务逻辑的完整实现。

Spark 基础概念

20240903220327.png

Spark宏观工作示意图

1. 开发语言

  • MapReduce (MR):最早的 Hadoop MapReduce 使用 Java 编写。虽然 Java 具有广泛的使用范围,但它在处理大规模数据时显得不够灵活。
  • Spark:Spark 采用了 Scala 作为主要的开发语言。Scala 具有函数式编程的特性,特别适合进行大量的数据处理。除了 Scala,Spark 也支持 Java、Python 和 R 等语言。

2. 处理方式

20240903220327.png

MapReduce工作示意图

  • Hadoop:Hadoop 最早出现时,主要基于磁盘的外存计算(即 MapReduce),每次处理完数据后都会将结果写入磁盘,因此处理效率较低。
20240903220327.png

Spark工作示意图

  • Spark:Spark 通过优化计算过程,基于内存进行计算,极大提高了处理速度。Spark 可以将数据加载到内存中进行操作,减少了对磁盘 I/O 的依赖,从而加快了大规模数据的处理效率。

补充

  • Spark 与 Hadoop 的关系:Spark 是对 Hadoop MapReduce 的优化和提升,专注于内存计算,大大提升了处理速度和可扩展性。尽管 Spark 通常用于替代 Hadoop MapReduce,但它仍然可以在 Hadoop 集群上运行,利用 HDFS(Hadoop Distributed File System)进行分布式存储。

  • 分布式存储与计算的结合:Spark 中的数据被切分为多个分片(partition),并分布在集群的不同节点上。每个节点可以独立处理其分配到的数据分片,这种并行计算的方式极大地提高了数据处理效率。

  • 核心组件

    • Spark Core:提供分布式任务调度和内存管理等核心功能。
    • Spark SQL:支持结构化数据查询,允许使用 SQL 语法查询大数据。
    • Spark Streaming:支持实时数据处理,适合处理流数据。
    • MLlib:提供分布式机器学习算法的实现。
    • GraphX:支持图计算,适合处理社交网络等图数据结构。