简介
Apache Spark是一个统一的分析引擎,用于大规模数据处理。相对于 MapReduce 的批处理计算,Spark 可以带来上百倍的性能提升,因此它成为继 MapReduce 之后,最为广泛使用的分布式计算框架。
它为Java,Scala,Python和R以及支持一般执行图的优化引擎提供高级API。它还支持丰富的高级工具集,包括SQL和结构化数据处理的Spark SQL,MLLIB用于机器学习,图形处理的Graphx,以及用于增量计算和流处理的结构化流。
架构
Spark应用程序在集群中以独立的进程集合运行,由主程序中创建的SparkContext对象进行调度(称之为驱动程序 Driver Program)。
为了在集群中运行,SparkContext需要连接到几种集群管理器(用于分配应用资源,可以是自己独立的集群管理器、Mesos或YARN)上,一旦建立连接,Spark将获取到集群中的具体执行器(用于对你的应用进行计算和存储的进程)。接下来,SparkContext传送jar或python文件到执行器,并将task发送到执行器中执行。
有几点需要注意:
- 每一个应用都有自己的执行进程,它们将存在于应用的整个生命周期并以多线程方式运行任务。这有利于对不同的应用进行隔离,无论是调度侧(每个driver调度自己的任务)还是执行侧(不同应用的任务运行在不同的jvm进程中,如何做到,待验证??)。另外,同时也意味着不能在不同的Spark应用间进行数据共享(在没有使用统一存储系统时)
- Spark与集群管理器无关。这话怎么说呢,不是必须组件吗,怎么无关了!!是这样,一旦Spark获取到了执行进程,他们将不再通过集群管理器进行交互,而是直接进行通信
- 驱动程序必须能够接收即将到来的执行器请求,所以,它是一个运行在网络可达的工作节点上
- 任务调度尽可能的离工作节点近,最好是在同一局域网内,如果想远程发送请求,最好是对其局域网内的驱动进行远程调用,并通过其提交操作指令。
集群管理器有以下几个
- Standalone
- Apache Mesos
- Hadoop YARN
- Kuernetes
术语 | 含义 |
---|---|
Application | Spark 应用程序,由集群上的一个 Driver 节点和多个 Executor 节点组成。 |
Driver program | 主运用程序,该进程运行应用的 main() 方法并且创建 SparkContext |
Cluster manager | 集群资源管理器(例如,Standlone Manager,Mesos,YARN) |
Worker node | 执行计算任务的工作节点 |
Executor | 位于工作节点上的应用进程,负责执行计算任务并且将输出数据保存到内存或者磁盘中 |
Task | 被发送到 Executor 中的工作单元 |