[spark性能调优]spark submit资源参数调优及amazon集群示例

本文详细介绍了Spark作业的运行原理,包括资源申请与分配、Task执行和Executor内存管理。针对资源调优,讲解了Driver-memory、Num-executors、Executor-cores和Executor-memory等关键参数的调优建议。同时,提供了Amazon集群资源参数的示例,以帮助优化Spark作业在集群上的执行效率。
摘要由CSDN通过智能技术生成

目录

一、spark作业基本运行原理

二、资源参数调优

Spark内存管理:

三、amazon集群资源参数示例


 

一、spark作业基本运行原理

资源申请与分配:

       我们使用spark-submit提交一个spark作业后,这个作业会启动一个对应的Driver进程。根据使用的部署模式(deploy-mode)不同,Driver进程可能在本地启动(client mode),也可能在集群中某个工作节点启动(cluster mode)。Driver进程本身根据我们设置的参数,占有一定数量的内存和CPU core。而Driver进程要做的第一件事情,就是向集群管理器YARN申请运行spark作业需要使用的资源,这里的资源指的就是executor进程。YARN集群管理器会根据我们为spark作业设置的资源参数,在各个工作节点上,启动一定数量的executor进程,每个executor进程都占有一定数量的内存和CPU core。

Task分配:

       在申请到作业执行所需的资源后,Driver进程就会开始调度和执行我们编写的作业代码了。Driver进程会将我们编写的spark作业代码分拆为多个stage,每个stage执行一部分代码片段,并为每个stage创建一批task,然后将这些task分配到各个executor进程中执行。Task是最小的计算单元,负责执行一模一样的计算逻辑(也就是我们自己编写的某个代码片段),只是每个task处理的数据不同而已。一个stage的所有task都执行完毕之后,会在各个节点本地的磁盘文件中写入计算中间结果,然后driver就会调度运行下一个stage。下一个stage的输入数据就是上一个stage输出的中间结果。如此循环往复,直到将我们自己编写的代码逻辑全部执行完,并且计算完所有的数据,得到我们想要的结果为止。

       Spark是根据shuffle类算子来进行stage的划分。如果我们的代码中执行了某个shuffle类算子(比如reduceByKey、join等),那么就会在该算子处,划分出一个stage界限来。可以大致理解为,shuffle算子执行之前的代码会被划分为一个stage,shuffle算子执行以及之后的代码会被划分为下一个stage。因此一个stage刚开始执行时,每个task会从上一个stage的task所在的节点,去通过网络传输拉取需要自己处理的所有key,然后对拉取到的所有相同key使用我们自己编写的算子函数执行聚合操作(比如reduceBykey算子接收的函数)。这个过程就是shuffle。

Executor内存和CPU core

       当我们在代码中执行了cache/persist等持久化操作时,根据我们选择的持久化级别的不同,每个task计算出的数据也会保存到executor进程的内存或所在节点的磁盘文件中。

       Executor的内存主要分为三块:第一块是让task执行我们自己编写的代码时使用,默认是占executor总内存的20%;第二块是让task通过shuffle过程拉取上一个stage的task输出后,进行聚合等操作时使用,默认占executor总内存的20%;第三块是数据持久化时使用的,默认占executor总内存的60%。

      Task的执行速度是跟每个executor进程的CPU core数量有直接关系的。一个cup core 同一时间只能执行一个线程。而每个executor进程上分配到多个task,都是以每个task一条线程的方式,多线程并发运行的。如果CPUcore数量比较充足,而且分配到的task数量比较合理,那么通常来说,可以比较

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值