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,为什么需要很长时间才能完成?