spark调优
- 复用rdd: 来自同一个数据源的,应该复用同一个rdd,从而减小内存的浪费。
- 尽可能减小shuffer类的算子的使用: 由于spark的瓶颈大部分就是在shuffle,因此shuffle类的算子能够找到其余方式代替。好比,join的算子,使用使用广播变量的方式,将一个数据量少的文件分发,而后其余节点在map中再根据key去作关联。
- 对屡次使用到的rdd作持久化处理: 就是减小重复劳动力的意思,每个rdd执行算子操做的时候,都得从源头计算一遍,若是有相同的rdd,能够将其持久化(调用cache()或者persist())将其缓存在内存或者磁盘,下面步骤的rdd若是须要到这个rdd数据的时候,直接拿出来就能够用了。
- 使用预聚合shuffer操做: 这个有点相似于MapReduce的combiner,将map中的数据先进行一遍reduce后获得的数据量会比原先原先的少,而后再进行shuffer的时候,由于减小了数据规模从而下降的网络传输带宽的成本。 好比要使用groupByKey的时候,是否能够根据业务使用reduceByKey、aggregateByKey来替代,这类算子会根据用户自定义函数,如今对相同key的数据进行预处理。
- 序列化: 使用kryo序列化数据,不使用的话,好像默认是用gzip的方法压缩,可是kryo的效率较高,空间压缩规模更好。
欢迎关注本站公众号,获取更多信息