sparksql-cache小表实现mapjoin优化性能

简介:
  对于复杂sql且关联表较多的情况,数据倾斜是很常见的问题,几乎可以说不倾斜才是少见情况,而在不能改变原始数据(不能采用多阶段分段聚合),不能改变spark源码的情况下,除了调整各种参数,可操作的空间并不多。
对于表之间的join操作,一般来说我们都知道有map join和reduce join两种情况。因为reduce端会按map输出的key的分布处理相应的数据,在数据倾斜的情况下就会造成单个task压力过大,拖累整个job时间,甚至OOM等诸多问题。而如果能在map端完成join,就会极大的减小reduce端的压力,提升并行度。
  map端的join适用于在join的表比较小的情况,另外如字典表这种的与其他表join时,因为本身数据就很少,势必会造成数据严重的倾斜,因而这种情况下使用map端的join就再适合不过。在sparksql中,并没有直接提供如map join之类的关键字,但是也不是没有办法,spark提供了broadhashjoin。要注意的是单纯设置broadcastjoin的大小并没有效果,看下面这个例子,这是一张大表和一个字典表的join,可以看到,两张表的处理是一样的,join在reduce端,从实际的运行情况看,也如预料的一样,倾斜严重。
86bb938da16bc05802678889fb20667f251a7c2b
  我的项目里使用的是hivecontext,就是spark on hive,因而实现map join的方式就是讲小表进行cache,然后再做查询,看下优化后的执行计划,变成一个stage了,实际的运行时间也提升明显。原来的sql不需要修改,只需要对小表执行 CACHE TABLE xx as select * from xx
69409383972c54a42087ebe35b1eacd31ab80696
      
目录
相关文章
|
SQL 消息中间件 分布式计算
12中方法,彻底搞定数据倾斜!
12中方法,彻底搞定数据倾斜!
|
SQL 存储 分布式计算
Hive底层原理:explain执行计划详解(一)
不懂hive中的explain,说明hive还没入门,学会explain,能够给我们工作中使用hive带来极大的便利!
912 0
|
6月前
|
存储 SQL 分布式计算
性能优化:Spark SQL中的谓词下推和列式存储
性能优化:Spark SQL中的谓词下推和列式存储
|
6月前
|
SQL HIVE
Hive group by 数据倾斜问题处理
Hive group by 数据倾斜问题处理
94 0
|
分布式计算 数据安全/隐私保护 Spark
spark 数据倾斜遇到过吗,如何解决数据倾斜?【重要】
spark 数据倾斜遇到过吗,如何解决数据倾斜?【重要】
111 0
|
分布式计算 Spark
spark full outer join 数据倾斜导致OOM
spark full outer join 数据倾斜导致OOM
95 0
|
SQL 分布式计算 算法
Apache Spark 2.2中基于成本的优化器(CBO)
Apache Spark 2.2中基于成本的优化器(CBO)
240 0
Apache Spark 2.2中基于成本的优化器(CBO)
|
存储 SQL 分布式计算
工作常用之Hive 调优【三】 Explain 查看执行计划及建表优化
在查询时通过 WHERE 子句中的表达式选择查询所需要的指定的分区,这样的查询效率会提高很多,所以我们需要把常常用在 WHERE 语句中的字段指定为表的分区字段。
358 0
工作常用之Hive 调优【三】 Explain 查看执行计划及建表优化
|
SQL 分布式计算 Java
sqoop to hive GC overhead limit exceeded 大表抽取到hive中发生异常
如果你已经试过了别的博客提供的修改内存的方法,但是美效果的话,不妨看看我的解决办法。 为什么Sqoop Import抛出这个异常?
256 0
|
SQL 存储 关系型数据库
MYSQL性能调优06_分页查询优化、JOIN关联查询优化、in和exsits优化、count(*)查询优化(三)
MYSQL性能调优06_分页查询优化、JOIN关联查询优化、in和exsits优化、count(*)查询优化(三)
266 0
MYSQL性能调优06_分页查询优化、JOIN关联查询优化、in和exsits优化、count(*)查询优化(三)