繁体   English   中英

在 spark-submit 工作中应该选择多少执行器和核心?

[英]How much should one choose the number of executors and cores on a spark-submit job?

我有一个火花结构化的流媒体作业,它执行以下操作:

  1. 来自 S3 文件夹的流包含 json 的文件(许多 json 行......像 1200 万行)
  1. 过滤它们以排除几百万
  1. 使用每个 json 调用外部 HTTP api(使用并发)
  1. 将响应数据写入 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 端点的每分钟事务。

下面显示了我的 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM