Spark 官方文档(2)——集群模式
Spark版本:1.6.2 简介:本文档简短的介绍了spark如何在集群中运行,便于理解spark相关组件。可以通过阅读应用提交文档了解如何在集群中提交应用。
组件
spark应用程序通过主程序的SparkContext对象进行协调,在集群上通过一系列独立的处理流程运行。
为了便于迁移,SparkContext可以支持多种类型的集群管理器(spark standalone、Yarn、Mesos)。当与集群管理器创建连接后,spark在集群的节点上面申请executors,用于处理应用程序中的计算任务和数据存储。然后executors将一个用的代码发送到各个executors,最后SparkContext发送tasks到各个executor执行。
关于spark架构有一些内容需要指出:
- 每个应用都有自己的executor,他们会在应用程序的整个生命周期内一直存活,这样有利于应用间调度和executor的隔离。但这样也就意味着不同应用之间只能通过外部存储系统进行沟通。
- Spark对于底层的集群管理系统并不知晓,他们能在不同集群上进行资源申请,并提供一致的接口进行通信和计算处理。
- 在应用的整个生命周期内,Driver程序需要监听和接受executors的信息,因此driver程序对于worker节点来说要可以通过网络寻址定位的。
- 由于Driver程序调度集群上面的任务,因而driver最好与worker在同一个网段运行,若远程执行最好开通RPC。
集群类型
目前Spark支持以下三种集群管理:
- Standalone —— spark自带的集群管理器
- Apache Mesos —— 一种可以运行Hadoop Mapreduce的通用集群管理
- Hadoop Yarn —— Hadoop2的集群管理 除此之外,Spark Ec2脚本可以在Amazon EC2上面运行spark standalone模式。
提交应用
通过spark-submit在集群上提交应用程序
监控
每个驱动程序都有一个web UI进行监控,默认端口是4040,展示了正在运行的task、executors和storage usage。通过http://<driver-node>:4040
可以对应用程序进行监控。监控界面简介
作业调度
Spark可以通过代码进行应用内和应用间的集群管理级别的资源分配。作业监控进行了详细介绍。
相关术语
下面对集群中常用的术语进行了介绍:
术语 | 解释 |
---|---|
Application | 用户基于Spark创建的应用程序,包含一个Driver程序和集群上一系列的executor |
Application jar | 用户程序的jar包,需要包含第三方依赖,但不应该包含spark库,这些应该在集群环境中运行时提供 |
Driver program | 运行main函数、创建SparkContext的程序 |
Cluster manager | 申请集群资源的额外的管理器 |
Deploy mode | 区分Driver运行的位置,若是cluster则驱动程序在集群内的节点上运行,若是client则驱动程序在集群外节点运行 |
Worker node | 集群中可以进行计算的节点 |
Executor | 应用在工作节点上的执行器,运行程序同时存储数据。每个应用有自己的executor |
Task | Executor内部执行计算的单元 |
Job | 由Action引起的多个task并行的计算单元,可以在driver日志查看 |
Stage | 每个Job被划分为task,然后根据情况合并为stage |