Spark性能测试报告与调优参数

1、代码中尽量避免group by函数,如果需要数据聚合,group形式的为rdd.map(x=>(x.chatAt(0),x)).groupbyKey().mapValues((x=>x.toSet.size)).collection() 改为 rdd.map(x=>(x.chatAt(0),x)).countByKey();或进行reduceByKey,效率会提高3倍。

2、parquet存储的文件格式查询会比sequenceFile快两倍以上,当然这是在select * from的情况下,但其实100+列的情况下,我们做数据分析很少用到select * ,那么parquet列式存储会更加高效,因为读取一个Parquet文件时,需要完全读取Footer的meatadata,Parquet格式文件不需要读取sync markers这样的标记分割查找。

3、spark.rdd.compress 参数,个参数决定了RDD Cache的过程中,RDD数据在序列化之后是否进一步进行压缩再储存到内存或磁盘上。当然是为了进一步减小Cache数据的尺寸,如果在磁盘IO的确成为问题或者GC问题真的没有其它更好的解决办法的时候,可以考虑启用RDD压缩。

4、spark.shuffle.manage 我建议使用hash,同时与参数spark.shuffle.consolidateFiles true并用。因为不需要对中间结果进行排序,同时合并中间文件的个数,从而减少打开文件的性能消耗。

5、首先,shuffle过程,与result过程都会将数据返回driver端,JVM参数过少会导致driver端老年代也塞满,容易full GC,同时会经常发生GC,因为核数少,所以每个核可以承载更多的数据,那么一下子返回给driver,就塞满新生代,发生GC。监控页面就发现GC time比多核的要高。

6、这里的limit是直接limit全表的,并没有做where分区limit。 同时left join自关联,即便内存不够的情况下,spark依旧会写入磁盘,但任务相当的慢。

7、发现我们的数据基本没有分库,最好分一下库,如果以后多个部门使用,那么在default中进行各部门数据的梳理生成,最终生成到不同的库中,防止数据杂乱无章。

8、分表,我们现在的数据是按dt字段分区的,没有分表,如果前台查询没有分区,将会造成OOM。 是否可以按照table_name_20161108这种方式,按日生成,那么select * from tablename 也不会造成Spark卡死,其他任务等待。

9、在一个executor实例中,多核会拉起多个task同时并行计算,会比单核计算要快很多。后续用例调整参数,增加与生产同等配置的情况下再进行测试。

10、注意一点,spark监控页面与driver端共享监控页面,可以去查看各个节点containner的运行情况,尽量少的直接点进去看DAG或task运行情况,否则大的任务task数据展示,也是容易导致JVM对内存溢出。

11、CPU瞬时的使用率大概在100-200%左右,最高持续6秒,随后降至百分之2%左右

12、并发极端的情况还未完全测试,但以spark的原理,倘若第一个任务没有占满spark的总并发数,那么另一个任务将会在这些空闲的task中进行轮训执行。 整个调度由DAG控制。

13、spark.speculation true 推测执行,这个参数用来比如有数据倾斜或者某个task比较慢的情况下,会另起一个task进行计算,哪个先完成就返回哪个结果集。但是在spark1.3版本的时候,有中间tmp文件缺失的情况,会报找不到hdfs路径下的文件。所以,推测执行这个参数不知道在spark1.6是否修复,后续进行测试。

14、spark.task.maxFailures 10 这个参数的作用主要是在task失败的情况之下,重试的次数,超过这个次数将会kill掉整个job 这种情况比如网络IO fetch数据失败等情况。

15、spark.storage.memoryFraction 0.5 这个参数 考虑稳定性GC与效率问题,决定使用0.5这个参数。

16、spark.sql.shuffle.partitions 200 经测试修改到400并没有变得更快,是因为给的内存足以进行task的计算,在具体情况下代码中set。

17、spark.kryoserializer.buffer.max 数据传输序列化最大值,这个通常用户各服务器之间的数据传输,这里给到最大10g

18、spark.default.parallelism 3 可使一个core同时执行2-3个task,在代码中通过传入numPartitions 参数来改变。(还需深入测试)

19、spark.reducer.maxSizeInFlight 128M 在Shuffle的时候,Reducer端获取数据会有一个指定大小的缓存空间,如果内存足够大的情况下,可以适当的增大缓存空间,否则会spill到磁盘上影响效率。因为我们的内存足够大。

20、spark.shuffle.file.buffer 128M ShuffleMapTask端通常也会增大Map任务的写磁盘的缓存

时间: 2024-10-11 14:43:36

Spark性能测试报告与调优参数的相关文章

JVM性能调优2:JVM性能调优参数整理

