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
      
目录
相关文章
|
8月前
|
SQL 消息中间件 分布式计算
12中方法,彻底搞定数据倾斜!
12中方法,彻底搞定数据倾斜!
|
3月前
|
存储 SQL 分布式计算
性能优化:Spark SQL中的谓词下推和列式存储
性能优化:Spark SQL中的谓词下推和列式存储
|
4月前
|
SQL 算法 关系型数据库
MySQL查询优化之order by 、 group by与分页查询优化
MySQL查询优化之order by 、 group by与分页查询优化
55 0
|
9月前
|
分布式计算 数据安全/隐私保护 Spark
spark 数据倾斜遇到过吗,如何解决数据倾斜?【重要】
spark 数据倾斜遇到过吗,如何解决数据倾斜?【重要】
81 0
|
SQL 分布式计算 算法
Apache Spark 2.2中基于成本的优化器(CBO)
Apache Spark 2.2中基于成本的优化器(CBO)
196 0
Apache Spark 2.2中基于成本的优化器(CBO)
|
SQL 算法 关系型数据库
MYSQL性能调优06_分页查询优化、JOIN关联查询优化、in和exsits优化、count(*)查询优化(二)
MYSQL性能调优06_分页查询优化、JOIN关联查询优化、in和exsits优化、count(*)查询优化(二)
106 0
MYSQL性能调优06_分页查询优化、JOIN关联查询优化、in和exsits优化、count(*)查询优化(二)
|
SQL 存储 关系型数据库
MYSQL性能调优06_分页查询优化、JOIN关联查询优化、in和exsits优化、count(*)查询优化(三)
MYSQL性能调优06_分页查询优化、JOIN关联查询优化、in和exsits优化、count(*)查询优化(三)
237 0
MYSQL性能调优06_分页查询优化、JOIN关联查询优化、in和exsits优化、count(*)查询优化(三)
|
SQL 关系型数据库 MySQL
MYSQL性能调优06_分页查询优化、JOIN关联查询优化、in和exsits优化、count(*)查询优化(一)
MYSQL性能调优06_分页查询优化、JOIN关联查询优化、in和exsits优化、count(*)查询优化(一)
152 0
MYSQL性能调优06_分页查询优化、JOIN关联查询优化、in和exsits优化、count(*)查询优化(一)
|
SQL Oracle 关系型数据库
PostgreSQL JOIN limit 优化器 成本计算 改进 - mergejoin startup cost 优化
标签 PostgreSQL , join , limit , startup cost , cbo , 优化器改进 背景 PostgreSQL limit N的成本估算,是通过计算总成本A,以及估算得到的总记录数B得到: (N/B)*A 大概意思就是占比的方法计算 对于单表查询...
1165 0
|
关系型数据库 测试技术 数据库

热门文章

最新文章