如何优化在EMR上的一批Spark作业,以将总处理时间缩短4-5倍?

0

【以下的问题经过翻译处理】 一位客户每晚需要并行运行 25个 spark 作业,跨越2个EMR集群。这些作业之间没有依赖关系,它们都可以并行运行。它们总共从所有作业中提取了250GB的数据。每个作业的完成时间从20分钟到4小时不等。它们的整个批处理完成时间为12-14小时。他们需要将这个时间缩短到2-3个小时。

有没有他们可以优先尝试的3-5个建议?

Spark代码很简单:1)运行SparkSQL以通过JDBC读取数据并加载DataFrame,2)转换/连接DataFrame,3)将DataFrame写入S3分区。

profile picture
专家
已提问 5 个月前11 查看次数
1 回答
0

【以下的回答经过翻译处理】 这里涉及许多因素,我列举一些如下:

a) 实例配置是什么?是否足够?考虑扩容吗?

b) 自动缩放是否打开?

c) Spark UI中显示了什么?哪个任务占用的时间最长?是任务本身需要更多时间,还是等待资源占用更多时间?

c) 仔细阅读JDBC文档,有多少并行连接正在使用?

d) 是否使用了动态分区?

另外还有一些进阶的检查项目。

最重要的是代码,你是否使用了repartition /coalesce?在代码中是否使用了collect?代码通常是引起性能问题的主要因素。如果需要任何额外的信息,请随时与我联系。

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则