本文针对 版本spark 2.2
问题描述
spark sql 执行sql语句:
big_table a left join small_table b on a.id = b.id
small_table 只有100多行数据。
big_table 大约5亿行数据。
没有触发 spark sql 的 broadcast join,导致sql执行缓慢。
问题排查
broadcast join 自动触发条件。
- 小表的size是否小于spark.sql.autoBroadcastJoinThreshold设定的值。
- 表大小的估算通过hive元数据库的统计值,即要保证 ANALYZE TABLE COMPUTE STATISTICS noscan 已经执行过了。
执行
show tblproperties small_table;
没有得出统计数据。
###问题找到
small_table 得元数据中没有相关统计数据, 导致spark 生成执行计划时没有触发 broadcast join 。
解决
执行
ANALYZE TABLE small_table COMPUTE STATISTICS noscan
输出
INFO exec.StatsTask: small_table stats: [numFiles=1, numRows=0, totalSiz