2024-02-21(Spark)

1.Spark程序中的相关端口

4040:是一个运行的Application在运行的过程中临时绑定的端口,用以查看当前任务的状态。4040被占用会顺延到4041,4042等。4040是一个临时端口,当前程序运行完成后,4040就会被注销。

4040和Driver相关联,一个Driver启动起来,一个4040端口就被绑定起来,并可以查看该程序的运行状态。

8080:默认情况是StandAlone下,Master角色(进程)的WEB端口,用以查看当前Master(集群)的状态。(Driver和Master是两个东西,Master进程用于管理集群,Driver用于管理某次运行的程序,某个Driver程序运行完成,其所绑定的4040端口释放,但不会影响到Master进程)

18080:默认是历史服务器的端口,由于每个程序运行完成后,4040端口就要被注销,在以后想回看某个程序的运行状态就可以通过历史服务器查看,历史服务器长期稳定运行,可供随时查看记录的程序的运行过程。

2.Spark程序运行的层次结构

在Spark程序中,一个Driver程序运行,会分为多个Job程序来执行;在一个Job程序中又可以分为多个阶段来执行;一个阶段又可以分为多个Task来执行(可以理解为多个线程并行执行)。

打扫学校举例eg:

3.StandAlone阶段小总结

StandAlone原理?

Master和Worker角色以独立进程的形式存在,并且它们之间相互通讯,组成Spark运行时环境(集群)

Spark角色在StandAlone中的分布?

Master角色:Master进程;Worker角色:Worker进程;Driver角色:以线程运行在Master进程中;Executor角色:以线程运行在Worker中。

StandAlone如何提交Spark应用?

bin/spark-submit -- master spark://server:7077

4040\8080\18080分别是什么?

4040是单个程序运行的时候绑定的端口可供查看本任务运行情况。

8080是Master进程运行时默认的WEB ui端口,Master是独立的进程,不和Worker也不和Driver绑定,所以Driver运行完不会影响Master进程的运行,Driver关闭不影响Master进程。

18080是历史服务器的端口,可以供我们查看历史运行的程序(Driver)的运行状态。

Job\State\Task的关系?

一个Spark程序会被分为多个子任务(Job)运行,每一个Job会被分为多个State(阶段)来运行,每一个State(阶段)内会被分为多个Task(线程)来执行具体的任务。

4.Spark StandAlone HA集群模式(其实就是高可用的StandAlone模式,引入了zookeeper来做主节点切换/"灾备"/"主备切换")

Spark StandAlone集群是Master-Slaves架构的集群模式,和大部分主从结构集群一样会存在主节点故障的问题。

由于上述StandAlone集群模式存在的问题,引出了高可用HA

提出了基于zookeeper的Standby Master架构模式:zookeeper提供了一个Leader Election机制,利用这个机制可以保证虽然集群存在多个Master,但是只有一个Active的,其他都是Standby。当Active的Master出现故障时,另外Standby Master会被选举出来。由于集群的信息,包括Master,Driver和Application的信息都已经持久化到文件系统,因此在切换的过程中只会影响新Job的提交,对于正在进行的Job没有任何影响。加入zookeeper的集群架构如下图所示:

5.StandAlone HA的搭建

搭建很简单,就是在StandAlone集群模式的配置文件中修改一两个配置项就好了。

6.StandAlone HA的原理

基于zookeeper做状态的维护,开启多个Master进程,一个作为活跃Master,其他的作为备份,当活跃进程宕机了,备份的Master来接管。

7.Spark on YARN(重点)

出现背景:按照前面所述,如果我们想要一个稳定的用于生产的Spark环境,那么最优秀的选择是构建HA StandAlone集群。但是,在企业中服务器资源通常有限,不过许多企业基本上都有Hadoop集群,也就是会有YARN集群。因此,对于企业来说,在已有YARN集群的前提下单独的搭建Spark StandAlone集群,对资源的利用率不高,所以,在企业中,多数场景下,会将Spark运行到YARN集群中。

YARN本身是一个资源调度框架,负责对运行在内部的计算框架进行资源调度管理。

