优化 Spark AWS GLUE 作业

Posted

技术标签:

【中文标题】优化 Spark AWS GLUE 作业【英文标题】:Optimizing spark AWS GLUE jobs 【发布时间】:2020-12-18 21:04:26 【问题描述】:

我正在使用 pyspark AWS GLUE 从 Aurora postgres 读取 8 个表,经过转换并加入写入一个大小约为 2-5 GB 的红移表,读取表大小如下

92GB、20GB、68MB、50MB、8MB、7MB、6MB、1.5MB、88kb、56kb,

No: 1-3 之间的标准工作节点 10 并发数(如果有帮助的话)

在从 postgress 获取时读取 2 个应用过滤的大表。尝试将 kryoSerializer 应用于胶水作业(这有帮助吗?)如果是,我们如何申请和验证?

billing_fee_df= glueContext.read.format("jdbc")\
    .option("driver", "org.postgresql.Driver")\
    .option("url", "jdbc:postgresql://prod-re.cbn6.us-west-2.rds.amazonaws.com:5432/db")\
    .option("dbtable", "("sql query with specific column selection" from first_largest_table cc LEFT JOIN second_largest_table cf ON cc.id = cf.id LEFT JOIN thirdTable con ON cf.id=con.id where cc.maturity_date > ((current_date-45)::timestamp without time zone at time zone 'UTC')) as bs")\
    .option("user", "postgres")\
    .option("password", "pass")\
    .option("numPartitions", "100")\
    .option("partitionColumn", "date_col")\
    .option("lowerBound", "2020-07-30 00:00:00.000")\
    .option("upperBound", "2020-12-11 00:00:00.000").load()  

以下是我已经实施的优化

    尝试在所有较小的表上实施广播。 进行列修剪。

我的工作目前在 20 分钟内完成。我正在寻找有关如何在考虑成本方面提高性能以在较少时间内完成工作的建议。

欢迎提出任何建议和问题。

【问题讨论】:

【参考方案1】:

您可能需要退后一步,了解您的工作大部分时间都花在了哪些地方。从 postgres 的初始读取是限制因素吗?连接和计算后记?写入红移?火花历史服务器是开始获取此信息的最佳去处。单击 sql 选项卡并查看执行图以及每个阶段完成的时间。另外,当您在这里时,请查看是否有任何偏差。还可以单击详细信息部分并获取查询计划并将其粘贴到上面。

【讨论】:

以上是关于优化 Spark AWS GLUE 作业的主要内容,如果未能解决你的问题,请参考以下文章

AWS Glue - Spark 作业 - 如何增加内存限制或更有效地运行?

如何克服 AWS Glue 作业中的 Spark“设备上没有剩余空间”错误

AWS Glue 作业内存不足

从aws glue pyspark作业中的s3加载JSON

从 EMR 迁移到 AWS Glue 后在 Spark SQL 中找不到表

将 AWS Glue 作业迁移到 EC2