Apache Spark架构解析

Apache Spark是一个统一的计算引擎和一组库,用于在计算机集群上进行并行数据处理。它是目前最活跃的开源引擎,对于任何对大数据感兴趣的开发者或数据科学家来说,它是一个标准工具。Spark支持多种广泛使用的编程语言(Python、Java、Scala和R),包括从SQL到流处理和机器学习的多样化任务库,并且可以从一台笔记本电脑扩展到数千台服务器的集群。这使得它成为一个易于上手和扩展到大数据或大规模处理的系统。

Apache Spark拥有来自200个组织的500多名贡献者负责代码,用户群体超过225,000名成员,已经成为主流和最抢手的大数据框架,横跨所有主要行业。像阿里巴巴这样的电子商务公司、像腾讯这样的社交网络公司以及像百度这样的中国搜索引擎,都在大规模运行Apache Spark操作。

本文是一个一站式资源,通过Spark架构图帮助了解Spark架构。

Spark应用程序的架构

以下是Apache Spark应用程序架构的高级组件:

驱动程序是Spark应用程序中的“驾驶员”。它是Spark应用程序执行的控制器,并维护Spark集群的所有状态(执行器的状态和任务)。它必须与集群管理器接口,以实际获得物理资源并启动执行器。

最终,这只是一台物理机器上的一个进程,负责维护在集群上运行的应用程序的状态。

Spark执行器是由Spark驱动程序分配任务的进程。执行器有一个核心责任:接受驱动程序分配的任务,运行它们,并报告它们的状态(成功或失败)和结果。每个Spark应用程序都有自己的独立执行器进程。

Spark驱动程序和执行器并不是孤立存在的,这就是集群管理器的用武之地。集群管理器负责维护将运行Spark应用程序的机器集群。

核心区别在于这些与物理机器相关联,而不是进程(如在Spark中)。插图左侧的机器是集群管理器驱动节点。圆圈代表在每个单独的工作节点上运行和管理的守护进程。目前还没有运行Spark应用程序——这些只是来自集群管理器的进程。

当实际运行Spark应用程序时,向集群管理器请求资源来运行它。根据应用程序的配置,这可能包括运行Spark驱动程序的地方,或者可能只是为Spark应用程序的执行器提供资源。在Spark应用程序执行过程中,集群管理器将负责管理应用程序运行的底层机器。

关于这个架构有几个有用的事情需要注意:

每个应用程序都有自己的执行器进程,这些进程在整个应用程序期间保持运行,并在多个线程中运行任务。这有好处,就是隔离应用程序,无论是在调度端(每个驱动程序调度自己的任务)还是执行器端(不同应用程序的任务在不同的JVM中运行)。

然而,这也意味着数据不能在不同的Spark应用程序(SparkContext的实例)之间共享,除非写入外部存储系统。

Spark对底层集群管理器是不可知的。只要它能够获得执行器进程,并且这些进程能够相互通信,即使在也支持其他应用程序的集群管理器上运行(例如Mesos/YARN),也是相对容易的。

驱动程序必须在其整个生命周期中监听并接受来自其执行器的传入连接(例如,参见网络配置部分中的spark.driver.port)。因此,驱动程序必须能够从工作节点网络地址访问。

由于驱动程序在集群上调度任务,因此最好在工作节点附近运行它,最好在同一个本地网络上。如果想远程向集群发送请求,最好打开一个RPC到驱动程序,并让它从附近提交操作,而不是远离工作节点运行驱动程序。

集群管理器类型

系统目前支持几种集群管理器:

Standalone

- Spark自带的简单集群管理器,可以轻松设置集群。

Apache Mesos

- 一个通用的集群管理器,也可以运行Hadoop MapReduce和服务应用程序。

Hadoop YARN

- Hadoop 2中的资源管理器。

Kubernetes

- 一个开源系统,用于自动化部署、扩展和管理容器化应用程序。

第三方项目(不受Spark项目支持)存在,以添加对Nomad作为集群管理器的支持。

执行模式

执行模式让可以确定上述资源在运行应用程序时的物理位置。有三种模式可供选择:

Cluster mode

- 集群模式可能是运行Spark应用程序的最常见方式。在集群模式下,用户向集群管理器提交预编译的JAR、Python脚本或R脚本。然后集群管理器在集群中的工作节点上启动驱动程序进程,以及执行器进程。这意味着集群管理器负责维护所有与Spark应用程序相关的进程。

Client mode

- 客户端模式与集群模式几乎相同,只是Spark驱动程序保留在提交应用程序的客户端机器上。这意味着客户端机器负责维护Spark驱动程序进程,集群管理器维护执行器进程。这些机器通常被称为网关机器或边缘节点。

Local mode

- 本地模式与前两种模式有很大的不同:它在单台机器上运行整个Spark应用程序。它通过在该单台机器上的线程实现并行性。这是学习Spark、测试应用程序或进行本地开发的迭代实验的常见方式。

然而,不建议使用本地模式运行生产应用程序。

建议阅读以下数据工程资源以增强知识:

Getting Started with Apache Hive – A Must Know Tool For all Big Data and Data Engineering Professionals Introduction to the Hadoop Ecosystem for Big Data and Data Engineering Types of Tables in Apache Hive – A Quick Overview

Q1. Spark流处理架构是什么?

Spark流处理帮助Spark处理实时数据。它将信息分解成小块,让快速分析进来的数据。

Q2. Apache Spark的主要概念是什么?

Apache Spark围绕RDD(将它们视为数据集)和两个主要操作:转换数据(改变它)和采取行动(用它做一些事情)。

Q3. Spark中RDD的架构是什么?

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485