Standalone模式是Spark自带的一种集群模式,不同于前面本地模式启动多个进程来模拟集群的环境,Standalone模式是真实地在多个机器之间搭建Spark集群的环境,完全可以利用该模式搭建多机器集群,用于实际的大数据处理。
二、本质Standalone集群使用了分布式计算中的master-slave模型,master是集群中含有Master进程的节点,slave是集群中的Worker节点含有Executor进程。
三、成员角色主节点Master:管理整个集群资源,接收提交应用,分配资源给每个应用,运行Task任务从节点Workers:管理每个机器的资源,分配对应的资源来运行Task;每个从节点分配资源信息给Worker管理,资源信息包含内存Memory和CPU Cores核数历史服务器HistoryServer(可选):Spark Application运行完成以后,保存事件日志数据至HDFS,启动HistoryServer可以查看应用运行相关信息。 四、运行部分
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可以有多个,可以设置个数和资源信息; 五、程序执行阶段
- 用户程序创建 SparkContext 时,新创建的 SparkContext 实例会连接到 ClusterManager。 Cluster Manager 会根据用户提交时设置的 CPU 和内存等信息为本次提交分配计算资源,启动 Executor。Driver会将用户程序划分为不同的执行阶段Stage,每个执行阶段Stage由一组完全相同Task组成,这些Task分别作用于待处理数据的不同分区。在阶段划分完成和Task创建后, Driver会向Executor发送 Task;Executor在接收到Task后,会下载Task的运行时依赖,在准备好Task的执行环境后,会开始执行Task,并且将Task的运行状态汇报给Driver;Driver会根据收到的Task的运行状态来处理不同的状态更新。 Task分为两种:一种是Shuffle Map Task,它实现数据的重新洗牌,洗牌的结果保存到Executor 所在节点的文件系统中;另外一种是Result Task,它负责生成结果数据;Driver 会不断地调用Task,将Task发送到Executor执行,在所有的Task 都正确执行或者超过执行次数的限制仍然没有执行成功时停止;
Task:被分配到各个 Executor 的单位工作内容,它是 Spark 中的最小执行单位,一般来说有多少个 Paritition(物理层面的概念,即分支可以理解为将数据划分成不同部分并行处理),就会有多少个 Task,每个 Task 只会处理单一分支上的数据。Job:由多个 Task 的并行计算部分,一般 Spark 中的 action 操作(如 save、collect,后面进一步说明),会生成一个 Job。Stage:Job 的组成单位,一个 Job 会切分成多个 Stage,Stage 彼此之间相互依赖顺序执行,而每个 Stage 是多个 Task 的集合,类似 map 和 reduce stage。 七、Spark Standalone部署模式DeployMode 一、介绍
Spark Application提交运行时部署模式Deploy Mode,表示的是Driver Program运行的地方,要么是提交应用的Client:client,要么是集群中从节点(Standalone:Worker,YARN:NodeManager):cluster。
二、两种模式区别Cluster和Client模式最最本质的区别是:Driver程序运行在哪里。
三、client模式Driver 在本地运行Executor 在集群的Worker节点上运行以Spark Application运行到Standalone集群上为例,前面提交运行圆周率PI或者词频统计WordCount程序时,默认DeployMode为Client,表示应用Driver Program运行在提交应用Client主机上(启动JVM Process进程),示意图如下:
# 假设运行圆周率PI程序,采用client模式,命令如下:
SPARK_HOME=/export/server/spark
${SPARK_HOME}/bin/spark-submit
--master spark://node1.itcast.cn:7077,node2.itcast.cn:7077
--deploy-mode client
--driver-memory 512m
--executor-memory 512m
--num-executors 1
--total-executor-cores 2
--conf "spark.pyspark.driver.python=/root/anaconda3/bin/python3"
--conf "spark.pyspark.python=/root/anaconda3/bin/python3"
${SPARK_HOME}/examples/src/main/python/pi.py
四、cluster模式
在cluster模式中,无论是Driver还是Executor都是运行在Worker节点上。
注意:
测试运行程序时,可以使用client和cluster部署模式生产环境中,建议使用cluster部署模式,必须使用此种模式
如果采用cluster模式运行应用,应用Driver Program运行在集群从节点Worker某台机器上,示意图如下
# 假设运行圆周率PI程序,采用cluster模式,命令如下:
SPARK_HOME=/export/server/spark
${SPARK_HOME}/bin/spark-submit
--master spark://node1.itcast.cn:7077,node2.itcast.cn:7077
--deploy-mode cluster
--driver-memory 512m
--executor-memory 512m
--num-executors 1
--total-executor-cores 2
--conf "spark.pyspark.driver.python=/root/anaconda3/bin/python3"
--conf "spark.pyspark.python=/root/anaconda3/bin/python3"
${SPARK_HOME}/examples/src/main/python/pi.py
10



