一、查看执行计划和Spark的执行ui界面
不管是spark还是hive,不要相信自己的代码,一定要去看执行计划和spark的执行ui界面。
踩过的坑…一开始还切过hive计算,发现mapjoin不起效果,直接hint方式没用,还需要设置最小的mapjoin数据大小的参数。同时hive中不同的是,如果mapjoin分发内存溢出,那么会有备用执行stage来代替。而spark走了broadcast hash join失败了就是内存溢出就推出了。
二、分析SparkSql慢的原因
spark中分析sql慢的原因可以从以下几点出发:
1)、观察哪个stage慢;
2)、对比执行计划分析到慢的是哪段代码;
3)、慢的原因是什么;
4)、如果倾斜那么可以采用mapjoin,过滤,随机数,union等方式主要看业务;
5)、如果数据不倾斜可能是task的处理量太大导致shuffle write很大,这样就要扩大task数。
三、Spark中的mapjoin最好放一起执行
spark中mapjoin最好放一起执行。是执行顺序的问题。我上面有改几个leftjoin的位置。他这个计划是从上到下来的,多个mapjoin的话会放在一个stage运行。
四、Spark中尽量使用temp view的方式
spark中可以使用temp view的方式,节省写入hdfs和读取hdfs的过程,数据量一大主要读取至少5min已上,比较耗时,这个时候就不建议分步走临时表,会有很大的损耗。
<