spark 性能优化
1、内存
spark.storage.memoryFraction:很明显,是指spark缓存的大小,默认比例0.6
spark.shuffle.memoryFraction:管理executor中RDD和运行任务时的用于对象创建内存比例,默认0.2
关于这两个参数的设置,常见的一个场景就是操作关系数据库
spark 可以通过jdbc操作关系数据库,但是若是没有分散数据的依据,则将所有数据都读到driver节点上时,这时,强烈建议先看一下表的数据量和集群中对spark的内存设置参数
假设 executor memory 大小设置为2G,也就是说,spark.shuffle.memoryFraction可用内存为2G*0.2=400M,假设5W条数据大小为1M,也就是说可以读取400*50W=2000W条
当你在单节点上读取数据超过2000W而不能及时处理时,就有极大的可能oom
内存设置
spark.shuffle.memoryFraction 0.4 #适当调高
spark.storage.memoryFraction 0.4 #适当调低
2、开启外排序
spark.sql.planner.externalSort true
3、修改序列化工具
spark.serializer org.apache.spark.serializer.KryoSerializer
4、限制应用申请内核数
spark.cores.max 15
5、并行数
spark.default.parallelism 90
6、加入第三方常用类库
spark.executor.extraClassPath /opt/spark/current/lib/sqljdbc41.jar:/opt/spark/current/lib/postgresql-9.4-1202-jdbc41.jar:spark-cassandra-connector-full.jar
spark.driver.extraClassPath /opt/spark/current/lib/sqljdbc41.jar:/opt/spark/current/lib/postgresql-9.4-1202-jdbc41.jar:spark-cassandra-connector-full.jar