Spark/Hive性能优化建议

一、查看执行计划和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已上,比较耗时,这个时候就不建议分步走临时表,会有很大的损耗。


 五、重点优化策略

1. 开发调优    

  • 避免创建重复的RDD    
  • 尽可能复用同一个RDD    
  • 对多次使用的RDD进行持久化    
  • 尽量避免使用shuffle类算子    
  • 使用map-side预聚合的shuffle操作    
  • 使用高性能的算子    
  • 广播大变量    
  • 使用Kryo优化序列化性能    
  • 优化数据结构   

2. 资源参数调优    

  •    运行时架构    
  •    运行流程    
  •    调优    
  •    executor配置    
  •    driver配置    
  •    并行度    
  •    网络超时    
  •    数据本地化    
  •    JVM/gc配置   

3. 数据倾斜调优    

  •    使用Hive ETL预处理数据    
  •    过滤少数导致倾斜的key    
  •    提高shuffle操作的并行度    
  •    两阶段聚合    
  •    将reduce join转为map join    
  •    使用随机前缀和扩容RDD进行join    

4. Shuffle调优    

  •    shuffle原理    
  •    shuffle演进    
  •    调优    
  •    join类型    

5. 其他优化项    

  •    使用DataFrame/DataSet    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值