python程序如何提交到spark上运行_Spark基础:集群运行

本文介绍了Spark如何在集群环境中运行Python程序,涉及Driver、Executor、Job、Stage和Task等核心概念。讲解了不同集群管理器类型,如Standalone、Mesos、YARN和Kubernetes,并强调了Driver程序在调度和通信中的关键作用。同时,提到了应用提交、监控和任务调度的细节,以及重要的部署模式选择。

bdc96cc8a37ec4132c7f3cd928959e70.png

本篇简单介绍Spark如何在集群中运行,从而可以更好的理解各个组件的关系,会涉及到Driver、Executor、Job、Stage、Task等基本概念。

1 组件

Spark应用都是独立的运行在集群中,通过主程序(Driver程序)中的SparkContext进行任务的协调。目前Spark支持在多种集群中运行,比如Spark Standalone, mesos, yarn等。当用户启动程序并与集群连接后,spark会在集群中申请executor节点,executor会执行用户的代码并为应用存储数据。接下来会把运行代码时需要的资源上传到executor所在的节点,比如通过sparkContext把jar包或者python文件分发到executor。最后SparkContext发送Task任务到executor开启执行。

b0d892f34e4bf98d9abce8cfb9a2d4b4.png

注意在上面的架构中有几点比较重要:

  • 每个应用都会有自己的executor进程,他们在应用运行期间会长期存活,并且通过多线程的方式执行任务。这样无论是在 driver的调度端还是executor的执行端,Spark应用都会彼此隔离互不干扰。不过这样也意味着不同的Spark应用间无法交换数据,不顾一般可以借助外部系统实现数据交换。
  • Spark对资源管理系统是透明的,一旦创建好了executor进程,他们彼此间会进行通信,因此Spark可以很容易的部署在mesos或者yarn上。
  • driver进程需要监听executor的连接,因此,driver程序一定要与其他的工作节点网络互通。
  • 由于driver程序负责调度集群中的任务,因此它最好更靠近工作节点,比如在工作节点相同的网络上运行(即driver最好放到executor所在的集群中)。如果你需要远程提交spark,也最好是远程与driver程序通信,而不是把driver放在本地(也就是说推荐使用cluster模式而不是client模式)。

2 集群管理器类型

目前spark支持的集群有:

  • standalone,spark自己组建起来的集群,一般不推荐生产环境用这个。
  • mesos,可以运行mapreduce或自定义应用
  • yarn, hadoop2中的资源管理器,目前大数据环境最推荐的方案。
  • Kubernetes,自动部署、水平扩展、容器化管理的开源系统,新型的方案但是与hadoop环境的集成不是特别好。

3 提交应用

可以通过spark-submit部署任务,后面会详细说道。

4 监控

每个driver程序都有自己的web ui,一般是4040,展示了运行中的任务、executors、存储资源使用情况等等,后面也会详细说到。

5 任务调度

Spark通过资源管理器实现物理资源的分配,通过SparkContext进行任务的协调,细节后面会说到。

6 术语

下面是在集群中常见的术语:

  • Application, 应用,用户编写的Spark代码,包含了driver代码和executor代码。
  • Application Jar,应用jar,包含了Spark应用的jar包。有的时候用户会创建一个胖jar,里面既包含应用代码也包含依赖的资源。用户定义的jar不应该包含hadoop和spark相关的jar,这些都会在运行时自动添加进来。
  • Driver program,运行Main方法的进程,在里面会创建SparkContext
  • Cluster Manager,资源管理系统,一般是负责管理资源的外部框架,如mesos, yarn等
  • Deploy Mode,部署模式,区分Driver程序运行在哪里,如果是cluster模式,driver会运行在集群内部;如果是client模式,则会运行在提交spark应用的程序里,一般在集群外。
  • Worker Node,工作节点,真正执行Spark任务的节点
  • Executor,在工作节点上启动的进程,运行任务并把数据保存在内存或磁盘,每个应用都会有自己的executor。
  • Task,任务执行的最小单元,一般rdd有多少个分区就会有多少个任务,每个任务运行在对应的分区上。
  • Job,多个Task的并行集合,一般由spark的特定操作触发,如save, collect等
  • Stage,每个Job会切分成多个Stage集合,一个Stage可以看做数据网络传输的边界,比如MapStage、ReduceStage。一般会通过shuffle来划分Stage.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值