谈谈 spark 性能调优的方法
前言
随着数据的不断膨胀,科技的持续进度,我们记录数据的方式也在不断变化。从最早的甲骨文,到纸质记录,再到如今用磁盘硬件收集。再说到大数据,现在普遍使用的是 hadoop 和 spark。而 spark 因其优越的性能优势,已经在逐步取代 hadoop 了。
spark 固然好用,但其学习成本较高,配置项繁多。我们要用好 spark,需要知道它的原理及特性。今天就来讲讲 spark 的性能调优方向。
性能调优的本质
当我们写完 spark 任务代码后,需要分析其瓶颈,然后优化,保证能更好的利用 spark 的性能。spark 的性能调优本质,可总结为:
spark 的性能调优不是一步到位的,因其涉及分布式机器的资源。补了一个短板,有可能会对其他模块带来新的问题
性能调优是否有效,取决于你针对的是哪方面的提升。也许对于空间优化很好;针对时间优化不好。
性能调优的方法和技巧,没有定死的,也不是一成不变。
性能调优的过程就是使各个方面、各个资源都协调运行的状态。
如何定位性能瓶颈
途径可分 2 种:
凭借之前的经验判断;
通过 sparkUI 来判断:包括 DAG、stage、执行计划、executor 负载、内存和缓存等信息。
第一种途径,往往需要开发人员有较多的 spark 开发经验。比如一个任务卡在某个 task 了,凭经验大致猜测该任务有 shuffle 的存在。
而第二种途径适合任何人。我们通过 sparkUI 的信息,去分析瓶颈位置的执行情况。从而定位到具体问题。
不管哪种途径,从硬件资源的消耗入手是最快捷的方式,因为瓶颈都是体现在硬件资源上。
性能调优的方法
在 spark 中,其实方法就 2 种:
从代码出发:这个我们在开发阶段就要注意起来。我们需要清楚导致性能瓶颈的常见操作,从而尽可能在开发代码时留下性能瓶颈的隐患;
从 spark 配置项出发:在我们代码开发后,需要有合适的配置来运行 spark 作业。这就要求我们熟悉配置项的作用和分类。
小结
spark 的性能调优,目的就是让我们的服务器资源之间得到平衡。因为资源不是无穷尽,我们需要合理调整,让这些硬件之间协调运行,达到少产生瓶颈的状态。
版权声明: 本文为 InfoQ 作者【芥末拌个饭吧】的原创文章。
原文链接:【http://xie.infoq.cn/article/7d11ae7e97738dbead23b214d】。文章转载请联系作者。
评论