AWS Glue:由于缺少元数据而无法启动作业运行

时间:2019-03-15 12:19:03

标签: python python-3.x boto3 aws-glue

为了使用boto3运行作业,documentation声明仅需要JobName。但是,我的代码:

    def start_job_run(self, name):
        print("The name of the job to be run via client is: {}".format(name))
        self.response_de_start_job = self.client.start_job_run(
            JobName=name
        )
        print(self.response_de_start_job)

并且客户是:

    self.client = boto3.client(
            'glue',
            region_name='ap-south-1',
            aws_access_key_id=os.getenv('AWS_ACCESS_KEY_ID'),
            aws_secret_access_key=os.getenv('AWS_SECRET_ACCESS_KEY'),
        )

通过Python3执行时,出现错误:

botocore.errorfactory.EntityNotFoundException: An error occurred (EntityNotFoundException) when calling the StartJobRun operation: Failed to start job run due to missing metadata

但是当我从UI和cli(aws glue start-job-run --job-name march15_9)对同一作业执行相同的操作时,一切正常。

4 个答案:

答案 0 :(得分:0)

什么胶水错误日志指示?

您可能在胶粘作业中使用了一些在调用作业时未传递的参数

答案 1 :(得分:0)

我也遇到了同样的错误,问题是将胶水作业的ARN作为JobName传递。通过仅传递胶粘作业的名称来解决。

response = client.start_job_run(
    JobName='Glue Job Name not ARN'
)

答案 2 :(得分:0)

根据我的经验,该错误通常表示 找不到工作 。 作业绑定到区域后,名称和区域的组合会唯一地标识一个作业,并且其中任何一个错误(包括小错误类型)都会导致您遇到错误。 例如,我正在使用的作业在us-east-1中,因此以下语句成功执行。

    glue_client = boto3.client('glue', region_name='us-east-1')
    response = glue_client.start_job_run(
        JobName = glue_job_name)

但是,下面的代码段将产生与您相同的错误

    glue_client = boto3.client('glue', region_name='us-west-1')
    response = glue_client.start_job_run(
        JobName = glue_job_name)

botocore.errorfactory.EntityNotFoundException:调用StartJobRun操作时发生错误(EntityNotFoundException):由于缺少元数据而无法启动作业

在上述情况下,通过使用--region参数指定运行cli,检查起来相对容易

类似于: aws胶水start-job-run --job-name march15_9 --region ap-south-1

如果此操作成功运行(因此该区域的确是ap-south-1),则我将在代码中显式设置参数以删除未知因素,并且可以通过将字符串值临时放入代码。

一旦代码使用了硬编码的值,您就可以将它们一一删除,从而找到一个(或几个)需要正确传递的值。

祝一切顺利

P.S。确实,文档是正确的,只需要将JobName设置为参数,我的代码就可以这样工作

答案 3 :(得分:0)

检查胶水作业的名称是否正确写入。我有一个类似的案例,我就是这样解决的。 (例如:Job_01 而不是 Job_01)