Spark各个运行环境的概念
Spark On Local模式
基本原理
本质启动一个JVM Process进程(一个进程里面有多个线程),执行任务Task
- Local模式可以限制模拟Spark集群环境的线程数量,即Local[N] 或 Local[*]
- 其中N代表可以使用N个线程,每个线程拥有一个cpucore。如果不指定N,则默认是1个线程(该线程有1个core)。通常cpu有几个Core,就指定几个线程最大化利用计算能力。
- 如果是loca[*],则代表 Run Spark locally with as many worker threads asLogical cores on your machine.按照Cpu最多的逻辑Cores设置线程数
Local 下的角色分布:
资源管理:
Master
:Local进程本身Worker
:Local进程本身
任务执行:
Driver
:Local进程本身Executor
:不存在,没有独立的Executor角色,由Local进程 (也就是Driver) 内的线程提供计算机能力
:::note Driver也是一种特殊的Executor,只不过多数时候,我们将Executor当做纯Worker对待,这样好与Driver区分
Local模式只能运行一个Spark程序,如果执行多个Spark程序,那就是由多个相互独立的Local进程在执行 :::
Spark On Standalone模式
Standalone
模式是Spark
自带的一种集群模式,不同于前面本地模式启动多个进程来模拟集群的环境,Standalone模式是真实地在多个机器之间搭建5park集群的环境,完全可以利用该模式搭建多机器集群,用于实际的大数据处理。
- StandAlone是完整的spark运行环境,其中:
- Master角色以Master进程存在
- Worker角色以Worker进程存在
- Driver角色在运行时存在
- Spark Standalone 集群中的主要进程
主节点 Master 进程:
- 角色:Master
- 作用:管理整个集群的资源,并托管运行各个任务的 Driver。
从节点 Worker 进程:
- 角色:Worker
- 作用:管理每台机器上的资源,并分配资源来运行 Executor(即 Task)。
- 每个从节点的资源信息由 Worker 进行管理,资源信息包括:
- 内存(Memory)
- CPU 核数(CPUCores)
- 每个从节点的资源信息由 Worker 进行管理,资源信息包括:
历史服务器 HistoryServer(可选):
- 作用:用于查看已运行应用的相关信息和日志,便于审计和调试。
:::note 在Standalone Client模式下,如果在Master 上提交应用,那么 Driver就在Master;如果在 Worker上提交应用,那么 Driver 就在 Worker :::
Spark On Standalone HA On Zookeeper 模式
HA模式原理
Master节点高可用:
- 在标准的 Standalone 模式下,只有一个 Master 进程负责管理整个集群。如果 Master 出现故障,集群将无法继续工作。而在 HA 模式下,可以配置多个 Master,Zookeeper 会负责 Master 的故障切换。
- Zookeeper 监控多个 Master 节点,其中一个 Master 被选为活跃 Master(Active Master),其余的 Master 作为备用(Standby Master)。
- 如果当前的活跃 Master 出现问题,Zookeeper 会从 Standby Master 中选取一个替代它,继续管理集群。
Driver 和 Executor 的管理:
- 当 Driver 进程与 Master 交互时,它会向 Zookeeper 查询当前的活跃 Master,避免由于 Master 切换造成任务的中断。
- Executor 依然由 Worker 节点负责运行,当切换 Master 时,Executor 不受影响。
Zookeeper 在 HA 模式中的作用:
- Leader选举:Zookeeper 通过领导者选举协议确保整个集群始终有一个活跃的 Master。
- 集群管理:Zookeeper 记录集群的 Master 角色状态,并对集群节点的变化(如新增或移除节点)进行监控。
- 故障切换:当活跃 Master 崩溃时,Zookeeper 立刻触发选举,选出新的活跃 Master 并更新集群配置。
工作流程
- 在 Spark Standalone 集群启动时,多个 Master 通过 Zookeeper 进行注册。
- Zookeeper 选举出一个活跃的 Master,其他的 Master 处于备用状态。
- 活跃 Master 负责调度集群中的任务,管理 Worker 节点。
- 如果活跃 Master 失效,Zookeeper 通过心跳检测发现异常,并立即选举出一个新的活跃 Master。
(图片来源)https://zhengxingtao.com/archives/sparkbu-shu-zhi-ha
HA 模式下的配置
为了实现 Master 的高可用性,集群的配置文件中需要添加以下配置:
配置
spark-env.sh
文件: 在所有 Master 节点上配置相同的 Zookeeper 地址:SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER \ -Dspark.deploy.zookeeper.url=<zk1>:2181,<zk2>:2181,<zk3>:2181 \ -Dspark.deploy.zookeeper.dir=/spark"
配置 Master 的启动脚本: 所有 Master 通过
spark-class
启动时,需要指定 HA 模式:./sbin/start-master.sh --host <master-host> --port <port> --webui-port <webui-port>
优势
- 容错性:Master 节点的故障不会导致集群中断,Zookeeper 能够迅速完成切换。
- 自动化管理:Zookeeper 负责监控集群状态,不需要人工介入管理。
- 扩展性:集群中的节点可以动态增加或减少,而不影响集群的正常运行。
Spark On Yarn模式
对于企业来说,在已有YARN集群的前提下在单独准备SparkStandAlone集群,对资源的利用就不高。所以,在企业中,多数场景下,会将spark运行到YARN集群中,
YARN本身是一个资源调度框架,负责对运行在内部的计算框架进行资源调度管理,作为典型的计算框架,Spark本身也是直接运行在YARN中,并接受YARN的调度的,
对于sparkOnYARN,无需部署Spark集群,只要找一台服务器,充当spark的客户端,即可提交任务到YARN集群中运行
Saprk On Yarn 的本质
- Master角色由YARN的ResourceManager担任
- Worker角色由YARN的NodeManager担任
- Driver角色运行在YARN容器内或提交任务的客户端进程中
- 真正干活的Executor运行在YARN提供的容器内
Cluster和Client部署模式
SparkOnYARN是有两种运行模式的,一种是Cluster模式一种是Client模式,
这两种模式的区别就是Driver运行的位置:
- Cluster模式即:Driver运行在YARN容器内部,和ApplicationMaster在同一个容器内
- Client模式即:Driver运行在客户端进程中,比如Driver运行在spark-submit程序的进程中
- ApplicationMaster 是 YARN中的核心概念,任何要在 YARN 上启动的作业类型(包括MR和 Spark)都必须有一个ApplicationMaster。
- 每种计算框架如果想要在YARN上执行自己的计算应用,那么就必须自己实现和提供一个 ApplicationMaster相当于自己实现YARN提供的接口去实现。
Client部署模式
Cluster部署模式
Cluster和Client对比
Driver运行位置 | 提供支撑 | 日志查看 | 生产问题 | 资源管理 | |
---|---|---|---|---|---|
Cluster模式 | YARN容器内 | 高 | 日志输出至容器内,查看不便 | 推荐 | 稳定 |
Client模式 | 客户端进程内 | 低 | 日志输出至客户端,便于详细出错追踪 | 不推荐 | 增大客户端进程复杂度,受到客户端进程稳定性的限制 |
下面整理了有关 Spark 中 Client 模式和 Cluster 模式的关键信息,特别强调了 Driver 程序的运行位置以及这对性能和稳定性的影响:
Client 模式
- 应用场景:主要适用于学习和测试环境。虽然在生产环境中也可使用,但一般不推荐,因为其性能和稳定性相对较低。
- Driver 运行位置:Driver 程序运行在客户端(Client)上。
- 通信成本:由于 Driver 位于客户端外部,与集群的通信成本较高。
- 结果显示:Driver 的输出结果直接在客户端显示,便于调试和错误追踪。
Cluster 模式
- 应用场景:推荐在生产环境中使用此模式,因为它更加稳定且性能优化。
- Driver 运行位置:Driver 程序运行在 YARN 集群中的一个节点上,通常是 ApplicationMaster。
- 通信成本:Driver 与集群的通信成本较低,因为它运行在集群内部。
- 结果显示:Driver 的输出结果不能在客户端直接显示。
- 管理与监控:Driver(ApplicationMaster)由 YARN 管理,如果遇到问题,YARN 能够自动重启 ApplicationMaster,从而提高应用的可用性和容错能力。