我有一个胶水作业,可以解析上传到 S3 的 csv 文件并将数据保存到 rds 实例。一切正常。但有一天发生了一个错误
调用时发生错误 z:com.amazonaws.services.glue.util.Job.commit。未初始化。
我该如何解决这个问题?我没有对脚本或任何地方进行任何更改。使用的python版本是3,glue版本2。请有人帮忙。
重置作业书签似乎已经为我解决了这个问题。在控制台中,选择 Glue Job -> Action -> Reset job 书签。
看来错误是由
--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)
}
前两个解决方案仅在您不想始终使用书签时才有效。
我认为这个错误可能会由于许多不同的原因而发生,错误日志中有一个更具描述性的堆栈跟踪。我能够通过删除与作业相关的安全配置来解决该问题,用于加密书签的密钥存在问题。您还可以禁用书签加密。