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相关参数的推导的主要内容,如果未能解决你的问题,请参考以下文章

上下文相关的模板参数推导 - 参数的类型/值不匹配

在这个 spark 代码片段中 ordering.by 是啥意思?

Spark参数调优

python+spark程序代码片段

Spark相关总结

spark 内存管理机制与相关参数调优