Ana*_*eep 3 python amazon-web-services aws-glue
我是 AWS GLUE 的新手,只想解决一个特定的问题。目前我只有 Glue 服务可用,没有 EC2 节点没有 lambda。我正在尝试从 Aws python shell 胶水作业运行 AWS 火花胶水作业。是否可以将 AWS 胶水 python shell 作业作为包装器运行,并使用不同的参数多次调用同一个 AWS 胶水火花作业。我尝试运行以下代码 snipet,但在日志中出现 boto Ecxeption 错误。
import boto3
glue = boto3.client(service_name='glue', region_name='us-east-1',
endpoint_url='https://glue.us-east-1.amazonaws.com')
myNewJobRun = glue.start_job_run(JobName='WHICH I CREATED IN CONSOLE')
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,我已经在控制台中创建了一个作业,并希望从 AWS python shell 胶水作业中找到该作业。
下面我想获取作业的状态,如果它正在运行,那么它会等待一段时间,然后再次检查状态。
status = glue.get_job_run(JobName=myJob['Name'], RunId=JobRun['JobRunId'])
Run Code Online (Sandbox Code Playgroud)
有人可以建议分享任何代码示例以供参考
谢谢普拉迪普
以下是一个示例代码,它不断检查作业状态,直到作业成功,如果观察到任何错误状态,则会引发异常:
import boto3
client = boto3.client(service_name='glue', region_name='us-east-1',
endpoint_url='https://glue.us-east-1.amazonaws.com')
response = client.start_job_run(JobName='WHICH U CREATED IN CONSOLE')
status = client.get_job_run(JobName=job_name, RunId=response['JobRunId'])
if status:
state = status['JobRun']['JobRunState']
while state not in ['SUCCEEDED']:
time.sleep(30)
status = client.get_job_run(JobName=job_name, RunId=response['JobRunId'])
state = status['JobRun']['JobRunState']
if state in ['STOPPED', 'FAILED', 'TIMEOUT']:
raise Exception('Failed to execute glue job: ' + status['JobRun']['ErrorMessage'] + '. State is : ' + state)
Run Code Online (Sandbox Code Playgroud)
您可以根据需要修改条件和睡眠时间。