热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何用Sparklens对Spark做性能优化

长按二维码关注大数据领域必关注的公众号写过Spark程序的人,一定都面临过Spark程序优化的问题。如果你是老鸟,优化了很多程序的话,那么就得心应手,没有什么难

长按二维码关注

大数据领域必关注的公众号


写过Spark程序的人,一定都面临过Spark程序优化的问题。如果你是老鸟,优化了很多程序的话,那么就得心应手,没有什么难度。但对于一个新手来说,要优化一个Spark程序很困难。因为这不仅涉及到Spark方面的知识,还涉及到Hadoop等各方面的知识。

而在Spark程序优化的过程中,我们需要反复调整几个executor数量,executor memory大小等几个参数,还需要观察Task有没有倾斜的问题。一旦倾斜,就会出现木桶效应。

除此之外,对于新手编写的Spark程序来说,很容易滥用Driver内存,在Driver上做过多操作。

这些都会导致我们的程序运行速度远远达不到预期。

幸运的是,我们有一些工具能够对Spark程序进行分析,让我们更方便的对Spark程序进行优化,比如Sparklens/Sparklint/Dr.Elephant/SparkOscope等。

本文中,我们会介绍如何通过Sparklens对程序进行分析,并进一步优化。

Sparklens介绍

Sparklens是Qubole提供的一款工具。它能识别出Spark程序的瓶颈,并且警告我们那些有严重性能问题的地方。

这款工具的主要功能是让我们识别我们给任务分配的资源是否合理。有时我们分配了过多资源,期望程序能运行的更快,比如分配了过多的executor memory,但这样导致了executor的数量减少了,进一步降低了我们的程序性能。

Sparklens就能帮我们识别出来类似这种问题,减少开发人员调优的难度。

如何使用 Sparklens

Sparklens用起来很简单,不需要安装任何东西。只需要在执行spark-submit的时候加一些参数就可以了:

--packages qubole:Sparklens:0.3.1-s_2.11 --conf spark.extraListeners=com.qubole.Sparklens.QuboleJobListener

然后执行命令即可。

Sparklens输出

Driver和Executor各自占用的时间

这是Spark程序在Driver和Executor上的时间占比,很容易理解。

正常来说,Driver占用的时间应该特别少。但有时由于程序写的不好,就会出现Driver占用太多时间,甚至出现内存溢出的问题。

常见的几个原因如下:

• rdd.collect()
• sparkContext.broadcast
• spark.sql.autoBroadcastJoinThreshold配置错误

预估理想情况下应用程序需要的时间


task的数量刚好等于cores的数量,并且没有数据倾斜时,估算一个运行时间,作为理想情况下应用程序需要的时间

关键路径时间

即程序运行需要的最小时间。如果这个时间过长,说明我们程序的并行度不够,或者有很严重的数据倾斜问题。
Executor数量对程序性能的差异

很容易理解,不做更多解释。可以作为我们设置并行度时候的依据。

计算时间

告诉我们多少资源被浪费掉了。

数据倾斜

告诉我们每个stage是否有倾斜。

上面所有的输出也可以在Sparklens UI中看到:

总结

通过Sparklens我们能看到程序中是否存在数据倾斜,并行度设置不合理的地方。但要对一个Spark程序进行调优,这些数据只是第一步,有了这些数据,我们还要结合其它的一些知识去进行优化。比如如果程序没有倾斜问题,但就是和预期的结果有一定的差距,并行度也没有问题,那我们如何去进行调优?这时候就需要我们对底层存储,甚至是JVM等的知识有一定的储备才能去定位的。

欢迎点赞 + 收藏 + 在看  素质三连 


往期精彩回顾
程序员,如何避免内卷
【全网首发】Hadoop 3.0分布式集群安装
【2020最新整理】大数据面试130题
某集团大数据平台整体架构及实施方案完整目录
大数据平台基础架构指南
大数据凉凉了?Apache将一众大数据开源项目束之高阁!
实战企业数据湖,抢先数仓新玩法
Superset制作智慧数据大屏,看它就够了

Apache Flink 在快手的过去、现在和未来

大数据基础运维:HDFS参数调优

