如何使用Boto3检查运行中的Glue作业的状态?

如何使用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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程