调用 z:com.amazonaws.services.glue.util.Job.commit 时发生错误。未初始化

问题描述 投票:0回答:3

我有一个胶水作业,可以解析上传到 S3 的 csv 文件并将数据保存到 rds 实例。一切正常。但有一天发生了一个错误

调用时发生错误 z:com.amazonaws.services.glue.util.Job.commit。未初始化。

我该如何解决这个问题?我没有对脚本或任何地方进行任何更改。使用的python版本是3,glue版本2。请有人帮忙。

python-3.x amazon-s3 amazon-rds aws-glue
3个回答
2
投票

重置作业书签似乎已经为我解决了这个问题。在控制台中,选择 Glue Job -> Action -> Reset job 书签。


0
投票

看来错误是由

--job-bookmark-option
参数引起的。

如果您有工作流程,则可以使用以下代码来迭代所有作业并禁用书签选项。

在其他情况下,您可以从 Glue 的 UI 手动添加参数/禁用书签

package main

import (
    "context"
    "encoding/json"
    "flag"
    "github.com/aws/aws-sdk-go-v2/aws"
    "github.com/aws/aws-sdk-go-v2/config"
    "github.com/aws/aws-sdk-go-v2/service/glue"
    "log"
    "strings"
    "time"
)

func FixJob(glueConnection *glue.Client) {
    // Create a Glue client with additional configuration
    jobs, err := glueConnection.ListJobs(context.Background(), &glue.ListJobsInput{})
    if err != nil {
        panic(err)
    }

    for _, job := range jobs.JobNames {
        fmt.Println(job)
        getJob, err := glueConnection.GetJob(context.Background(), &glue.GetJobInput{JobName: &job})
        if err != nil {
            panic(err)
        }

        indent, err := json.MarshalIndent(getJob, " ", "  ")
        if err != nil {
            panic(err)
        }

        fmt.Println("Fixing the following job: " + string(indent))

        // POSSIBLE FIX FOR THE PROBLEM
        getJob.Job.DefaultArguments["--job-bookmark-option"] = "job-bookmark-disable"

        j := getJob.Job
        var connectionName string

        if _, err = glueConnection.UpdateJob(context.Background(), &glue.UpdateJobInput{
            JobName: j.Name,
            JobUpdate: &gluetypes.JobUpdate{
                Command:                 j.Command,
                Connections:             &gluetypes.ConnectionsList{Connections: []string{connectionName}},
                DefaultArguments:        j.DefaultArguments,
                Description:             j.Description,
                ExecutionProperty:       j.ExecutionProperty,
                GlueVersion:             j.GlueVersion,
                LogUri:                  j.LogUri,
                MaxRetries:              0,
                NonOverridableArguments: j.NonOverridableArguments,
                NotificationProperty:    j.NotificationProperty,
                NumberOfWorkers:         aws.Int32(2),
                Role:                    j.Role,
                SecurityConfiguration:   j.SecurityConfiguration,
                Timeout:                 j.Timeout,
                WorkerType:              j.WorkerType,
            },
        }); err != nil {
            panic(err)
        }
        time.Sleep(500 * time.Millisecond)
    }

func main() {
    log.SetFlags(log.LstdFlags | log.Lmicroseconds | log.Llongfile)
    cfg, err := config.LoadDefaultConfig(context.Background())
    if err != nil {
        panic(err)
    }
    glueConnection := glue.New(glue.Options{Credentials: cfg.Credentials, Region: cfg.Region})
    FixJob(glueConnection)
}

0
投票

前两个解决方案仅在您不想始终使用书签时才有效。

我认为这个错误可能会由于许多不同的原因而发生,错误日志中有一个更具描述性的堆栈跟踪。我能够通过删除与作业相关的安全配置来解决该问题,用于加密书签的密钥存在问题。您还可以禁用书签加密。

© www.soinside.com 2019 - 2024. All rights reserved.