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性能调优配置的主要内容,如果未能解决你的问题,请参考以下文章