1. 并行度理解

 Spark作业中,各个stage的task的数量,代表Spark作业在各个阶段stage的并行度。 分为资源并行度(物理并行度)和数据并行度(逻辑并行度)

在Spark Application运行时,并行度可以从两个方面理解:

  • 1、资源的并行度:由节点数(executor)和CPU数(core)决定
  • 2、数据的并行度:task数量和partition大小
    • task又分为map时的task和reduce(shuffle)时的task;
    • task的数目和很多因素有关系,比如:资源的总core数、spark.default.parallelism参数、spark.sql.shuffle.partitions参数、读取数据源的类型、shuffle方法的第二个参数、repartition的数目等等。

 如果Task的数量越多,能用的资源也多,那并行度自然就好。如果Task的数据少,资源很多,有一定的浪费,但是也还好。如果Task数目很多,但是资源少,那么会执行完一批,再执行下一批,自然会慢一些。所以官方给出的建议是,这个Task数目是core总数的2~3倍为最佳(最大压榨CPU处理能量)。如果core有多少Task就有多少,那么有些比较快的task执行完了,一些资源就会处于等待的状态。

如何设置task数量:
 将task数量设置成与Application总CPU core数量相同(理想情况下,150个core分配150个task),官方推荐设置成Application总CPU 从热数量的2~3倍(150个CPU core,设置300~500个task);
 与理想情况不同的是:有些task会运行的快一些,比如50秒就完了,也有些task可能会慢一点,要几分钟才能完成,所以如果你的task数量,刚好设置跟CPU core数量相同,也可能会导致资源的一定浪费,比如150个task,10个先运行完了,剩余140个还在运行,但是这个时候,就有10个core会处于等待状态。

2. 设置Application并行度

 参数spark.default.parallelism默认是没有值的,如果设置了值,是在shuffle的过程才会起作用

new SparkConf().set("spark.default.parallelism","10")
// rdd2的分区数就是10,rdd1的分区数不受这个参数的影响
val rdd2 = rdd1.reduceByKey(_+_)

如何根据数据量(task数目)配置资源

 当提交一个Spark Application时,设置资源信息如下,基本已经达到了集群或者yarn队列的资源上限:

 task没有设置或者设置的很少,比如为100个task,平均分配一下,每个executor分配到2个task,每个executor剩下的一个CPU core就浪费掉了!

 虽然分配充足了,但是问题是:并行度没有与资源相匹配,导致分配下去的资源都浪费掉了。合理的并行度的设置,应该要设置的足够大,大到可以完全合理的利用你的集群资源。可以调整task数目,按照原则:Task数量,设置成Application总CPU core数量的2~3倍

实际项目中,往往依据数据数量(task数目)配置资源

Spark调优之 -- Spark的并行度深入理解(别再让资源浪费了)相关推荐

  1. 【Spark 调优】Spark 开发调优的十大原则

    Spark的调优是面试或者笔试考察的重点:总结下 1.开发调优: 原则一:避免创建重复的RDD. 原则二:尽可能复用同一个RDD. 原则三:对多次使用的RDD进行持久化. 原则四:尽量避免使用shuf ...

  2. Spark学习之Spark调优与调试(7)

    Spark学习之Spark调优与调试(7) 1. 对Spark进行调优与调试通常需要修改Spark应用运行时配置的选项. 当创建一个SparkContext时就会创建一个SparkConf实例. 2. ...

  3. rdd数据存内存 数据量_大数据开发-Spark调优常用手段

    Spark调优 spark调优常见手段,在生产中常常会遇到各种各样的问题,有事前原因,有事中原因,也有不规范原因,spark调优总结下来可以从下面几个点来调优. 1. 分配更多的资源 分配更多的资源: ...

  4. spark 写本地文件_(纯干货建议收藏)一次GC引发的Spark调优大全

    上一篇Tungsten On Spark-内存模型设计总结了Spark内存设计相关的知识点,本篇会快速为读者复习一下JVM相关的知识点,然后基于线上的GC调优对spark整体的调优做一个汇总,希望能让 ...

  5. Spark 中 JVM 内存使用及配置详情、spark报错与调优、Spark内存溢出OOM异常

    一般在我们开发spark程序的时候,从代码开发到上线以及后期的维护中,在整个过程中都需要涉及到调优的问题,即一开始需要考虑如何把代码写的更简洁高效调优(即代码优化),待开发测试完成后,提交任务时综合考 ...

  6. 跟我一起学【Spark】之——Spark调优与调试

    第8章 Spark调优与调试 1.总结Spark的配置机制 2.理解Spark应用性能表现的基础知识.设置相关配置项.编写高性能应用设计模式 3.探讨Spark的用户界面.执行的组成部分.日志机制 8 ...

  7. sparkcore分区_Spark学习:Spark源码和调优简介 Spark Core (二)

    本文基于 Spark 2.4.4 版本的源码,试图分析其 Core 模块的部分实现原理,其中如有错误,请指正.为了简化论述,将部分细节放到了源码中作为注释,因此正文中是主要内容. 第一部分内容见: S ...

  8. 【Spark】Spark调优 资源调优

    文章目录 1 Spark内存模型 2.执行流程 3.资源调优 1 Spark内存模型 Spark在一个Executor的内存分为三块, 1. 一块是execution内存 2. 一块是Storge 内 ...

  9. GC调优在Spark应用中的实践

    摘要:Spark立足内存计算,常常需要在内存中存放大量数据,因此也更依赖JVM的垃圾回收机制.与此同时,它也兼容批处理和流式处理,对于程序吞吐量和延迟都有较高要求,因此GC参数的调优在Spark应用实 ...

最新文章

  1. MOS2010开发基础和集几种开发模型
  2. android键盘ui,android – 在自定义键盘中重新调整候选视图的UI
  3. Python+selenium 自动化-selenium的版本查看和升级
  4. 聊聊我对开发项目选技术的看法
  5. RabbitMq的学习(一):VirtualHost
  6. 仿豆丁百度文库网页版阅读器完整解决方案
  7. Spring.NET 1.3.1 正式版已发布
  8. vue在线聊天系统源码
  9. google adsense 设置建议
  10. 终于有人把RISC-V讲明白了
  11. hibernate.cfg.xml ,hibernate.properties 关系
  12. delphi 获取计算机,Delphi中用GetTickCount获取计算机运行时间
  13. STM32示波器设计
  14. Flink SQL 之 Calcite Volcano优化器(源码解析)
  15. Ubuntu后台启动任务,关闭对话窗口不退出
  16. Stochastic Weight Averaging (SWA) 随机权重平均
  17. RabbitMq高级惰性列队
  18. 安卓:No static method decodeBase64,commen-code包里报错的信息
  19. HTML canvas系列-画圆(4)
  20. 【容易打工网】大学生职场励志箴言励志语录

热门文章

  1. 记录一次header manipulation的解决
  2. 白云黑土春晚争当火炬手 精彩台词提前曝光
  3. ods,dw,dm理解
  4. 解决Oracle表空间不足的情况
  5. Android生成动态视频,Android动态小视频设计
  6. 右键点击DataGridView的行时,将选中行改为点击的行
  7. 小白学python(爬虫知识3(数据保存xlwt)
  8. 零基础学习PHP编程——详解Apache、PHP和Mysql之间的关系
  9. 如何修复WordPress中的504网关超时错误
  10. java list 内存释放_java集合ArrayList中clear方法内存释放分析