AWS Glue 需要很长时间才能完成

Posted

技术标签:

【中文标题】AWS Glue 需要很长时间才能完成【英文标题】:AWS Glue takes a long time to finish 【发布时间】:2018-02-07 09:09:12 【问题描述】:

我只是运行了一个非常简单的工作,如下所示

glueContext = GlueContext(SparkContext.getOrCreate())
l_table = glueContext.create_dynamic_frame.from_catalog(
             database="gluecatalog",
             table_name="fctable") 
l_table = l_table.drop_fields(['seq','partition_0','partition_1','partition_2','partition_3']).rename_field('tbl_code','table_code')
print "Count: ", l_table.count()
l_table.printSchema()
l_table.select_fields(['trans_time']).toDF().distinct().show()
dfc = l_table.relationalize("table_root", "s3://my-bucket/temp/")
print "Before keys() call "
dfc.keys()
print "After keys() call "
l_table.select_fields('table').printSchema()
dfc.select('table_root_table').toDF().where("id = 1 or id = 2").orderBy(['id','index']).show()
dfc.select('table_root').toDF().where("table = 1 or table = 2").show()

数据结构也很简单

root
|-- table: array
| |-- element: struct
| | |-- trans_time: string
| | |-- seq: null
| | |-- operation: string
| | |-- order_date: string
| | |-- order_code: string
| | |-- tbl_code: string
| | |-- ship_plant_code: string
|-- partition_0
|-- partition_1
|-- partition_2
|-- partition_3

当我运行作业测试时,需要 12 到 16 分钟才能完成。但云观察日志显示,该作业需要 2 秒才能显示我的所有数据。

所以我的问题是: AWS Glue 作业将其时间花在了哪些地方,超出了日志记录可以显示的范围,它在日志记录期间之外做什么?

【问题讨论】:

【参考方案1】:

设置允许您的代码运行的环境需要时间。我遇到了同样的问题,联系了 AWS GLUE 团队,他们很有帮助。需要很长时间的原因是 GLUE 在您运行第一个作业时构建了一个环境(它保持活动状态 1 小时)如果您在一个小时内运行两次相同的脚本或任何其他脚本,下一个作业将花费更少的时间.当你运行第一个脚本时,他们称之为冷启动,我的第一份工作用了 17 分钟,我在第一份工作完成后再次运行同样的工作,只用了 3 分钟。

【讨论】:

【参考方案2】:

2019 年 5 月更新 -

冷启动时间 = 7-8 分钟

温水池维持 = 10-15 分钟

【讨论】:

温水池时间可以延长吗? 无法延长暖池时间。这是 AWS 绝对不会向其租户发布的内容。但是,您可以每 14 分钟运行一次虚拟加热作业以使其保持温暖(成本影响 - Glue 的最低费用为 $/10 分钟)【参考方案3】:

在执行编辑作业时,您可以在“脚本库和作业参数(可选)”部分下添加更多 DPU。根据我的经验,它对一些人有所帮助,但不要指望有任何重大改进。

【讨论】:

以上是关于AWS Glue 需要很长时间才能完成的主要内容,如果未能解决你的问题,请参考以下文章

简单连接的问题需要很长时间才能完成

Python 请求很慢并且需要很长时间才能完成 HTTP 或 HTTPS 请求

什么是 SNIReadSyncOverAsync,为什么需要很长时间才能完成?

什么是 SNIReadSyncOverAsync,为什么需要很长时间才能完成?

什么是 SNIReadSyncOverAsync,为什么需要很长时间才能完成?

clamav cl_scanfile 需要很长时间才能完成