胶水作业无限期运行而未完成代码执行

时间:2019-06-02 17:41:01

标签: pyspark aws-glue

我有一个粘合作业,可以从RDS postgres实例中读取数据(通过数据目录),并以分区和拼花格式写入s3。很好我在该脚本代码的末尾添加了一个命令,以便在写入的s3路径上运行搜寻器,以便数据目录更新了新分区。但是此代码永远不会运行。我在写动态框架的行后立即添加了一条日志记录语句,并且此日志记录语句从不输出。该作业将无限期运行,直到超时或我停止运行。

import ...

...
sc = SparkContext()
gluecontext = GlueContext(sc)

log4jLogger=sc._jvm.org.apache.log4j
log=log4jLogger.LogManager.getLogger(__name__)
log.warn("test of logger")

DyF = gluecontext.create_dynamic_frame_from_catalog(database='db-we-want', table_name='table-of-value')

create_paritions(DyF)

log.warn("about to write dynamic frame with data of interest")

gluecontext.write_dyanmic_frame_from_options(frame=DyF, connection_type='s3', connection_options={'path': 's3://some-bucket/some-prefix'}, format='parquet')

log.warn('Attempting to start crawler')

glue_client = boto3.client('glue', region_name='us-east-1')
glue_client.start_crawler(Name='some-crawler')

我希望在第一个粘合上下文写入后启动搜寻器并查看日志语句。我在s3中看到了用于关联上下文动态框架的对象,但是紧随其后的log语句没有写入。搜寻器无法启动。日志中没有错误,并且作业可以无限期地继续运行。

编辑:

我能够解决此问题。问题是RDS连接子网是公共的。但是,胶水作业没有公共IP。他们需要访问NAT网关。通过将连接切换为使用带有NAT网关的专用子网,该作业得以成功。错误是尝试连接到胶水资源上的boto3超时。

0 个答案:

没有答案