spark相关参数的推导
Posted 上官沐雪
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spark相关参数的推导相关的知识,希望对你有一定的参考价值。
spark相关参数的推导
1. 集群配置
10 Nodes
16 cores per Node
64GB RAM per Node
1.1 内存比较大的情况下:
第一,根据上面的参数建议,我们给每个Executor分配5个core即executor-cores=5,这样对HDFS的吞吐量会比较友好。
第二,为后台进程留一个core,则每个节点可用的core数是16 - 1 = 15。所以集群总的可用core数是15 x 10 = 150。
第三,每个节点上的Executor数就是 15 / 5 = 3,集群总的可用的Executor数就是 3 * 10 = 30 。为ApplicationManager留一个Executor,则num-executors=29。
第四,每个节点上每个Executor可分配的内存是 (64GB-1GB) / 3 = 21GB(减去的1GB是留给后台程序用),除去MemoryOverHead=max(384MB, 7% * 21GB)=2GB,所以executor-memory=21GB - 2GB = 19GB。
所以最后的参数配置是
–num-executors = 29
–executor-cores = 5
–executor-memory = 19GB
1.2 内存较小的情况下(机器为16核)
每个Executor分配到的内存是19GB,假设10GB内存就够用了。那么此时我们可以将executor-cores降低如降低为3,那么每个节点就可以有15 / 3 = 5个Executor,那么总共可以获得的Executor数就是 (5 * 10) - 1 =49,每个节点上每个Executor可分配的内存是(64GB-1GB) / 5 = 12GB,除去
MemoryOverHead=max(384MB, 7% * 12GB)=1GB,所以executor-memory=12GB - 1GB = 11GB
所以最后的参数配置是
–num-executors = 49
–executor-cores = 3
–executor-memory = 11GB
2.spark提交的相关脚本
优化前脚本
spark-submit --class com.zhendao.bigdata.realtime.session.WebLogSession \\
--master yarn \\
--deploy-mode client \\
--driver-memory 4g \\
--num-executors 60 \\
--executor-memory 4g \\
--executor-cores 4 \\
--conf spark.network.timeout=600s \\
--conf "spark.yarn.executor.memoryOverhead=4G" \\
--queue root.user.spark ${SPARK_JAR} ${input} ${hivepartition}
优化后脚本
spark-submit --class ${SPARK_CLASS} \\
--master yarn \\
--deploy-mode cluster \\
--driver-memory 9g \\
--num-executors 24 \\
--executor-memory 8g \\
--executor-cores 4 \\
--conf spark.network.timeout=600s \\
--conf "spark.yarn.executor.memoryOverhead=1G" \\
--queue root.user.spark ${SPARK_JAR} ${input} ${hivepartition}
以上是关于spark相关参数的推导的主要内容,如果未能解决你的问题,请参考以下文章