spark提交任务流程
spark提交代码的两种方式:Standalone、Yarn
独立部署(Standalone)模式由spark自身提供计算资源,无需其他框架提供资源。这种方式降低了和其他第三方资源框架的耦合性,独立性非常强。但spark主要是计算框架,不是资源调度框架,所以本身提供的资源调度并不是它的强项,所以还是和其他专业的资源调度框架集成会更靠谱一些。
Standalone
1、standalone-client提交任务方式
--master spark://node1:7077
--deploy-mode client
总结:
client模式适用于测试调试程序。Driver进程是在客户端启动的,这里的客户端就是指提交应用程序的当前节点。在Driver端可以看到task执行的情况。生产环境下不能使用client模式,是因为:假设要提交100个application到集群运行,Driver每次都会在client端启动,那么就会导致客户端100次网卡流量暴增的问题。
2、standalone-cluster提交任务方式
--master spark://node1:7077
--deploy-mode cluster
总结:
Driver进程是在集群某一台Worker上启动的,在客户端是无法查看task的执行情况的。假设要提交100个application到集群运行,每次Driver会随机在集群中某一台Worker上启动,那么这100次网卡流量暴增的问题就散布在集群上。
总结Standalone两种方式提交任务,Driver与集群的通信包括
Driver负责应用程序资源的申请
任务的分发。
结果的回收。
监控task执行情况。
Spark on Yarn
Client模式:
-
用户在本地客户端机器上通过
spark-submit
命令提交Spark任务。 -
在提交命令中,用户指定YARN为集群管理器,并设置模式为Client模式。
-
spark-submit
将用户的应用程序打包,并将依赖、配置文件和资源上传到HDFS。 -
Driver程序在客户端机器上启动,然后向YARN ResourceManager发送启动ApplicationMaster的请求。
-
ResourceManager根据请求启动一个ApplicationMaster实例,同时为其分配一个容器。
-
ApplicationMaster向ResourceManager申请计算资源,以便启动Executor。
-
ResourceManager为Executor分配资源,并在各个节点上启动Executor容器。
-
Driver程序将Spark应用程序的任务划分为多个TaskSet,然后将这些任务分发给已启动的Executor。
-
Executor开始执行任务,处理数据,并根据需要与其他Executor之间进行数据交换(Shuffle)。
-
在任务执行期间,Driver程序会实时监控任务进度和状态。
-
当所有任务完成后,Driver程序会收集和处理任务执行结果,并输出结果。
-
最后,Driver程序会通知ApplicationMaster关闭,并释放Executor和其他资源。
Cluster模式:
-
用户在本地客户端机器上通过
spark-submit
命令提交Spark任务。 -
在提交命令中,用户指定YARN为集群管理器,并设置模式为Cluster模式。
-
spark-submit
将用户的应用程序打包,并将依赖、配置文件和资源上传到HDFS。 -
Driver程序将在ApplicationMaster中运行。向YARN ResourceManager发送启动ApplicationMaster的请求。
-
ResourceManager根据请求启动一个ApplicationMaster实例,同时为其分配一个容器。
-
ApplicationMaster(同时包含Driver程序)启动后,向ResourceManager申请计算资源,以便启动Executor。
-
ResourceManager为Executor分配资源,并在各个节点上启动Executor容器。
-
Driver程序将Spark应用程序的任务划分为多个TaskSet,然后将这些任务分发给已启动的Executor。
-
Executor开始执行任务,处理数据,并根据需要与其他Executor之间进行数据交换(Shuffle)。
-
在任务执行期间,Driver程序会实时监控任务进度和状态。
-
当所有任务完成后,Driver程序会收集和处理任务执行结果,并输出结果。
-
最后,Driver程序会通知ApplicationMaster关闭,并释放Executor和其他资源。
总结:两种模式的主要区别在于Driver程序运行的位置。在Client模式下,Driver程序运行在提交任务的客户端机器上。在Cluster模式下,Driver程序运行在ApplicationMaster中。其他执行步骤基本相同。
"cluster模式"和"client模式"主要指的是运行Spark应用程序时,Driver程序所在的位置不同。以下是它们之间的主要区别:
Driver程序位置:
Cluster模式:Driver程序在集群中运行,通常由集群管理器(如YARN、Mesos或Standalone)启动。在YARN中,Driver程序会运行在一个由ApplicationMaster管理的容器中。
Client模式:Driver程序在提交Spark任务的客户端机器上运行。这意味着客户端机器需要保持在线,直到Spark应用程序完成。
任务监控:
Cluster模式:由于Driver程序在集群中运行,任务的监控和管理可以在集群内完成,与提交任务的客户端机器无关。即使客户端机器断开连接,应用程序也会继续运行。
Client模式:在此模式下,Driver程序在客户端机器上运行,因此任务的监控和管理需要在客户端机器上进行。如果客户端机器不可用,那么整个应用程序可能受到影响。
资源分配和管理:
Cluster模式:集群管理器负责为Driver程序和Executor分配资源。这意味着整个应用程序的资源使用情况都由集群管理器控制,可以更好地进行资源调度和管理。
Client模式:Driver程序在客户端机器上运行,而Executor仍然由集群管理器分配资源。这可能导致资源分配和管理不够集中,影响整个应用程序的性能。
日志和调试:
Cluster模式:Driver程序和Executor的日志都存储在集群中,可以通过集群管理器的监控界面查看。这使得日志分析和故障排查变得更加集中化。
Client模式:Driver程序的日志在客户端机器上生成,而Executor的日志仍然存储在集群中。这可能使日志分析和故障排查变得更加分散。
总之,在选择cluster模式还是client模式时,需要根据具体的应用场景和需求进行权衡。Cluster模式更适合于生产环境,因为它可以更好地管理资源、监控任务并集中处理日志。而Client模式则适用于开发和调试阶段,因为它能够更方便地查看Driver程序的输出和日志。
停止集群任务命令:yarn application -kill applicationID
CSDN-Ada助手: 推荐 Java 技能树:https://edu.csdn.net/skill/java?utm_source=AI_act_java