AWS Glue 需要很长时间才能完成
AWS Glue takes a long time to finish
我只是运行一个很简单的工作如下
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 分钟才能完成。但是 cloud watch log 显示作业用了 2 秒来显示我的所有数据。
所以我的问题是:
AWS Glue 作业将其时间花在了日志记录可以显示的哪些地方?它在日志记录周期之外做了什么?
设置允许您的代码运行的环境需要时间 运行。我遇到了同样的问题,联系了 AWS GLUE 团队,他们很有帮助。需要很长时间的原因是当你 运行 第一个作业(它存活 1 小时)如果你在一个小时内 运行 两次相同的脚本或任何其他脚本,GLUE 会构建一个环境,下一份工作将花费更少的时间。当你 运行 第一个脚本时,他们称之为冷启动,我的第一份工作花了 17 分钟,我 运行 在第一个完成后立即再次完成同样的工作,只花了 3 分钟。
在执行编辑作业的操作时,您可以在 "Script libraries and job parameters (optional)" 部分下添加更多 DPU。它可以帮助一些,但不要指望任何重大改进,我的经验。
截至 2019 年 5 月的更新 -
冷启动时间 = 7-8 分钟
温水池维持 = 10-15 分钟
我只是运行一个很简单的工作如下
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 分钟才能完成。但是 cloud watch log 显示作业用了 2 秒来显示我的所有数据。
所以我的问题是: AWS Glue 作业将其时间花在了日志记录可以显示的哪些地方?它在日志记录周期之外做了什么?
设置允许您的代码运行的环境需要时间 运行。我遇到了同样的问题,联系了 AWS GLUE 团队,他们很有帮助。需要很长时间的原因是当你 运行 第一个作业(它存活 1 小时)如果你在一个小时内 运行 两次相同的脚本或任何其他脚本,GLUE 会构建一个环境,下一份工作将花费更少的时间。当你 运行 第一个脚本时,他们称之为冷启动,我的第一份工作花了 17 分钟,我 运行 在第一个完成后立即再次完成同样的工作,只花了 3 分钟。
在执行编辑作业的操作时,您可以在 "Script libraries and job parameters (optional)" 部分下添加更多 DPU。它可以帮助一些,但不要指望任何重大改进,我的经验。
截至 2019 年 5 月的更新 -
冷启动时间 = 7-8 分钟
温水池维持 = 10-15 分钟