大数据无处不在,向左还是向右

【HBase调优】Hbase万亿级存储性能优化总结
【Python精华】100个Python练手小程序
【HBase企业应用开发】工作中自己总结的Hbase笔记,非常全面!
【剑指Offer】近50个常见算法面试题的Java实现代码

     长按识别左侧二维码

         关注领福利    

      领10本经典大数据书



推荐阅读
  • 本文由公众号【数智物语】(ID: decision_engine)发布,关注获取更多干货。文章探讨了从数据收集到清洗、建模及可视化的全过程,介绍了41款实用工具,旨在帮助数据科学家和分析师提升工作效率。 ... [详细]
  • 深入解析C++ Atomic编程中的内存顺序
    在多线程环境中,为了防止多个线程同时修改同一数据导致的竞争条件,通常会使用内核级同步对象,如事件、互斥锁和信号量等。然而,这些方法往往伴随着高昂的上下文切换成本。本文将探讨如何利用C++11中的原子操作和内存顺序来优化多线程编程,减少不必要的开销。 ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
  • 我的读书清单(持续更新)201705311.《一千零一夜》2006(四五年级)2.《中华上下五千年》2008(初一)3.《鲁滨孙漂流记》2008(初二)4.《钢铁是怎样炼成的》20 ... [详细]
  • 优雅地记录API调用时长
    本文旨在探讨如何高效且优雅地记录API接口的调用时长,通过实际案例和代码示例,帮助开发者理解并实施这一技术,提高系统的可观测性和调试效率。 ... [详细]
  • 构建Python自助式数据查询系统
    在现代数据密集型环境中,业务团队频繁需要从数据库中提取特定信息。为了提高效率并减少IT部门的工作负担,本文探讨了一种利用Python语言实现的自助数据查询工具的设计与实现。 ... [详细]
  • 利用Git GUI将本地项目同步至GitHub的方法
    GitHub作为开发者不可或缺的工具,不仅提供了丰富的开源项目资源,还极大地便利了个人项目的管理和版本控制。本文将详细介绍如何使用Git GUI工具将本地开发的项目上传至GitHub。 ... [详细]
  • 本文介绍了基于Java的在线办公工作流系统的毕业设计方案,涵盖了MyBatis框架的应用、源代码分析、调试与部署流程、数据库设计以及相关论文撰写指导。 ... [详细]
  • 本文提供了一个SQL脚本,用于在Microsoft SQL Server中创建一个数据字典视图,该视图详细列出了表名、表描述、字段名称、字段描述、字段类型、字段大小、字段精度、是否可为空、默认值以及是否为标识或主键等信息。 ... [详细]
  • 本文深入探讨了MySQL中的高级特性,包括索引机制、锁的使用及管理、以及如何利用慢查询日志优化性能。适合有一定MySQL基础的读者进一步提升技能。 ... [详细]
  • 将XML数据迁移至Oracle Autonomous Data Warehouse (ADW)
    随着Oracle ADW的推出,数据迁移至ADW成为业界关注的焦点。特别是XML和JSON这类结构化数据的迁移需求日益增长。本文将通过一个实际案例,探讨如何高效地将XML数据迁移至ADW。 ... [详细]
  • 本文介绍了如何在 Oracle 数据库中查询重复数据,并提供了多种方法来筛选和删除重复记录,包括基于单个字段和多个字段的重复数据处理。 ... [详细]
  • 2023年,Android开发前景如何?25岁还能转行吗?
    近期,关于Android开发行业的讨论在多个平台上热度不减,许多人担忧其未来发展。本文将探讨当前Android开发市场的现状、薪资水平及职业选择建议。 ... [详细]
  • 如何将955万数据表的17秒SQL查询优化至300毫秒
    本文详细介绍了通过优化SQL查询策略,成功将一张包含955万条记录的财务流水表的查询时间从17秒缩短至300毫秒的方法。文章不仅提供了具体的SQL优化技巧,还深入探讨了背后的数据库原理。 ... [详细]
  • 菜鸟物流用户增长部现正大规模招聘P6及以上级别的JAVA工程师,提供年后入职选项。 ... [详细]
author-avatar
klolo先生
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有