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

工作常用之Spark调优【一】

第1章Explain查看执行计划Spark3.0大版本发布,SparkSQL的优化占比将近50%。SparkSQL取代SparkCore,成为新一代的引
1 Explain 查看执行计划
Spark 3.0 大版本发布,Spark SQL 的优化占比将近 50%Spark SQL 取代 Spark Core,成
为新一代的引擎内核,所有其他子框架如 MllibStreaming Graph,都可以共享 Spark
SQL 的性能优化,都能从 Spark 社区对于 Spark SQL 的投入中受益。
要优化 SparkSQL 应用时,一定是要了解 SparkSQL 执行计划的。发现 SQL 执行慢的根
本原因,才能知道应该在哪儿进行优化,是调整 SQL 的编写方式、还是用 Hint、还是调参,
而不是把优化方案拿来试一遍。
1.1 准备测试用表和数据
1、上传 3 log hdfs 新建的 sparkdata 路径
2hive 中创建 sparktuning 数据库
3、执行
spark-submit --master yarn --deploy-mode client --driver-memory 1g --num
executors 3 --executor-cores 2 --executor-memory 4g --class
com.atguigu.sparktuning.utils.InitUtil spark-tuning-1.0-SNAPSHOT-jar
with-dependencies.jar
1.2 基本语法
.explain(mode="xxx")
3.0 开始,explain 方法有一个新的参数 mode,该参数可以指定执行计划展示格式:
explain(mode="simple"):只展示物理执行计划。
explain(mode="extended"):展示物理执行计划和逻辑执行计划。
explain(mode="codegen") :展示要 Codegen 生成的可执行 Java 代码。
explain(mode="cost"):展示优化后的逻辑执行计划以及相关的统计。
explain(mode="formatted"):以分隔的方式输出,它会输出更易读的物理执行计划,
并展示每个节点的详细信息。
1.3 执行计划处理流程
核心的执行过程一共有 5 个步骤:
这些操作和计划都是 Spark SQL 自动处理的,会生成以下计划:
Unresolved 逻辑执行计划:== Parsed Logical Plan ==
Parser 组件检查 SQL 语法上是否有问题,然后生成 Unresolved(未决断)的逻辑计划,
不检查表名、不检查列名。
Resolved 逻辑执行计划:== Analyzed Logical Plan ==
通过访问 Spark 中的 Catalog 存储库来解析验证语义、列名、类型、表名等。
优化后的逻辑执行计划:== Optimized Logical Plan ==
Catalyst 优化器根据各种规则进行优化。
物理执行计划:== Physical Plan ==
1)HashAggregate 运算符表示数据聚合,一般 HashAggregate 是成对出现,第一个
HashAggregate 是将执行节点本地的数据进行局部聚合,另一个 HashAggregate
将各个分区的数据进一步进行聚合计算。
2)Exchange 运算符其实就是 shuffle,表示需要在集群上移动数据。很多时候
HashAggregate 会以 Exchange 分隔开来。
3)Project 运算符是 SQL 中的投影操作,就是选择列(例如:select name, age…)。
4)BroadcastHashJoin 运算符表示通过基于广播方式进行 HashJoin
5)LocalTableScan 运算符就是全表扫描本地的表。
1.4 案例实操
将提供的代码打成 jar 包,提交到 yarn 运行

spark-submit --master yarn --deploy-mode client --driver-memory 1g --num
executors 3 --executor-cores 2 --executor-memory 4g --class
com.atguigu.sparktuning.explain.ExplainDemo spark-tuning-1.0-SNAPSHOT
jar-with-dependencies.jar



推荐阅读
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 深入理解Java虚拟机的并发编程与性能优化
    本文主要介绍了Java内存模型与线程的相关概念,探讨了并发编程在服务端应用中的重要性。同时,介绍了Java语言和虚拟机提供的工具,帮助开发人员处理并发方面的问题,提高程序的并发能力和性能优化。文章指出,充分利用计算机处理器的能力和协调线程之间的并发操作是提高服务端程序性能的关键。 ... [详细]
  • 什么是大数据lambda架构
    一、什么是Lambda架构Lambda架构由Storm的作者[NathanMarz]提出,根据维基百科的定义,Lambda架构的设计是为了在处理大规模数 ... [详细]
  • Hadoop之Yarn
    目录1Hadoop1.x和Hadoop2.x架构区别2Yarn概述3Yarn基本架构4Yarn工作机制5作业提交全过程6资源调度器7任务的推测执行1Hadoop1.x和Hadoo ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • HashMap的相关问题及其底层数据结构和操作流程
    本文介绍了关于HashMap的相关问题,包括其底层数据结构、JDK1.7和JDK1.8的差异、红黑树的使用、扩容和树化的条件、退化为链表的情况、索引的计算方法、hashcode和hash()方法的作用、数组容量的选择、Put方法的流程以及并发问题下的操作。文章还提到了扩容死链和数据错乱的问题,并探讨了key的设计要求。对于对Java面试中的HashMap问题感兴趣的读者,本文将为您提供一些有用的技术和经验。 ... [详细]
  • java drools5_Java Drools5.1 规则流基础【示例】(中)
    五、规则文件及规则流EduInfoRule.drl:packagemyrules;importsample.Employ;ruleBachelorruleflow-group ... [详细]
  • MySQL多表数据库操作方法及子查询详解
    本文详细介绍了MySQL数据库的多表操作方法,包括增删改和单表查询,同时还解释了子查询的概念和用法。文章通过示例和步骤说明了如何进行数据的插入、删除和更新操作,以及如何执行单表查询和使用聚合函数进行统计。对于需要对MySQL数据库进行操作的读者来说,本文是一个非常实用的参考资料。 ... [详细]
  • 14亿人的大项目,腾讯云数据库拿下!
    全国人 ... [详细]
  • 伸缩性|发生_分布式文件系统设计,该从哪些方面考虑?
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了分布式文件系统设计,该从哪些方面考虑?相关的知识,希望对你有一定的参考价值。点击上方关注“ ... [详细]
  • Kylin 单节点安装
    软件环境Hadoop:2.7,3.1(sincev2.5)Hive:0.13-1.2.1HBase:1.1,2.0(sincev2.5)Spark(optional)2.3.0K ... [详细]
  • MapReduce 切片机制源码分析
     总体来说大概有以下2个大的步骤1.连接集群(yarnrunner或者是localjobrunner)2.submitter.submitJobInternal()在该方法中会创建 ... [详细]
  • Azkaban(三)Azkaban的使用
    界面介绍首页有四个菜单projects:最重要的部分,创建一个工程,所有flows将在工程中运行。scheduling:显示定时任务executing:显示当前运行的任务histo ... [详细]
author-avatar
魑魅魍魉龌蹉尴尬
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有