深入浅出Spark啥是Standalone
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深入浅出Spark啥是Standalone相关的知识,希望对你有一定的参考价值。
参考技术ASpark有四种基本运行方式:
今天来讲讲前两个:Local Mode,在本地运行一个实例;和Standalone Mode,自己管理自己的集群。
Local Mode:
如下图所示,这台机器有8核,我们可以用—master local[12]启动Spark local模式,12代表12个task,Spark会启动一个JVM来运行程序(Executer)。
Standalone Mode:
当我们使用多台机器,而又不想用YARN等进行集群管理的时候,我们就可以采用Standalone模式。我们可以看到有一个机器成为Master来管理这个集群,并且每个机器会启动一个Worker,Worker使用Executer来执行任务。Worker会在Master注册,从而Master可以调度每个Worder的资源。现在RDD可以分布在不同的机器上,并且根据每个机器的处理能力不同,会分配不同数量的task。如果只有一个Master,这个Master一旦挂了怎么办呢?所以还有备用的Master,他们通过Zookeeper来进行管理实现高可用性(High Availablity) 。
:Spark环境搭建-StandAlone
Spark是大数据体系的明星产品,是一款高性能的分布式内存迭代计算框架,可以处理海量规模的数据。下面就带大家来学习!
往期内容:
一、Standalone 架构
Standalone模式是Spark自带的一种集群模式, 不同于前面本地模式启动多个进程来模拟集群的环境, Standalone模 式是真实地在多个机器之间搭建Spark集群的环境, 完全可以利用该模式搭建多机器集群,用于实际的大数据处理。
StandAlone 是完整的Spark运行环境,其中:Master角色以Master进程存在, Worker角色以Worker进程存在,river和Executor运行于Worker进程内, 由Worker提供资源供给它们运行。
StandAlone集群在进程上主要有3类进程:
- 主节点Master进程: Master角色, 管理整个集群资源,并托管运行各个任务的Driver
- 从节点Workers: Worker角色, 管理每个机器的资源,分配对应的资源来运行Executor(Task);
每个从节点分配资源信息给Worker管理,资源信息包含内存Memory和CPU Cores核数
- 历史服务器HistoryServer(可选): Spark Application运行完成以后,保存事件日志数据至HDFS,启动HistoryServer可以查看应用运行相关信息。
二、Standalone 环境安装操作
standalone环境可直接参考<<spark部署文档.doc>>中关于standalone安装操作
三、测试
注意:集群模式下程序是在集群上运行的,不要直接读取本地文件,应该读取hdfs上的
因为程序运行在集群上, 具体在哪个节点上我们运行并不知道,其他节点可能并没有那个数据文件
四、Spark 应用架构
登录到Spark HistoryServer历史服务器WEB UI界面,点击刚刚运行圆周率PI程序:
查看应用运行状况:
切换到【Executors】Tab页面:
从图中可以看到Spark Application运行到集群上时, 由两部分组成: Driver Program和Executors。
从图中可以看到Spark Application运行到集群上时,由两部分组成: Driver Program和Executors。
第一、 Driver Program
相当于AppMaster, 整个应用管理者,负责应用中所有Job的调度执行;
运行JVM Process,运行程序的MAIN函数, 必须创建SparkContext上下文对象;
一个SparkApplication仅有一个;
第二、 Executors
相当于一个线程池,运行JVM Process,其中有很多线程, 每个线程运行一个Task任务, 一个Task任务运行需要1 Core CPU,所
有可以认为Executor中线程数就等于CPU Core核数;
一个Spark Application可以有多个,可以设置个数和资源信息;
用户程序从最开始的提交到最终的计算执行,需要经历以下几个阶段:
1)、用户程序创建 SparkContext 时,新创建的 SparkContext 实例会连接到 ClusterManager。 Cluster Manager 会根据用户 提交时设置的 CPU 和内存等信息为本次提交分配计算资源,启动 Executor。
2)、 Driver会将用户程序划分为不同的执行阶段Stage,每个执行阶段Stage由一组完全相同Task组成,这些Task分别作用于待处 理数据的不同分区。在阶段划分完成和Task创建后, Driver会向Executor发送 Task;
3)、 Executor在接收到Task后, 会下载Task的运行时依赖,在准备好Task的执行环境后,会开始执行Task,并且将Task的运行状态 汇报给Driver;
4)、 Driver会根据收到的Task的运行状态来处理不同的状态更新。 Task分为两种:一种是Shuffle Map Task,它实现数据的重新 洗牌,洗牌的结果保存到Executor 所在节点的文件系统中;另外一种是Result Task,它负责生成结果数据;
5)、 Driver 会不断地调用Task,将Task发送到Executor执行,在所有的Task 都正确执行或者超过执行次数的限制仍然没有执行成 功时停止;
在前面我们接触到了不少的监控页面,有4040,有8080,有18080,它们有何区别吗?
4040: 是一个运行的Application在运行的过程中临时绑定的端口,用以查看当前任务的状态.4040被占用会顺延到4041.4042等。4040是一个临时端口,当前程序运行完成后, 4040就会被注销哦
8080: 默认是StandAlone下, Master角色(进程)的WEB端口,用以查看当前Master(集群)的状态
18080: 默认是历史服务器的端口, 由于每个程序运行完成后,4040端口就被注销了. 在以后想回看某个程序的运行状态就可以通过历史 服务器查看,历史服务器长期稳定运行,可供随时查看被记录的程序的运行过程.
运行起来一个Spark Application, 然后打开其4040端口,并查看:
/export/server/spark/bin/spark-shell --master spark://http://node1.itcast.cn:7077
在node1运行pyspark-shell, WEB UI监控页面地址: http://node1:4040
Spark程序运行层次结构
可以发现在一个Spark Application中,包含多个Job, 每个Job有多个Stage组成,每个Job执行按照DAG图进行的。
其中每个Stage中包含多个Task任务,每个Task以线程Thread方式执行,需要1Core CPU。
Spark Application程序运行时三个核心概念: Job、 Stage、
Task,说明如下:
- Job:由多个 Task 的并行计算部分,一般 Spark 中的 action 操作(如 save、 collect, 后面进一步说明), 会 生成一个 Job。
- Stage: Job 的组成单位,一个 Job 会切分成多个 Stage , Stage 彼此之间相互依赖顺序执行,而每个 Stage 是多 个 Task 的集合,类似 map 和 reduce stage。
- Task:被分配到各个 Executor 的单位工作内容,它是 Spark 中的最小执行单位,一般来说有多少个 Paritition
(物理层面的概念,即分支可以理解为将数据划分成不同部分并行处理),就会有多少个 Task,每个 Task 只会处
理单一分支上的数据。
以上是关于深入浅出Spark啥是Standalone的主要内容,如果未能解决你的问题,请参考以下文章