1. 简述Spark on YARN运行过程 ?
"Spark on YARN"指的是在YARN(Yet Another Resource Negotiator)上运行Apache Spark应用程序的过程。YARN是Hadoop的一个组件,负责集群资源管理和作业调度。以下是Spark on YARN运行过程的简要概述:
-
环境准备:确保YARN集群已经部署并运行,Spark也已经安装并配置为与YARN集群协同工作。
-
提交作业:用户通过
spark-submit
脚本提交Spark作业到YARN集群。这个脚本会将作业的配置和依赖信息打包并发送给YARN。 -
资源申请:
spark-submit
向YARN资源管理器(ResourceManager)申请启动一个Spark应用程序。 -
启动ApplicationMaster:YARN ResourceManager响应
spark-submit
的请求,启动一个ApplicationMaster(AM)实例。AM是Spark作业在YARN集群中的协调者。 -
资源协商:ApplicationMaster向ResourceManager请求所需的资源(CPU、内存等),以便启动Executor。
-
调度任务:ApplicationMaster根据Spark作业的需求,将作业划分为多个任务,并根据集群资源情况调度这些任务。
-
启动Executor:YARN ResourceManager将任务分配给可用的NodeManager,每个NodeManager启动一个或多个Executor进程来执行任务。
-
任务执行:Executor接收到任务后,开始执行。Executor负责执行具体的计算任务,并与ApplicationMaster保持通信,报告任务状态。
-
数据本地性:Executor在执行任务时,会尽量利用数据本地性原则,即优先使用存储在本地节点上的数据,以减少数据传输的开销。
-
结果收集:任务执行完成后,结果被收集并返回给ApplicationMaster。
-
容错处理:如果Executor失败,ApplicationMaster会根据Spark的容错机制重新调度任务。
-
作业完成:当所有任务都成功执行完成后,ApplicationMaster向ResourceManager报告作业完成,并释放所有资源。
-
资源回收:YARN ResourceManager回收为该Spark作业分配的所有资源,包括CPU、内存和存储。
-
反馈结果:ApplicationMaster将最终的作业执行结果反馈给用户。
通过这种方式,Spark利用YARN作为其资源管理和任务调度的后端,可以有效地在Hadoop集群上运行和扩展Spark应用程序。这种集成使得Spark能够与Hadoop生态系统中的其他组件无缝协作。
2. 简述YARN-Client 与 YARN-Cluster 区别 ?
在Apache Spark中,YARN-Client和YARN-Cluster是两种不同的部署模式,它们在与YARN(Yet Another Resource Negotiator)资源管理器的交互方式上有所不同。以下是这两种模式的主要区别:
-
资源管理器交互:
- YARN-Client:在这种模式下,Spark的Driver程序运行在客户端机器上,而不是集群中。Driver通过与YARN的ResourceManager交互来申请资源,并监控作业的执行状态。
- YARN-Cluster:在这种模式下,Driver程序运行在集群中的一个节点上,