热门标签 | 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本经典大数据书



推荐阅读
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 这篇文章主要介绍了Python拼接字符串的七种方式,包括使用%、format()、join()、f-string等方法。每种方法都有其特点和限制,通过本文的介绍可以帮助读者更好地理解和运用字符串拼接的技巧。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • 本文介绍了Java集合库的使用方法,包括如何方便地重复使用集合以及下溯造型的应用。通过使用集合库,可以方便地取用各种集合,并将其插入到自己的程序中。为了使集合能够重复使用,Java提供了一种通用类型,即Object类型。通过添加指向集合的对象句柄,可以实现对集合的重复使用。然而,由于集合只能容纳Object类型,当向集合中添加对象句柄时,会丢失其身份或标识信息。为了恢复其本来面貌,可以使用下溯造型。本文还介绍了Java 1.2集合库的特点和优势。 ... [详细]
  • 本文介绍了H5游戏性能优化和调试技巧,包括从问题表象出发进行优化、排除外部问题导致的卡顿、帧率设定、减少drawcall的方法、UI优化和图集渲染等八个理念。对于游戏程序员来说,解决游戏性能问题是一个关键的任务,本文提供了一些有用的参考价值。摘要长度为183字。 ... [详细]
  • MySQL多表数据库操作方法及子查询详解
    本文详细介绍了MySQL数据库的多表操作方法,包括增删改和单表查询,同时还解释了子查询的概念和用法。文章通过示例和步骤说明了如何进行数据的插入、删除和更新操作,以及如何执行单表查询和使用聚合函数进行统计。对于需要对MySQL数据库进行操作的读者来说,本文是一个非常实用的参考资料。 ... [详细]
  • 深入理解Java虚拟机的并发编程与性能优化
    本文主要介绍了Java内存模型与线程的相关概念,探讨了并发编程在服务端应用中的重要性。同时,介绍了Java语言和虚拟机提供的工具,帮助开发人员处理并发方面的问题,提高程序的并发能力和性能优化。文章指出,充分利用计算机处理器的能力和协调线程之间的并发操作是提高服务端程序性能的关键。 ... [详细]
  • 本文介绍了利用ARMA模型对平稳非白噪声序列进行建模的步骤及代码实现。首先对观察值序列进行样本自相关系数和样本偏自相关系数的计算,然后根据这些系数的性质选择适当的ARMA模型进行拟合,并估计模型中的位置参数。接着进行模型的有效性检验,如果不通过则重新选择模型再拟合,如果通过则进行模型优化。最后利用拟合模型预测序列的未来走势。文章还介绍了绘制时序图、平稳性检验、白噪声检验、确定ARMA阶数和预测未来走势的代码实现。 ... [详细]
  • Python教学练习二Python1-12练习二一、判断季节用户输入月份,判断这个月是哪个季节?3,4,5月----春 ... [详细]
  • 从批量eml文件中提取附件的Python代码实现方法
    本文介绍了使用Python代码从批量eml文件中提取附件的实现方法,包括获取eml附件信息、递归文件夹下所有文件、创建目的文件夹等步骤。通过该方法可以方便地提取eml文件中的附件,并保存到指定的文件夹中。 ... [详细]
  • 很多时候在注册一些比较重要的帐号,或者使用一些比较重要的接口的时候,需要使用到随机字符串,为了方便,我们设计这个脚本需要注意 ... [详细]
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社区 版权所有