皮皮网

【投流系统 源码】【商用源码分享】【成功指标源码】sparksql源码开发

来源:c 论坛源码软件 时间:2024-12-24 10:28:28

1.SparkSQL源码分析-05-SparkSQL的源码join处理
2.为什么sparkSQL

sparksql源码开发

SparkSQL源码分析-05-SparkSQL的join处理

       SparkSQL的join处理策略多样,针对不同场景各有优劣。源码首先,源码map join适用于小表广播至worker节点,源码提升性能,源码投流系统 源码但大表可能导致OOM。源码商用源码分享shuffle hash join则对大表进行分区和排序,源码效率高但内存密集。源码默认策略通过sort merge join,源码对大表进行分区排序,源码避免内存问题,源码但需预先排序。源码

       当常规策略不可用时,源码成功指标源码会考虑等值或不等值join的源码广播nested loop join,适用于特定条件的源码right或left outer join。笛卡尔积join在无指定key时使用,仅限inner join。php 笔记源码

       SparkPlan中的Join子节点与策略紧密相关,如在等值连接时,根据hint选择Broadcast hash join、Shuffle sort merge join或shuffle hash join。按部就班变色源码没有hint时,依据表大小、join类型和排序情况自动选择。

       非等值连接时,hint会引导使用broadcast nested loop join或Cartesian product join,无hint时则依据表大小和连接类型来决定。

       在特殊情况下,如NotInSubquery,仍可能选择Broadcast hash join。总的来说,SparkSQL的join策略灵活多变,旨在根据具体场景提供最优的执行效率和资源利用率。

为什么sparkSQL

       Shark和sparkSQL 但是,随着Spark的发展,其中sparkSQL作为Spark生态的一员继续发展,而不再受限于hive,只是兼容hive;而hive on spark是一个hive的发展计划,该计划将spark作为hive的底层引擎之一,也就是说,hive将不再受限于一个引擎,可以采用map-reduce、Tez、spark等引擎。

       ã€€ã€€Shark为了实现Hive兼容,在HQL方面重用了Hive中HQL的解析、逻辑执行计划翻译、执行计划优化等逻辑,可以近似认为仅将物理执行计划从MR作业替换成了Spark作业(辅以内存列式存储等各种和Hive关系不大的优化);同时还依赖Hive Metastore和Hive SerDe(用于兼容现有的各种Hive存储格式)。这一策略导致了两个问题,第一是执行计划优化完全依赖于Hive,不方便添加新的优化策略;二是因为MR是进程级并行,写代码的时候不是很注意线程安全问题,导致Shark不得不使用另外一套独立维护的打了补丁的Hive源码分支(至于为何相关修改没有合并到Hive主线,我也不太清楚)。

       ã€€ã€€æ­¤å¤–,除了兼容HQL、加速现有Hive数据的查询分析以外,Spark SQL还支持直接对原生RDD对象进行关系查询。同时,除了HQL以外,Spark SQL还内建了一个精简的SQL parser,以及一套Scala DSL。也就是说,如果只是使用Spark SQL内建的SQL方言或Scala DSL对原生RDD对象进行关系查询,用户在开发Spark应用时完全不需要依赖Hive的任何东西。