作为典型的计算框架,Spark本身也是直接运行在YARN中,并接受YARN调度的。

所以,对于Spark on YARN,无需部署Spark集群,只要找一台服务器,从当Spark的客户端,即可提交任务到YARN集群中运行。(部署的时候,无需前面所述:在每一台服务器上安装Spark,然后启动Master,启动Worker,以及zookeeper什么的。。。,只需要在已有的YARN集群的基础上,找到一台服务器,充当Spark的客户端就可以了)

8.Spark on YARN的本质

Master角色由YARN的ResourceManager来担任。

Worker角色由YARN的NodeManager来担任。

Driver角色运行在YARN容器内 或者 提交任务的客户端进程中。

真正干活的Executor运行在YARN提供的容器内。

Spark on YARN集群架构图示:

9.Spark on YARN只需要注意配置好两个环境变量,HADOOP_CONF_DIR和YARN_CONF_DIR就好了。Spark会根据这两个环境变量的值自行的去找诸如ResourceManager这些东西。

10.Spark on YARN个人认为就是借助已有的YARN集群平台,来做Spark集群分布式计算操作(把计算任务提交到YARN集群中,以Spark的模式去运行),目的就是节约服务器资源

11.Spark on YARN的两种运行模式(两种模式的区别就是Driver运行的位置)

一种是Cluster模式:Driver运行在YARN容器内部,和ApplicationMaster在同一个容器内

一种是Client模式:Driver运行在客户端进程中,比如Driver运行在Spark-submit程序的进程中

集群(Cluster)模式的优点:各NodeManager和Driver之间的通信成本低,效率高;缺点:不方便查看日志,因为Driver运行在某个容器当中,日志会输出到某个容器当中,因此在查看日志这个方面,客户端(Client)模式具有优势,不过客户端的通信性能当然就没有集群模式高了。

对比图:

两种模式对比总结

12.Spark on YARN两种模式的流程

客户端模式流程:

集群模式流程:

13.Spark on YARN小总结

Spark on YARN本质?

Master由ResourceManager代替

Worker由NodeManager代替

Driver可以运行容器内(Cluster模式)或者客户端进程中(Client模式)

Executor全部运行在YARN提供的容器内

为什么要用spark on YARN?

提高资源利用率,在已有YARN的场景下让Spark收到YARN的调度可以更好地管控资源提高利用率并方便管理。

14.类库和框架

类库:一堆别人写好的代码,你可以导入使用。

框架:可以独立运行,并提供编程结构的一种软件产品,Spark就是一个独立的框架。

15.PySpark

前面使用的bin/pyspark程序,注意这是一个应用程序,提供一个python解释器执行环境来运行spark任务

而PySpark,指的是Python的运行类库,就是可以在python代码中:import pyspark; 这种操作

概念:PySpark是Spark官方提供的一个Python类库,内置了完全的Spark API,可以通过PySpark类库来编写Spark应用程序,并将其提交到Spark集群中运行。

相关推荐
快手技术7 小时前
Blaze RangePartitioning 算子Native实现全解析
spark·naive
知初~1 天前
出行项目案例
hive·hadoop·redis·sql·mysql·spark·database
努力的小T1 天前
使用 Docker 部署 Apache Spark 集群教程
linux·运维·服务器·docker·容器·spark·云计算
Java资深爱好者1 天前
在Spark中,如何使用DataFrame进行高效的数据处理
大数据·分布式·spark
阿里云大数据AI技术2 天前
美的楼宇科技基于阿里云 EMR Serverless Spark 构建 LakeHouse 湖仓数据平台
大数据·阿里云·spark·serverless·emr
python资深爱好者2 天前
什么容错性以及Spark Streaming如何保证容错性
大数据·分布式·spark
猪猪果泡酒2 天前
spark
spark
weixin_307779132 天前
PySpark实现MERGE INTO的数据合并功能
大数据·python·spark
lucky_syq3 天前
Spark算子:大数据处理的魔法棒
大数据·分布式·spark
D愿你归来仍是少年3 天前
解决Python升级导致PySpark任务异常方案
大数据·开发语言·python·spark