如何使用Boto3检查运行中的Glue作业的状态?
问题声明 - 使用Python中的boto3库运行一个Glue作业,并获取它是否成功或失败的状态。例如,运行一个名为 run_s3_file_job 的作业并获取它的状态。
更多Python相关文章,请阅读:Python 教程
解决这个问题的方法/算法
步骤1 - 导入boto3和botocore异常来处理异常。
步骤2 - job_name 是必填参数,而 arguments 是函数中的可选参数。有些作业需要参数才能运行。在这种情况下,可以将参数作为字典传递。
例如: arguments = {‘arguments1’ = ‘value1’,’arguments2’ = ‘value2’}
如果作业不需要参数,则只需传递作业名称。
步骤3 - 使用boto3库创建AWS会话。确保在默认配置文件中指定了region_name。如果没有指定,则在创建会话时需要显式传递region_name。
步骤4 - 创建AWS Glue客户端。
步骤5 - 现在使用start_job_run函数,并传递JobName和arguments(如果需要)。
步骤6 - 一旦作业启动,它将提供带有作业元数据的 job_run_id 。
步骤7 - 使用 get_job_run 函数,并从先前函数的结果中传递 RunId 参数。它返回关于状态的字典。
步骤8 - 现在获取作业的特定状态。如果作业未完成,则状态可能为Running,否则是SUCCEEDED / FAILED。
步骤9 - 如果在检查作业时发生错误,请处理通用异常。
示例
使用以下代码来运行现有的glue job并获取其状态 –
import boto3
from botocore.exceptions import ClientError
def run_glue_job_get_status(job_name, arguments={}):
session = boto3.session.Session()
glue_client = session.client('glue')
try:
job_run_id = glue_client.start_job_run(JobName=job_name, Arguments=arguments)
status_detail = glue_client.get_job_run(JobName=job_name, RunId=job_run_id.get("JobRunId"))
status = status_detail.get("JobRun").get("JobRunState")
return status
except ClientError as e:
raise Exception("boto3 client error in run_glue_job_get_status: " + e.__str__())
except Exception as e:
raise Exception("Unexpected error in run_glue_job_get_status: " + e.__str__())
#Get status 1st time
print(run_glue_job_get_status("run_s3_file_job"))
#Get status 2nd time after waiting
time.sleep(10)
print(run_glue_job_get_status("run_s3_file_job"))
输出
##Get status 1st time
Running
#Get status 2nd time after waiting
SUCCEEDED
极客教程