Apache Spark 简介
了解 Apache Spark 是什么以及它的部分特性。
Apache Spark 是一个功能强大且高效的海量数据处理平台。近年来,由于其开源特性,Apache Spark 在处理大规模数据时表现出色,能够在计算集群上以分布式方式高效运行。它提供了一个统一的引擎,支持批处理、流式处理、SQL 分析、数据科学和机器学习等多种类型的数据处理任务。与其它大数据平台相比,Apache Spark 的一大优势在于支持多种编程语言,包括 Python、SQL、Scala、Java 和 R,这使得构建和执行数据处理流水线更具灵活性。
Apache Spark 组件
Apache Spark 的核心在于其强大的架构设计。让我们深入了解构成 Spark 优秀大数据处理平台的关键组件。
Spark 生态系统包含以下主要组件:
-
核心功能:Spark Core 是 Apache Spark 的基础核心,承担着整个系统的基石作用。它提供了分布式任务调度、内存管理、容错恢复以及集群间的进程通信等基本功能,为系统运行奠定基础。Spark Core 支持 Scala、Java、Python 和 R 等多种编程语言,满足不同开发者的偏好。此外,它还支持内存计算,通过将数据缓存在内存中显著提升处理速度。
-
数据处理:在这一领域,
PySpark发挥着关键作用。PySpark 允许在 Spark 框架内使用 Python 进行数据处理、分析和操作。与此同时,Spark SQL 提供了对结构化和半结构化数据的处理能力,支持通过 SQL 查询进行数据操作。它能够处理多种格式的数据,如 CSV、Parquet 和 JSON 等。Spark Streaming 则用于实现可扩展、高吞吐量的实时数据流处理。此外,SparkR使用户能够通过 R 语言与 Spark 进行交互。 -
机器学习:
MLlib是 Spark 的机器学习库,内置了常见的机器学习算法,包括分类、回归、聚类和协同过滤等。该库专为处理大规模数据而设计,可在分布式集群上高效运行。 -
图计算:
GraphX是一个用于操作图数据结构并执行图计算(如 PageRank、三角计数)的模块。它还提供了一套图算法库和工具,便于构建基于图的应用程序。
Apache Spark 架构
Apache Spark 采用主从架构,其中主节点称为“驱动程序”(driver),从节点称为“工作节点”(workers)。这种设计使其能够在分布式环境中运行,从而在多个机器组成的集群上高效处理海量数据。
-
驱动程序:作为 Spark 应用的核心协调者,驱动程序负责多项关键任务。它将数据划分为多个小块,并将任务分发到集群中的各个工作节点。驱动程序运行 Spark 应用的主函数,全面控制和管理程序的整体执行流程。
-
工作节点:这些节点负责实际的计算任务。每个工作节点拥有专用的 CPU 核心和内存资源用于数据处理。启动 Spark 应用后,工作节点会向驱动程序注册,并等待任务分配。当接收到任务后,工作节点从存储系统获取所需数据,完成处理并将结果返回给驱动程序。每个工作节点还包含一个执行器(executor)用于执行任务,以及一个缓存机制以提高数据处理效率。
-
SparkContext:作为 Spark 应用的入口点,SparkContext实现了应用程序与集群之间的交互。它通过网络通信连接驱动程序与工作节点,负责关键的协调工作。自 Spark 3.0 起,新的入口点已改为SparkSession。 -
集群管理器:
SparkContext会与集群管理器(如 YARN、Mesos 或 Kubernetes)建立连接,获取应用执行所需的必要资源。
Apache Spark 的架构体现了其高度的灵活性、可扩展性和容错能力,能够高效地完成大规模数据处理任务。
Spark 集群管理器
Spark 提供了多种集群管理器,用于管理和分配计算资源以运行 Spark 应用:
-
独立模式(Standalone Mode):Spark 自带一个名为“独立模式”的内置集群管理器。这是一种简单的集群管理方案,允许我们在多台机器组成的集群上部署 Spark。它无需外部依赖,适用于开发和测试场景。
-
Apache Hadoop YARN:YARN 是 Apache Hadoop 生态系统中的集群管理框架。Spark 可以部署在 YARN 上,作为分布式处理框架,利用 YARN 的资源管理能力。在此模式下,YARN 充当集群管理器,负责资源分配和任务调度。Spark 可以在 YARN 上以客户端模式或集群模式运行,其中驱动程序可以运行在客户端机器上,也可以运行在 YARN 集群中的某个工作节点上。
-
Apache Mesos:Mesos 是一种支持分布式应用间资源隔离与共享的集群管理器。Spark 可以部署在 Mesos 上,利用其资源管理和任务调度能力。在此模式下,Mesos 作为集群管理器,负责 Spark 应用的资源分配和任务执行。Spark 同样支持在 Mesos 上以客户端模式和集群模式运行,与其他部署方式类似。
-
Kubernetes:Kubernetes 是一个开源的容器编排平台,用于自动化容器化应用的部署、扩展和管理。Spark 可以通过 Kubernetes 调度器来分配资源并调度任务。在此模式下,Kubernetes 扮演集群管理器的角色,负责 Spark 应用的部署与管理。
注意:这些部署方式可以组合使用,具体选择取决于实际需求、现有基础设施和团队偏好。Spark 提供了灵活的部署选项,可根据需要在独立机器、Hadoop 或 Mesos 集群、云平台或 Kubernetes 环境中运行。
Spark 部署方式
根据具体需求和基础设施的不同,Spark 可以采用多种部署方式。以下是常见的几种部署模式,各自适用于不同的使用场景和需求:
| 属性 | 类型 | 集群管理器 | 作业类型 | 交互方式 |
|---|---|---|---|---|
| 本地模式 | 在单台机器上运行 | 无 | 开发、测试、小规模作业 | 仅限单机,受限 |
| 独立模式 | 在集群上运行 | 内置管理器 | 本地部署、私有云环境 | 分布在多台机器上 |
| 集群模式 | 驱动程序在工作节点上 | 外部管理器 | 生产环境作业 | 集中式驱动程序,分布式任务执行 |
| 客户端模式 | 驱动程序在本地,任务在集群上 | 外部管理器 | 交互式会话、调试 | 本地驱动程序,分布式任务执行 |
在本课程中,我们将使用本地模式进行 Spark 部署。