spark 调优指南

一 流程详解

spark 最重要的就是shuffle 过程,就是所谓的mr 过程中进行处理map->reduce 中的过程
减少shuffle 过程其实就是两个思路。

尽量不改变key,使其在local 完成,减少网络IO 磁盘IO和cpu 开销
减少shuffle 数据规模

'''
1. 去重后union
2. mapValues 比map 好
A.map{case (A, ((B, C), (D, E))) => (A, (B, C, E))}
改成:
A.mapValues{case ((B, C), (D, E)) => (B, C, E)}
3. 使用broadcast + filter 来代替 join
其实就是大的rdd join 小rdd
A.map{case (name, age, sex) => (age, (name, sex))}
.join(B)
.map{case (age, ((name, sex), title)) => (name, age, sex)}
你就可以想象,执行的时候超大的 A 被打散和分发到各个节点去。而且更要命的是,为了恢复一开始的 (name, age, sex) 的结构,又做了一次 map,而这次 map 一样导致 shuffle。两次 shuffle,太疯狂了。但是如果这样写:
val b = sc.broadcast(B.collectAsMap)
A.filter{case (name, age, sex) => b.values.contains(age)}

'''

数据不均匀 ,其实换句话说就是,就是当我们统计数据的时候进行数据读取时让key 随机
理解什么数据出现在master 还是slave
具体就是类似于小的key 可以进行读入内存
‘’‘
A.foreach(println)
想把 RDD 的内容逐条打印出来,但是结果却没有出现在 stdout 里面,因为这一步操作被放到 slave 上面去执行了。其实只需要 collect 一下,这些内容就被加载到 master 的内存中打印了:
A.collect.foreach(println)
’‘’
reduceBykey 替换groupByKey

二 参数调优

三sql调优

猜你喜欢

转载自www.cnblogs.com/corx/p/11519444.html
今日推荐