拾贰SparkSQL:数据关联优化

         在分布式环境中,Spark 支持两类数据分发模式。一类是学过的 Shuffle,Shuffle 通过中间文件来完成 Map 阶段与 Reduce 阶段的数据交换,因此它会引入大量的磁盘与网络开销。

         另一类是我们介绍的广播变量(Broadcast Variables),广播变量在 Driver 端创建,并由 Driver 分发到各个 Executors。

        因此,从数据分发模式的角度出发,数据关联又可以分为 Shuffle Join 和 Broadcast Join 这两大类。

         将两种分发模式与 Join 本身的 3 种实现机制相结合,就会衍生出分布式环境下的 6 种 Join 策略。

         那么,对于这 6 种 Join 策略,Spark SQL 是如何支持的呢?它们的优劣势与适用场景都有哪些?开发者能否针对这些策略有的放矢地进行取舍?今天这一讲,咱们就来聊聊这些话题。

Join 实现机制的优势对比

        首先,我们先来说一说不同 Join 实现机制本身的一些特性与适用场景,从而为后续的讨论打好基础。需要说明的是,咱们这里说的 Join 实现机制,指的是算法层面的工作原理,不同的算法有着不同的适用场景与复杂度,我们需要对它们有足够认识并有所区分。

           我们知道,Join 支持 3 种实现机制,它们分别是 Hash Join、Sort Merge Join 和 Nested Loop Join。三者之中,Hash Join 的执行效率最高,这主要得益于哈希表 O(1) 的查找效率。

你可能感兴趣的:(spark)