我是靠谱客的博主 个性学姐,最近开发中收集的这篇文章主要介绍Spark SQL调优,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1、spark.sql.codegen 默认值为false,当为true时,Spark SQL会把每条查询的语句在运行时编译为java的二进制代码,提高大型查询的性能,但是如果进行小规模的查询的时候反而会变慢

2、spark.sql.inMemoryColumnStorage.compressed 默认值为false,作用是自动对内存中的列式存储进行压缩,这样能够大幅度减少内存空间占用、网络传输和I/O开销。

3 spark.sql.inMemoryColumnStorage.batchSize 默认值为1000,代表的是列式缓存时的每个批处理的大小。较大的批处理可以提高内存利用率和压缩率,但同时也会带来 OOM(Out Of Memory)的风险

4 spark.sql.parquet.compressed.codec 默认值为snappy,参数代表使用哪种压缩编码器。可选的选项包括uncompressed/snappy/gzip/lzo
在这里插入图片描述

5、推测执行(Speculative Execution)是指在分布式集群环境下,因为程序BUG,负载不均衡或者资源分布不均等原因,造成同一个job的多个task运行速度不一致,有的task运行速度明显慢于其他task(比如:一个job的某个task进度只有10%,而其他所有task已经运行完毕),则这些task拖慢了作业的整体执行进度,为了避免这种情况发生,Hadoop会为该task启动备份任务,让该speculative task与原始task同时处理一份数据,哪个先运行完,则将谁的结果作为最终结果。
  推测执行优化机制采用了典型的以空间换时间的优化策略,它同时启动多个相同task(备份任务)处理相同的数据块,哪个完成的早,则采用哪个task的结果,这样可防止拖后腿Task任务出现,进而提高作业计算速度,但是,这样却会占用更多的资源,在集群资源紧缺的情况下,设计合理的推测执行机制可在多用少量资源情况下,减少大作业的计算时间。
  检查逻辑:当成功的Task数超过总Task数的75%(可通过参数spark.speculation.quantile设置)时,再统计所有成功的Tasks的运行时间,得到一个中位数,用这个中位数乘以1.5(可通过参数spark.speculation.multiplier控制)得到运行时间门限,如果在运行的Tasks的运行时间超过这个门限,则对它启用推测。简单来说就是对那些拖慢整体进度的Tasks启用推测,以加速整个Stage的运行。算法大致流程如图:
在这里插入图片描述

SparkConf conf = new SparkConf();
conf.set("spark.speculation", "true"); // 设置推测机制

当成功的Task数超过总Task数的75%(可通过参数spark.speculation.quantile设置)。开启则会启动一个线程每隔SPECULATION_INTERVAL_MS(默认100ms,可通过spark.speculation.interval属性设置)。

6、内存列式存储与内存缓存表
  Spark SQL可以通过cacheTable将数据存储转换为列式存储,同时将数据加载到内存缓存。cacheTable相当于在分布式集群的内存物化视图,将数据缓存,这样迭代的或者交互式的查询不用再从HDFS读数据,直接从内存读取数据大大减少了I/O开销。列式存储的优势在于Spark SQL只需要读出用户需要的列,而不需要像行存储那样每次都将所有列读出,从而大大减少内存缓存数据量,更高效地利用内存数据缓存,同时减少网络传输和I/O开销。数据按照列式存储,由于是数据类型相同的数据连续存储,所以能够利用序列化和压缩减少内存空间的占用。

7、逻辑查询优化
  SparkSQL在逻辑查询优化上支持列剪枝、谓词下压、属性合并等逻辑查询优化方法。列剪枝为了减少读取不必要的属性列、减少数据传输和计算开销,在查询优化器进行转换的过程中会优化列剪枝。

8、Join优化
  Spark SQL对Join进行了优化,支持多种连接算法,如BroadcastHashJoin、BroadcastNestedLoopJoin、HashJoin、LeftSemiJoin等等。
  BroadcastHashJoin将小表转化为广播变量进行广播,这样避免Shuffle开销,最后在分区内做Hash连接。这里使用的就是Hive中Map Side Join的思想,同时使用DBMS中的Hash连接算法做连接。

最后

以上就是个性学姐为你收集整理的Spark SQL调优的全部内容,希望文章能够帮你解决Spark SQL调优所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部