存储格式的选择:
采起行式仍是列式存储?
列存储写入时次数多,损耗时间多
反过来查询的时候较快
压缩格式的选择:
考虑压缩速度和压缩文件的分割性
压缩可以较少存储空间、提升数据传输速度
Spark中默认的压缩格式是“snappy”
代码的优化:
选择的高性能的算子:
foreachPartition => partitionOfRecords.foreach 得到每一条数据
分区的好处是把partition全部的数据先保存到list当中去,而后咱们在插入MySQL的时候就能够结合pstmt的批处理,一次过把整个分区数据写进去
复用已有的数据:
在项目中,若是同时实现多个功能(本例中就是有三个),在计算时观察每一个功能间是否有重叠产生的数据,如有的话把相应的数据提取出来生成,全部的功能实现都能共用(至关于作一个缓存,把中间数据cache )
参数的优化:
并行度:spark.sql.shuffle.partitions
默认的是200,配置的是partitions的数量,对应了task的数量
若以为运行得太慢,则须要吧这个值调大
在conf里面改(YARN启动时)
分区字段类型推测:spark.sql.sources.partitionColumnTypeInference.enabled
默认为开启,若开启以后系统就会自动推测分区字段的类型
关闭后能提高性能