2

我有可以在 AWS GLUE 中运行的 pyspark 脚本。但是每次我从 UI 创建作业并将我的代码复制到作业时。无论如何我可以从 s3 存储桶中的文件自动创建作业。(我有所有将在运行时使用的库和粘合上下文)

4

4 回答 4

4

另一种选择是使用AWS CloudFormation。您可以在模板文件中定义要创建的所有 AWS 资源(不仅是 Glue 作业),然后在需要时从AWS 控制台使用 cli更新堆栈。

胶水作业的模板如下所示:

  MyJob:
    Type: AWS::Glue::Job
    Properties:
      Command:
        Name: glueetl
        ScriptLocation: "s3://aws-glue-scripts//your-script-file.py"
      DefaultArguments:
        "--job-bookmark-option": "job-bookmark-enable"
      ExecutionProperty:
        MaxConcurrentRuns: 2
      MaxRetries: 0
      Name: cf-job1
      Role: !Ref MyJobRole # reference to a Role resource which is not presented here
于 2019-01-15T23:19:47.580 回答
0

对的,这是可能的。例如,您可以为此目的使用 boto3 框架。

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/glue.html#Glue.Client.create_job

https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-python-calling.html

于 2019-01-15T07:13:44.657 回答
0

我编写了以下脚本:

  1. 我们有 (glue)_dependency.txt 文件,脚本获取所有依赖文件的路径并创建 zip 文件。
  2. 它使用 s3 同步在 S3 中上传胶水文件和 zip 文件
  3. 可选地,如果作业设置发生任何变化,将重新部署 cloudformation 模板

您可以编写 shell 脚本来执行此操作。

于 2019-01-16T07:41:18.673 回答
0

datajob我创建了一个名为部署和编排胶水作业的开源库。你可以在 github https://github.com/vincentclaes/datajob和 pypi上找到它

pip install datajob
npm install -g aws-cdk@1.87.1

您创建一个文件datajob_stack.py来描述您的胶水作业以及它们是如何编排的:

from datajob.datajob_stack import DataJobStack
from datajob.glue.glue_job import GlueJob
from datajob.stepfunctions.stepfunctions_workflow import StepfunctionsWorkflow


with DataJobStack(stack_name="data-pipeline-simple") as datajob_stack:

    # here we define 3 glue jobs with a relative path to the source code.
    task1 = GlueJob(
        datajob_stack=datajob_stack,
        name="task1",
        job_path="data_pipeline_simple/task1.py",
    )
    task2 = GlueJob(
        datajob_stack=datajob_stack,
        name="task2",
        job_path="data_pipeline_simple/task2.py",
    )
    task3 = GlueJob(
        datajob_stack=datajob_stack,
        name="task3",
        job_path="data_pipeline_simple/task3.py",
    )

    # we instantiate a step functions workflow and add the sources
    # we want to orchestrate. 
    with StepfunctionsWorkflow(
        datajob_stack=datajob_stack, name="data-pipeline-simple"
    ) as sfn:
        [task1, task2] >> task3

部署代码以粘合执行:

export AWS_PROFILE=my-profile    
datajob deploy --config datajob_stack.py

任何反馈都非常感谢!

于 2021-02-25T10:53:39.837 回答