spark性能调优
spark性能优化点
- 分配更多的资源
1.1 分配哪些资源
1.2 在哪里可以设置这些资源
1.3 参数调节到多大,算是最大
分配更多的资源:
它是性能优化调优的王道,就是增加和分配更多的资源,这对于性能和速度上的提升是显而易见的,
基本上,在一定范围之内,增加资源与性能的提升,是成正比的;写完了一个复杂的spark作业之后,进行性能调
优的时候,首先第一步,就是要来调节最优的资源配置;在这个基础之上,如果说你的spark作业,能够分配的资源达到
了你的能力范围的顶端之后,无法再分配更多的资源了,公司资源有限;那么才是考虑去做后面的这些性能调优的点。
相关问题:
(1)分配哪些资源?
(2)在哪里可以设置这些资源?
(3)剖析为什么分配这些资源之后,性能可以得到提升?
executor‐memory、executor‐cores、driver‐memory
在实际的生产环境中,提交spark任务时,使用spark‐submit shell脚本,在里面调整对应的参数。
提交任务的脚本:
spark‐submit \
‐‐master spark://node1:7077 \
‐‐class cn.itcast.WordCount \
‐‐num‐executors 3 配置executor的数量
‐‐driver‐memory 1g 配置driver的内存(影响不大)
‐‐executor‐memory 1g 配置每一个executor的内存大小
‐‐executor‐cores 3 配置每一个executor的cpu个数
/export/servers/wordcount.jar
1.4 为什么调大资源以后性能可以提升
- 提高并行度
2.1 Spark的并行度指的是什么
第一种情况:standalone模式
先计算出公司spark集群上的所有资源 每台节点的内存大小和cpu核数,
比如:一共有20台worker节点,每台节点8g内存,10个cpu。
实际任务在给定资源的时候,可以给20个executor、每个executor的内存8g、每个executor的使用的cpu个数
10。
第二种情况:Yarn
先计算出yarn集群的所有大小,比如一共500g内存,100个cpu;
这个时候可以分配的最大资源,比如给定50个executor、每个executor的内存大小10g,每个executor使用的cpu
个数为2。
使用原则:你能使用的资源有多大,就尽量去调节到最大的大小(executor的数量:几十个到上百个不等;executor的
内存;exector的cpu个数)
2.2 如何提高并行度
2.2.1 可以设置task的数量
2.2.2 如何设置task数量来提高并行度
2.2.3 给RDD重新设置partition的数量
spark作业中,各个stage的task的数量,也就代表了spark作业在各个阶段stage的并行度!
当分配完所能分配的最大资源了,然后对应资源去调节程序的并行度,如果并行度没有与资源相匹配,那么导致你
分配下去的资源都浪费掉了。同时并行运行,还可以让每个task要处理的数量变少(很简单的原理。合理设置并行度,
可以充分利用集群资源,减少每个task处理数据量,而增加性能加快运行速度。)
举例说明:
假如, 现在已经在spark‐submit 脚本里面,给我们的spark作业分配了足够多的资源,比如50个executor ,每
个executor 有10G内存,每个executor有3个cpu core 。 基本已经达到了spark集群或者yarn集群上限。task没有
设置,或者设置的很少,比如就设置了100个task、50个executor、每个executor有3个core ,也就是说
Application 任何一个stage运行的时候,都有总数150个cpu core ,可以并行运行。
但是你现在只有100个task,平均分配一下,每个executor 分配到2个task,那么同时在运行的task,只有100个
task,每个executor 只会并行运行 2个task。 每个executor 剩下的一个cpu core 就浪费掉了!你的资源,虽然分
配充足了,但是问题是, 并行度没有与资源相匹配,导致你分配下去的资源都浪费掉了。合理的并行度的设置,应该要
设置的足够大,大到可以完全合理的利用你的集群资源; 比如上面的例子,总共集群有150个cpu core ,可以并行运
行150个task。那么你就应该将你的Application 的并行度,至少设置成150个,才能完全有效的利用你的集群资源,
让150个task并行执行,而且task增加到150个以后,即可以同时并行运行,还可以让每个task要处理的数量变少; 比
如总共150G的数据要处理, 如果是100个task ,每个task 要计算1.5G的数据。 现在增加到150个task,每个task只
要处理1G数据。
至少设置成与spark Application 的总cpu core 数量相同(最理想情况,150个core,分配150task,一起运
行,差不多同一时间运行完毕)官方推荐,task数量,设置成spark Application 总cpu core数量的2~3倍 。
比如150个cpu core ,基本设置task数量为300~500. 与理想情况不同的,有些task会运行快一点,比如50s就完
了,有些task 可能会慢一点,要一分半才运行完,所以如果你的task数量,刚好设置的跟cpu core 数量相同,可能会
导致资源的浪费。
因为比如150个task中10个先运行完了,剩余140个还在运行,但是这个时候,就有10个cpu core空闲出来了,导
致浪费。如果设置2~3倍,那么一个task运行完以后,另外一个task马上补上来,尽量让cpu core不要空闲。同时尽量
提升spark运行效率和速度。提升性能。
设置参数spark.defalut.parallelism
默认是没有值的,如果设置了值为10,它会在shuffle的过程才会起作用。
比如 val rdd2 = rdd1.reduceByKey(_+_)
此时rdd2的分区数就是10,rdd1的分区数不受这个参数的影响。
可以通过在构建SparkConf对象的时候设置,例如:
new SparkConf().set("spark.defalut.parallelism","500")
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
关于 Kubernetes 规划的灵魂 n 问
作者 | 易立阿里云资深技术专家 导读:Kubernetes 已经成为企业新一代云 IT 架构的重要基础设施,但是在企业部署和运维 Kubernetes 集群的过程中,依然充满了复杂性和困扰。 阿里云容器服务自从 2015 年上线后,目前托管着上万的 K8s 集群来支撑全球各地的客户。我们对客户在规划集群过程中经常会遇见的问题,进行一些分析解答。试图缓解大家的“选择恐惧症”。 如何选择Worker 节点实例规格? 裸金属还是虚拟机? 在 Dimanti 2019 年的容器调查报告中,对专有云用户选择裸金属服务器来运行容器的主要原因进行了分析。 选择裸金属服务器的最主要原因(超过 55%)是:传统虚拟化技术 I/O 损耗较大;对于 I/O 密集型应用,裸金属相比传统虚拟机有更好的性能表现; 此外近 36% 的客户认为:裸金属服务器可以降低成本
- 下一篇
DataWorks 2020-02 产品月刊
本月DataWorks产品月刊为您带来万字技术长文:《万字深度解析,飞天大数据平台DataWorks 如何撑起阿里99%的数据开发?》采购季最新活动—DataWorks标准版原价2500元现在仅需99元全新DataWorks百问百答系列,欢迎咨询各类产品使用问题。飞天大数据平台应用实战第一季回顾 【产品活动】 采购季限时!原价2500元现仅需99元,3分钟入门DataWorks标准版6大场景!点击查看【视频回顾】DataWorks云上战疫直播周—2020飞天大数据平台实战应用第一季点击查看 【产品技术文章】 1.万字深度解析,飞天大数据平台DataWorks 如何撑起阿里99%的数据开发?点击查看 2.任务不再等待!玩转DataWorks资源组点击查看 3.重磅发布!300页阿里巴巴大数据核心技术公开,速度收藏点击查看 4.数据分析之「数据探查」—帮您快速掌握数据情报点击查看 【产品百问百答】 DataWorks百问百答01:数据同步该用什么资源组?点击查看 【产品功能更新】 1.移动版DataWorks接入阿里云App抢先体验在被窝里轻松搞定任务运维,并支持产品开通、续费等操作。入口...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8安装Docker,最新的服务器搭配容器使用
- Hadoop3单机部署,实现最简伪集群
- MySQL8.0.19开启GTID主从同步CentOS8
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8编译安装MySQL8.0.19
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker快速安装Oracle11G,搭建oracle11g学习环境