本系列包括: JVM性能调优1:JVM性能调优理论及实践(收集整理) JVM性能调优2:JVM性能调优参数整理 JVM性能调优3:JVM_堆溢出分析过程和命令 JVm性能调优4:GC日志分析 JVM性能调优5:Heap堆分析方法  序号 参数名 说明 JDK 默认值 使用过 1 JVM执行模式 2 -client -server 设置该JVM运行与Client 或者Server Hotspot模式,这两种模式从本质上来说是在JVM中运行不同的JIT(运行时编译模块)代码,并且两者在JVM内部

转:Dubbo性能调优参数及原理

from: https://www.cnblogs.com/cyfonly/p/8987043.html 文是针对 Dubbo 协议调用的调优指导,详细说明常用调优参数的作用域及源码. Dubbo调用模型 常用性能调优参数 参数名 作用范围 默认值 说明 备注 threads provider 200 业务处理线程池大小   iothreads provider CPU+1 io线程池大小   queues provider 0 线程池队列大小,当线程池满时,排队等待执行的队列大小, 建议不要设

性能测试分析与性能调优诊断--史上最全的服务器性能分析监控调优篇

一个系统或者网站在功能开发完成后一般最终都需要部署到服务器上运行,那么服务器的性能监控和分析就显得非常重要了,选用什么配置的服务器.如何对服务器进行调优.如何从服务器监控中发现程序的性能问题. 如何判断服务器的瓶颈在哪里等 就成为了服务器性能监控和分析时重点需要去解决的问题了. 1     服务器的性能监控和分析 1.1      Linux服务器的性能指标监控和分析 1.1.1       通过vmstat深挖服务器的性能问题 1.1.2       如何通过mpstat 分析服务器的性能指标

hadoop作业调优参数整理及原理

1 Map side tuning参数 1.1 MapTask运行内部原理 当map task开始运算,并产生中间数据时,其产生的中间结果并非直接就简单的写入磁盘.这中间的过程比较复杂,并且利用到了内存buffer来进行已经产生的部分结果的缓存,并在内存buffer中进行一些预排序来优化整个map的性能.如上图所示,每一个map都会对应存在一个内存buffer(MapOutputBuffer,即上图的buffer in memory),map会将已经产生的部分结果先写入到该buffer中,这个b

MySQL写压力性能监控与调优

写压力调优:数据库的写.写压力性能监控.写压力调优参数 一.关于DB的写 1.数据库是一个写频繁的系统 2.后台写.写缓存 3.commit需要写入 4.写缓存失效或者写满-->写压力陡增-->写占读的带宽 1.BBU失效 2.写入突然增加.cache满 5.日志写入.脏缓冲区写入 二.写压力性能监控 全面剖析写压力:多维度的对写性能进行监控. 1.OS层面的监控:iostat -x [[email protected] mydata]# iostat -x Linux 2.6.32-642.

转: jvm调优参数总结

JVM里的GC(Garbage Collection)的算法有很多种,如标记清除收集器,压缩收集器,分代收集器等等,详见HotSpot VM GC 的种类 现在比较常用的是分代收集(generational collection,也是SUN VM使用的,J2SE1.2之后引入),即将内存分为几个区域,将不同生命周期的对象放在不同区域里:young generation,tenured generation和permanet generation.绝大部分的objec被分配在young gener

x86服务器中网络性能分析与调优 转

x86服务器中网络性能分析与调优 2017-04-05 巨枫 英特尔精英汇 [OpenStack 易经]是 EasyStack 官微在2017年新推出的技术品牌,将原创技术干货分享给您,本期我们讨论 [x86服务器中网络性能分析与调优] 那些事! >> 网络性能理论极限 网络数据包处理的性能指标,一般包括吞吐.延时.丢包率.抖动等. 数据包有大有小,数据包的大小对这些性能指标有很大的影响. 一般认为服务器处理能力很强,不是数据包处理的瓶颈,而通过物理线路能够传送数据包的最大速率,即线速(Wir

JVM调优参数

堆大小设置JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制:系统的可用虚拟内存限制:系统的可用物理内存限制.32位系统下,一般限制在1.5G~2G:64为操作系统对内存无限制.我在Windows Server 2003 系统,3.5G物理内存,JDK5.0下测试,最大可设置为1478m.典型设置: java -Xmx3550m -Xms3550m -Xmn2g -Xss128k-Xmx3550m:设置JVM最大可用内存为3550M.-Xms3550m:设

MySQL性能诊断与调优

[MySQL性能诊断与调优] LAMP 系统性能调优,第 3 部分: MySQL 服务器调优 http://www.ibm.com/developerworks/cn/linux/l-tune-lamp-3.html LoadRunner监控MySQL http://www.docin.com/p-92272846.html Advanced MySQL Performance Optimization http://www.mysqlperformanceblog.com/files/pres