一、资源调优(内存调优)
spark调优的第一点就是为任务分配更多的资源,在一定范围内增加资源跟性能的提升是 成正比的。实现资源优化的基础上在考虑后面的性能调优。
资源的分配在任务提交的时候指定。调节的原则:尽可能将任务分配的资源调节到可以使用是资源的最大限度。
举例:
bin/spark-submit \
--class com.spark.Test \
--num-executor 80 \
--driver-memory 6g \
--executor-memory 6g \
--executor-cores 3 \
--master yarn-cluster \
--conf spark.yarn.executor.memoryOverhead=2048\
--conf spark.core.connection.ack.wait.timeout=300 \
/opt/test/spark.jar \
名称 | 说明 |
---|---|
num-executor | 配置Executor的数量 |
driver-memory | 配置Driver内存 |
executor-memory | 配置每个Executor的内存大小 |
executor-cores | 配置每个Executor的CPU的core数量 |
在对各项资源调节后,可以对性能进行调节。如下所示
名称 | |
---|---|
增加Executor的个数 | 在资源允许的情况下,合理增加Executor的个数可以调高task的并行度 |
增加每个Executor的CPU core的个数 | 在资源允许的情况下,合理增加每个Executor的CPU core的个数,可以调高task的并行度 |
增加每个Executor的内存量 | 在资源允许的情况下,合理增加Executor的内存量后对性能提升有三点:1.可以缓存更多的数据(就是对RDD进行cache)减少了磁盘IO。2.可以为shuffle提供更多的内存,即有更多的空间来存放reduce端拉取的 数据,写入磁盘的数据相对减少,甚至可以不写入磁盘,减少可能的磁盘IO。3.可以为task的执行提供更多的内存,在task的执行工程中国可能创建很多对象,内存较小时会引发频繁的GC,增加内存后,可以避免频繁的GC,提升整体的性能。 |
2.对RDD进行优化
2.1RDD复用
在对RDD进行算子时,要避免相同算子和计算逻辑之下,对RDD进行重复计算。
2.2