Spark Cache 性能测试

作者介绍:涂小刚,攻城狮一枚,有代码洁癖,热爱学习,热爱生活,痛恨酱油帝、跪舔帝。目前主要从事Spark大数据平台与机器学习平台相关方向的工作,关注Spark与TensorFlow

测试准备

训练数据是通过 Facebook SNS 公开数据集生成器得到,在HDFS上大小为9.3G,100个文件,添加如下两个参数以保证所有资源全部到位后才启动task,训练时间为加载数据到训练完毕这期间的耗时。

--conf spark.scheduler.minRegisteredResourcesRatio=1
--conf
spark.scheduler.maxRegisteredResourcesWaitingTime=10000000000

测试集群为3个节点的TS5机器搭建而成,其中一台作为RM,两台NM。除以上配置外,其他配置全部保持Spark默认状态。公共资源配置、分区设置以及算法参数如下表所示,executor_memory视不同的测试用例不同:

测试用例

在不使用Cache的情况和使用Cache的情况下,分别测试Spark-Kmeans算法的训练时间以及GC时间占比,相关测试指标数据如下表所示:

从以上测试数据看来,让人有点出乎意料,一开始有点不太相信,但是多次测试后数据并没有多大的抖动,所以说Spark的性能受多方面因素的影响,单单Cache这块不同的Cache方式以及不同的资源情况下,其性能差别就相差较大,下面分析其内在原因。

不使用cache时,GC不是瓶颈,在每次迭代时均要读一遍HDFS,访问HDFS有较大的开销。从HDFS加载训练数据后直接采用Spark原生的Cache:

  • executor_memory为2g时,不足以Cache住原始训练数据,从UI上看到Cache的比例只有33%左右,导致频繁的rdd-block 剔除重建,同时由于内存吃紧,可能引发较重的GC,从UI上看到GC时间占到总的task运行时间的12%左右,已经成为瓶颈,其整体性能还不如不使用Cache;
  • executor_memory为4g时,也不足以Cache住原始训练数据,但是其Cache的比例有90%左右,同样存在rdd-block 剔除重建,并引发较重的GC,GC时间占总的task运行时间的7%左右,虽然比executor_memory为2g的情况有所好转,但是仍然不理想,只比不做Cache好7%左右,但是内存却多用了20g,并不是特别划算;

  • executor_memory为6g时,可以全部Cache住原始训练数据,性能较优,GC占比较小,但是比不用Cache要多用40g内存,有些代价。

一般来说,当我们内存不够时,可以选择MEMORY_AND_DISK的缓存方式,但是测试发现MEMORY_AND_DISK的缓存效果并不是特别好,从测试数据来看,还不如直接使用DISK_ONLY的缓存方式,MEMORY_AND_DISK的缓存方式带来的GC开销非常大,可能是因为每次都尽可能地Cache数据到内存,不够再Spill到磁盘,同时引发频繁GC。

交叉验证测试

为了排除偶然性,拿 BigDataBenchmark 中的 PageRank 算法进行测试,分别测试各种Cache方式下整体性能,在保证每种Cache方式下都能100%Cache住数据的情况下,得到如下测试结果。

总结

Spark的Cache并不是总是会加速任务运行,Cache的方式不同,对任务产生的影响不同。并不是能用内存Cache就用内存,而是要考虑是否有充足的内存Cache住你的数据,否则可能适得其反。在内存充足时,优先考虑使用MEMORY_ONLY,但是当内存不足以Cache住你的中间数据时,建议直接用MEMORY_ONLY_SER(spark.rdd.compress=true)DISK_ONLY而不要用MEMORY_AND_DISK,MEMORY_AND_DISK可能会频繁地触发Spark的内存管理,增加Spill以及GC的开销。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏FreeBuf

无线键盘易被监听,不知不觉导致信息泄露

在用户使用计算机时,键盘是信息输入的主要媒介,键盘输入包含大量的私人机密信息,包括帐号密码等,所以键盘侦听被各种攻击者所大量采用,成为一种普遍但是破坏力强大的攻...

2907
来自专栏沃趣科技

容器化RDS|调度策略

前文我们介绍了基于 Kubernetes 实现的下一代私有 RDS. 其中, 调度策略是具体实现时至关重要的一环, 它关系到 RDS 集群的服务质量和部署密度....

36710
来自专栏Python爬虫与数据挖掘

如何利用Python词云和wordart可视化工具对朋友圈数据进行可视化展示

大前天我们通过Python网络爬虫对朋友圈的数据进行了抓取,感兴趣的朋友可以点击进行查看,如何利用Python网络爬虫抓取微信朋友圈的动态(上)...

692
来自专栏SDNLAB

如何像Facebook一样构建数据中心 – BGP在大规模数据中心中的应用(3)

作者简介:史梦晨,曾就职于国内金牌集成商, 现就职于EANTC( 欧洲高级网络测试中心),研究方向:网络架构,测试,运维(大规模数据中心,SD-WAN,EVPN...

1411
来自专栏Python爬虫与数据挖掘

如何利用Python词云和wordart可视化工具对朋友圈数据进行可视化展示

大前天我们通过Python网络爬虫对朋友圈的数据进行了抓取,感兴趣的朋友可以点击进行查看,如何利用Python网络爬虫抓取微信朋友圈的动态(上)...

1315
来自专栏岑玉海

hdfs平衡分布

这篇文章是从网上看到的,觉得很好就收藏了,但是最终不知道出处了。 Hadoop的HDFS集群非常容易出现机器与机器之间磁盘利用率不平衡的情况,比如集群中添加新的...

3433
来自专栏FreeBuf

一次XorDDos变种样本的分析实战记录(附工具下载)

*本文原创作者:熊猫正正 ,本文属FreeBuf原创奖励计划,未经许可禁止转载 ? 一、起因 上周五晚上,前同事丢给我一个样本,让我帮他分析一下,周未有事也没时...

3497
来自专栏Albert陈凯

Hadoop数据分析平台实战——050MapReduce结构以及编程模型介绍(做过MR程序略过)离线数据分析平台实战——050MapReduce结构以及编程模型介绍(做过MR程序略过)

离线数据分析平台实战——050MapReduce结构以及编程模型介绍(做过MR程序略过) MapReduce结构介绍 MapReduce(YARN)是Hadoo...

2807
来自专栏知识分享

STM32采集电阻触摸贴膜

公司的项目用电阻屏,触摸的时候发现获取的位置会漂,后来自己发现是由于压力的问题....如果亲们用电阻屏发现触摸的位置有问题,可以看一下这篇文章,,先测量触摸的压...

2936
来自专栏专知

Python网络爬虫与信息抽取笔记04 Robots协议

1292

扫码关注云+社区