我有大量的客户以相同的格式提供数据,并且需要将它们加载到不同数据库中的相同表中。我已经在Glue中为他们设置了工作,但是现在我必须再做20次相同的事情
除了更改S3文件路径和JDBC连接之外,是否有其他方法可以执行现有作业并将其复制?
关于AWS Glue中的脚本编写,我找不到太多在线信息。通过AWS命令行界面可以实现吗?
答案 0 :(得分:1)
使用命令
aws glue create-job --generate-cli-skeleton
生成框架JSON
使用以下命令获取现有作业的定义
aws glue get-job --job-name <value>
将现有作业定义输出中的值复制到框架中
删除换行符并将其作为输入传递给以下命令
aws glue create-job --cli-input-json <framed_JSON>
此处是创建作业AWS CLI文档的完整参考
https://docs.aws.amazon.com/cli/latest/reference/glue/create-job.html
PS:不要更改JSON(在框架中生成)中元素的顺序,仅更新连接和名称
-cli-input-json(字符串)根据提供的JSON字符串执行服务操作。 JSON字符串遵循--generate-cli-skeleton提供的格式。如果在命令行上提供了其他参数,则CLI值将覆盖JSON提供的值。无法使用JSON提供的值传递任意二进制值,因为该字符串将按字面意义使用。
-generate-cli-skeleton(字符串)在不发送API请求的情况下将JSON框架打印到标准输出。如果不提供值或值输入,则输出示例输入JSON,可用作--cli-input-json的参数。如果提供了值输出,它将验证命令输入并返回该命令的示例输出JSON。
答案 1 :(得分:0)
最快的方法是使用aws cli。
aws glue get-job --job-name <value>
其中value是您要复制的特定作业。然后,您可以在上述命令返回的JSON中更改s3路径和JDBC连接信息。另外,您需要为其赋予一个新的唯一名称。完成此操作后,您可以将其传递给:
aws glue create-job --cli-input-json <value>
其中的值是您尝试从中创建新作业的更新后的JSON。
有关胶水命令行的更多信息,请参见AWS command line reference
答案 2 :(得分:0)
多亏了这里的精彩回答,您已经知道 AWS CLI 可以派上用场了。
<块引用>提示:如果您不想安装或更新 AWS CLI,只需使用 AWS CloudShell!
我在这里使用版本测试了命令:
$ aws --version
aws-cli/1.19.14 Python/3.8.5 Linux/5.4.0-65-generic botocore/1.20.14
如果您想从头开始创建一个新作业,您首先需要一个模板,您可以使用该模板:
aws glue create-job --generate-cli-skeleton > job_template.json
然后使用您最喜欢的编辑器(我喜欢vim)在job_template.json(或任何您称之为)中填写详细信息。
但是如果 DuckDuckGo 或其他引擎将您发送到这里,那么您可能想要克隆和调整现有作业。在本指南中,我们将其称为“perfect_job”。
让我们获取所有工作的列表,以检查我们是否在正确的位置。
aws glue list-jobs --region us-east-1
输出显示了两个作业:
{
"JobNames": [
"perfect_job",
"sunshine"
]
}
查看我们的工作:
aws glue get-job --job-name perfect_job --region us-east-1
JSON 输出看起来不错,让我们把它放在一个文件中以便我们可以编辑它:
aws glue get-job --job-name perfect_job --region us-east-1 > perfect_job.json
让我们将其 cp
写入一个新文件,例如 super_perfect_job.json
。现在您可以编辑它以根据需要更改字段。第一件事当然是改名字!
注意两点:
移除 JSON 的外层,我们需要 Job
的 value 而不是 Job
标识符本身。如果您查看上面创建的 job_template.json
,您会发现它必须以 Name
开头,因此这是一个符合格式要求的小修改。
CreatedOn
中也没有 LastModifiedOn
或 job_template.json
,所以让我们也删除这些行。别担心,如果您忘记删除它们,创建将失败,并显示一条有用的消息,例如'参数验证失败:输入中的未知参数:“LastModifiedOn”'。
现在我们已准备好创建作业!以下示例将在开普敦地区添加 Glue 作业“super_perfect_job”:
aws glue create-job --cli-input-json file://super_perfect_job.json --region af-south-1
但这没有用:
<块引用>调用 CreateJob 时发生错误 (InvalidInputException) 操作:请仅设置分配容量或最大容量。
我删除 MaxCapacity
并重试。还是不开心:
调用 CreateJob 时发生错误 (InvalidInputException) 操作:如果使用工人类型,请不要设置分配的容量 和工人数量。
好的。我删除 AllocatedCapacity
并再次尝试。这次的输出是:
{
"Name": "super_perfect_job"
}
这意味着,成功!您可以通过再次运行 list-jobs
进行确认。打开 AWS 控制台并看到它在 Web UI 中弹出会更有意义。
我们迫不及待地想运行这个作业,所以我们也将使用 CLI,我们将传递三个额外的参数:--fruit
、--vegetable
和 --nut
我们的脚本期望。但是 --
会混淆 AWS CLI,因此让我们将它们存储在名为 args.json
的文件中,其中包含:
{
"--fruit": "tomato",
"--vegetable": "cucumber",
"--nut": "almond"
}
然后这样称呼我们的工作:
aws glue start-job-run --job-name super_perfect_job --arguments file://args.json --region af-south-1
或者像这样:
aws glue start-job-run --job-name super_perfect_job --arguments '{"--fruit": "tomato","--vegetable": "cucumber"}'
您可以通过以下方式查看作业运行的状态:
aws glue get-job-runs --job-name super_perfect_job --region us-east-1
如您所见,AWS CLI 访问的 AWS Glue API 非常强大,不仅方便,而且允许在持续集成 (CI) 服务器(例如 Jenkins)中实现自动化。运行 aws glue help
以获取更多命令和快速帮助,或查看 online documentation 以获取更多详细信息。
要创建或管理永久性基础设施,最好使用基础设施即代码工具,例如 CloudFormation 或 Terraform。