AWS Glue python Shell作业可以调用AWS Glue Spark作业

时间:2019-05-30 02:11:11

标签: python amazon-web-services aws-glue

我是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

2 个答案:

答案 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)

您可以根据需要修改条件和睡眠时间。