You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让AWS Glue任务成功退出?sys.exit(0)被标记失败

解决AWS Glue中sys.exit(0)导致任务失败的问题

直接用sys.exit(0)在Glue环境里会被判定为异常终止,哪怕返回码是0也不行。要实现S3路径无文件时任务成功退出,按下面的方法操作:

步骤1:检查S3路径是否存在文件

可以用两种方式判断:

方式一:用boto3调用S3 API

import boto3

# 替换成你的桶名和目标路径前缀
s3_client = boto3.client('s3')
bucket_name = "your-bucket"
path_prefix = "target/path/"

# 列出路径下的对象
response = s3_client.list_objects_v2(Bucket=bucket_name, Prefix=path_prefix)
# 判断是否有有效文件(排除路径本身的前缀条目)
has_files = 'Contents' in response and any(obj['Key'] != path_prefix for obj in response['Contents'])

方式二:用Spark的Hadoop文件系统API

from pyspark.context import SparkContext

sc = SparkContext.getOrCreate()
hadoop_conf = sc._jsc.hadoopConfiguration()
fs = sc._jvm.org.apache.hadoop.fs.FileSystem.get(hadoop_conf)
s3_path = sc._jvm.org.apache.hadoop.fs.Path("s3://your-bucket/target/path/")

# 判断路径存在且有文件
has_files = fs.exists(s3_path) and fs.listStatus(s3_path).length > 0

步骤2:无文件时正常结束任务

不要用sys.exit,直接终止后续逻辑即可,Glue会识别为任务正常完成:

if not has_files:
    print("S3目标路径下无文件,任务正常结束")
    # 直接返回,不再执行后续ETL代码
    return

# 有文件时执行你的ETL逻辑
# ...(比如读取文件、数据转换、写入目标位置等操作)

如果需要主动触发任务终止,也可以用GlueContext的cancel_job方法(需确保IAM权限允许):

from awsglue.context import GlueContext

glue_context = GlueContext(sc)
if not has_files:
    glue_context.cancel_job()

内容的提问来源于stack exchange,提问作者Sudhanshu Prakash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 07:04:53