一个常用的sql示例
insert overwrite table tbl_result
select
……
from table1
left join table2 on table.id = tables1.id
left join table3 on table.id = tables1.id
left join table4 on table.id = tables1.id
left join table5 on table.id = tables1.id
left join table6 on table.id = tables1.id
实际情况可能更复杂,可能涉及大小表各种join、group等操作,处理小文件、shuffle等操作,导致一个任务非常非常慢。
观察运行发现,有些表很大,有些表很小,涉及大小表的,一般优化角度,是将小表广播,用map join代替reduce join。
比如talbe5和table6很小,那么可以将其广播,然后再关联操作
-- set spark.merge.mergefiles=true ;
-- set spark.merge.per.size_mb=128 ;cache table table5_cache as SELECT * from table5;
cache table table6_cache as SELECT * from table6;insert overwrite table tbl_result
select
……
from table1
left join table2 on table.id = tables1.id
left join table3 on table.id = tables1.id
left join table4 on table.id = tables1.id
left join table5_cache on table.id = tables1.id
left join table6_cache on table.id = tables1.id
默认广播到所有工作节点的表的最大大小10M,如果表超过了10M(10485760),还想让其广播,这时启动的时候,需要设置参数,比如将阀值调到100M
--spark.sql.autoBroadcastJoinThreshold=104857600