1000万条数据的Spark性能调优配置

Posted

技术标签:

【中文标题】1000万条数据的Spark性能调优配置【英文标题】:Spark performance tuning configuration for 10 Million data 【发布时间】:2018-11-29 09:59:04 【问题描述】:

我们正在以下硬件上运行用 JAVA 编写的 SPARK 应用程序:

    一个主节点 两个工作节点(每个都有 502.5 GB 可用 内存和 88 个内核 (CPU))。

./spark-submit 命令的配置如下:

--executor-memory=30GB --driver-memory=20G --executor-cores=5 --driver-cores=5

我们正在使用 SPARK 集群管理器

处理 1000 万条数据需要 13 分钟

我们无权共享应用程序代码。

有人可以建议配置来调整我们的应用程序以获得更好的性能吗?

如果您需要任何其他详细信息,请告诉我。

我们正在使用 SPARK 2.3.0

编辑

我们的数据包含 127 列和 1000 万行。 spark 使用上述配置启动了 32 个执行器。我们正在 flatmap 函数中进行外部应用程序调用。

你觉得硬件资源不够用吗?

【问题讨论】:

预计数据处理需要多长时间?如果没有关于数据和处理类型的任何信息,就无法判断 13 分钟是否表明性能好坏。 你启动了多少个执行者? @RolandWeber 我们的数据包含 127 列和 1000 万行。 spark 使用上述配置启动了 32 个执行器。我们正在 flatmap 函数中进行外部应用程序调用。 谢谢。您能否将此信息添加到问题本身?其他人不必通读 cmets 即可理解您的问题。 我想外部应用程序调用是通过某种网络调用进行的?如果是这样,您可能最好使用 flatMapPartitions 而不是简单的平面地图。原因是如果你在调用之间共享一个 HTTP/任何连接,你会更快地为每个分区打开一个,而不是每个项目一个。 【参考方案1】:

如果您在 Spark 独立集群上,您可以尝试将 --executor-cores=5 设置为较低的设置,如果您的操作不是 CPU 密集型的,则可以使用更多执行器。还可以尝试将--total-executor-cores 设置为 88(或您要提供的最大内核数,此参数控制您将拥有的执行程序的数量),以便您更好地控制。

【讨论】:

以上是关于1000万条数据的Spark性能调优配置的主要内容,如果未能解决你的问题,请参考以下文章

2022-02-24-Spark-44(性能调优通用调优)

Spark Core 性能调优之配置进程参数

Spark 常规性能调优

Spark常规性能调优

[大数据性能调优] 第一章:性能调优的本质Spark资源使用原理和调优要点分析

Spark性能调优——扩展篇