[英]How much should one choose the number of executors and cores on a spark-submit job?
我有一个火花结构化的流媒体作业,它执行以下操作:
- 来自 S3 文件夹的流包含 json 的文件(许多 json 行......像 1200 万行)
- 过滤它们以排除几百万
- 使用每个 json 调用外部 HTTP api(使用并发)
- 将响应数据写入 Kafka 主题
我的源 S3 文件夹最多可以包含 48 个或更多文件,因此我使用的是:
.option("maxFilesPerTrigger", 1)
我的 EMR 集群是:(1 个主节点 + 2 个从节点)(每个节点的类型:m5.2xlarge)
每个配备 8 核和 32GB 的 memory。
在我的火花工作中,我想知道这些选项应该是什么?
spark-submit \
--master yarn \
--conf spark.dynamicAllocation.enabled=false \
--executor-memory ??g \
--driver-memory ??g \
--executor-cores ?? \
--num-executors ?? \
--queue default \
--deploy-mode cluster \
....
我想平均分配负载,因为我一直在玩它,而且我在 HTTP 端点上看到的每秒事务似乎是向上/向下,我认为这是我的参数的直接结果。 我也不想占用整个集群。 有任何想法吗?
图表显示被调用的 HTTP 端点的每分钟事务。
这取决于您的时间要求,其他工作......首先您应该尝试使用完整的集群。
1 主 + 2 从 = 3。
核心 = 3 * 8 = 24
memory = 3 * 32 = 96
推荐核心数:5,我们将减少到 4 以不剩下核心。
--executor-cores 4
执行器数量 = 24/4 = 6(1 个主控器和 5 个执行器)
--num-executors 5
执行程序内存/驱动程序内存:(6/96)- ~10% = 14g
最终参数:
spark-submit \
--master yarn \
--conf spark.dynamicAllocation.enabled=false \
--executor-memory 14g \
--driver-memory 14g \
--executor-cores 4 \
--num-executors 5 \
--queue default \
--deploy-mode cluster \
....
您可以轻松地从驱动程序中删除一些 Go 以将其提供给执行者..
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.