查询优化是传统数据库中最为重要的一环,这项技术在传统数据库中已经很成熟。除了查询优化,Spark SQL在存储上也进行了优化。下面介绍Spark SQL的一些优化策略。

查询优化是传统数据库中最为重要的一环,这项技能在传统数据库中现已很老练。除了查询优化,Spark SQL在存储上也进行了优化。

下面介绍Spark SQL的一些优化战略。

Spark SQL优化战略(spark SQL优化)  SQL 优化 第1张

(1)内存列式存储与内存缓存表

Spark SQL可以经过cacheTable将数据存储转化为列式存储,一起将数据加载到内存缓存。cacheTable相当于在分布式集群的内存物化视图,将数据缓存,这样迭代的或许交互式的查询不必再从HDFS读数据,直接从内存读取数据大大削减了I/O开支。列式存储的优势在于Spark SQL只需求读出用户需求的列,而不需求像行存储那样每次都将一切列读出,然后大大削减内存缓存数据量,更高效地运用内存数据缓存,一起削减网络传输和I/O开支。数据依照列式存储,由所以数据类型相同的数据接连存储,所以可以运用序列化和紧缩削减内存空间的占用。

(2)列存储紧缩

为了削减内存和硬盘空间占用,Spark SQL采用了一些紧缩战略对内存列存储数据进行紧缩。Spark SQL的紧缩办法要比Shark丰厚许多,如它支撑PassThrough、RunLengthEncoding、DictionaryEncoding、BooleanBitSet、IntDelta、LongDelta等多种紧缩办法,这样可以大幅度削减内存空间占用、网络传输和I/O开支。

(3)逻辑查询优化

SparkSQL在逻辑查询优化(见图8-4)上支撑列剪枝、谓词下压、特点兼并等逻辑查询优化办法。列剪枝为了削减读取不必要的特点列、削减数据传输和核算开支,在查询优化器进行转化的进程中会优化列剪枝。

下面介绍一个逻辑优化的比如。

SELECT Class FROM (SELECT ID,Name,Class FROM STUDENT ) S WHERE S.ID=1

Catalyst将原有查询经过谓词下压,将挑选操作ID=1优先履行,这样过滤大部分数据,经过特点兼并将***的投影只做一次,终究保存Class特点列。

(4)Join优化

Spark SQL深度学习传统数据库的查询优化技能的精华,一起在分布式环境下调整和立异特定的优化战略。现在Spark SQL对Join进行了优化,支撑多种衔接算法,现在的衔接算法现已比Shark丰厚,并且许多本来Shark的元素也逐渐搬迁过来,如BroadcastHashJoin、BroadcastNestedLoopJoin、HashJoin、LeftSemiJoin,等等。

下面介绍其间的一个Join算法。

BroadcastHashJoin将小表转化为播送变量进行播送,这样防止Shuffle开支,***在分区内做Hash衔接。这儿运用的便是Hive中Map Side Join的思维,一起运用DBMS中的Hash衔接算法做衔接。 跟着Spark SQL的开展,未来会有更多的查询优化战略参加进来,一起后续Spark SQL会支撑像Shark Server相同的服务端和JDBC接口,兼容更多的耐久化层,如NoSQL、传统的DBMS等。一个强有力的结构化大数据查询引擎正在兴起。

Spark SQL优化战略(spark SQL优化)  SQL 优化 第2张

【本文为51CTO专栏作者“王森丰”的原创稿件,转载请注明出处】

转载请说明出处
知优网 » Spark SQL优化战略(spark SQL优化)

发表评论

您需要后才能发表评论