Logo
Section 1 / 2

大数据与Apache Spark

了解有关大数据及大数据处理的更多信息。

导入

大数据与Apache Spark

了解有关大数据及大数据处理的更多信息。

在本章中,我们将介绍一种广泛流行的大数据处理框架——Apache Spark。在下一章中,我们将讨论分布式数据库系统。

什么是大数据?

回答这个问题有些棘手,因为其定义很大程度上取决于具体场景。但让我们先从一个起点开始。

大数据是指无法使用传统方法存储或处理的大量数据。

在传统的数据处理方式中,数据是在一台机器上通过简单技术进行处理的。这台机器的磁盘上存储了一定数量的数据,运行一个程序来读取数据,提取所需内容并进行处理。如果数据量较小,能够在普通机器上用常规方法轻松处理,那么我们就不需要借助复杂的专用算法(如MapReduce)来实现快速处理。但当数据规模大到超出普通机器的处理能力时,情况就变得复杂了。

随着互联网的兴起,大数据的概念逐渐流行起来。几十年前,工程师们并不特别关注大规模数据的处理问题,原因显而易见:当时的互联网及其服务远没有今天这么普及。随着互联网服务的发展,数据成为提升客户服务质量的关键。然而,所产生的数据量远远超出了普通机器的承载能力。因此,围绕大数据处理的技术和解决方案也随之受到广泛关注。

处理大数据是一个极具挑战性的问题,几乎所有公司迟早都需要解决这一难题。

分类

我们可以将大数据分为三类:

  • 结构化数据:这类数据具有明确的结构。可以想象一个SQL表,所有列及其数据类型都是预先定义好的。在结构化大数据中,我们知道数据的内容、字段及其类型。

  • 半结构化数据:这类数据没有严格的结构,但存在一定的结构。例如应用程序的日志数据,每行都包含时间戳和字符串,但该字符串可能包含各种信息,如错误对象、应用相关的指标等。

  • 非结构化数据:正如我们所猜测的,非结构化数据本身没有固定结构。图像或视频文件就是典型的非结构化数据例子。通常,非结构化数据会附带一些元数据来描述其属性,而这些元数据往往是结构化或半结构化的。例如,一张图片具有分辨率、大小、创建日期等属性,这些信息会被单独记录在结构清晰的元数据中。

Apache Spark

我们知道,处理大数据非常具有挑战性。但随着时间推移,研究人员和工程师已经开发出一系列成熟的方法。由于众多公司开始涉足大数据领域,彼此之间的工作有很多重叠,因此出现了多种框架以简化大家的工作。其中一个代表性框架就是Apache Spark。

实际上,Spark早已不仅仅是一个框架,而发展成为一个完整的生态系统。它是一个功能强大的分析引擎,支持多种大数据应用场景,包括批处理、流处理、机器学习等。

那么,Apache Spark究竟提供了哪些能力来帮助处理大数据?

与许多框架类似,Spark提供了对Java、Scala、Python等主流编程语言的良好API支持以及高效的数据结构。借助这些支持,工程师能够以更简单的方式开发复杂的数据处理逻辑。

Spark允许开发者编写看似同步执行的代码,但在后台,Spark会自动处理数据的并行计算,从而实现高效的处理速度。这使得开发大数据解决方案对程序员来说更加简便。

核心要点

  • 大数据指的是体量巨大、因规模问题需要特殊处理手段的数据。

  • 为促进大数据处理,已开发出多种框架。其中,Apache Spark是典型代表,它极大地提升了开发者的开发效率与便捷性。

分布式系统架构模式

Apache Spark 的架构 Apache Spark 是一个分布式计算框架,旨在高效处理大规模数据。其核心架构基于弹性分布式数据集(RDD,Resilient Distributed Dataset)模型,并支持多种计算模式,包括批处理、流处理、机器学习和图计算。 Spark 架构主要由以下几个关键组件构成: 1. **Driver Program(驱动程序)** 驱动程序是用户编写的 Spark 应用的入口点,负责将用户代码转换为任务(Tasks),并协调整个应用程序的执行。它包含以下功能: - 创建 SparkContext(用于与集群通信) - 将应用程序逻辑划分为阶段(Stages) - 调度任务到工作节点 - 监控执行状态并返回结果 2. **Cluster Manager(集群管理器)** 负责资源分配和调度,管理集群中的计算资源。Spark 支持多种集群管理器: - Standalone:Spark 自带的简单集群管理器 - Apache Mesos:通用资源管理框架 - YARN(Yet Another Resource Negotiator):Hadoop 生态中的资源管理器 - Kubernetes:容器化部署环境下的资源管理平台 3. **Worker Node(工作节点)** 工作节点是集群中的计算节点,运行在物理或虚拟机上。每个工作节点上启动一个 Executor 进程,负责执行具体的任务。 4. **Executor(执行器)** 每个工作节点上的执行器进程负责执行分配给它的任务。它具备以下功能: - 在内存中存储数据(如 RDD 分区) - 执行计算任务 - 向 Driver 报告状态和结果 - 通过本地缓存提高性能 5. **Spark Context(Spark 上下文)** 是 Spark 应用程序与集群交互的核心接口。它负责连接到集群管理器,获取资源,并创建 RDD、DataFrame 和 Dataset 等数据结构。 6. **RDD(弹性分布式数据集)** RDD 是 Spark 的基本数据抽象,代表一个不可变的、分区的数据集合。具有容错性,可通过血统(Lineage)信息重新计算丢失的数据。 7. **DAG Scheduler(有向无环图调度器)** 将用户提交的作业分解为多个阶段(Stages),根据依赖关系构建 DAG 图,然后将阶段划分成任务组(Task Sets)发送给 Executor 执行。 8. **Task Scheduler(任务调度器)** 负责将任务分发到各个 Executor 上执行,确保任务在合适的节点上运行。 9. **Storage Module(存储模块)** 管理数据的缓存和持久化,支持将 RDD 或 DataFrame 缓存在内存、磁盘或两者中,以提升后续访问效率。 10. **SQL and Streaming Engine(SQL 与流处理引擎)** Spark SQL 提供对结构化数据的查询能力;Structured Streaming 提供基于微批处理的流式数据处理机制。 整体架构特点: - **内存计算**:数据优先存储在内存中,显著提升性能。 - **容错性**:通过 RDD 的血统机制实现自动恢复。 - **统一编程模型**:支持多种计算范式(批处理、流处理、机器学习、图计算)共用同一套 API。 - **可扩展性**:可在数千个节点的集群上运行。 该架构使得 Spark 成为大数据处理领域广泛采用的主流框架。