我是AWS GLUE的新手,只想解决一个特定问题。目前,我只有Glue服务可用,而没有EC2节点也没有lambda。 我正在尝试从Aws python shell胶水作业运行AWS Spark胶水作业。是否有可能将AWS胶水python shell作业作为包装运行,并使用不同的参数多次调用同一AWS胶水火花作业。 我尝试运行以下代码片段,但在日志中出现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')
在上面的代码中,我已经在控制台中创建了一个作业,并希望从AWS python shell胶粘作业中找到该作业。
在下面,我想获取作业的状态(如果它正在运行),它将等待一段时间,然后再次检查状态。
status = glue.get_job_run(JobName=myJob['Name'], RunId=JobRun['JobRunId'])
有人可以建议共享任何代码示例以供参考
谢谢 Pradeep
答案 0 :(得分:0)
什么是错误?
您可能必须将参数添加到start_job_run()
响应=胶水.start_job_run( JobName = jobName,Arguments = arguments,AllocatedCapacity = dpus)
状态=胶水。get_job_run(作业名称=作业名称, RunId = response ['JobRunId'])
答案 1 :(得分:0)
以下是一个示例代码,它将继续检查作业状态,直到作业成功为止,并且如果观察到任何错误状态,则会引发异常:
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)
您可以根据需要修改条件和睡眠时间。