在Python中为GCP Dataflow作业指定机器类型

问题描述 投票:1回答:2

我有一个由Dataprep生成的Dataflow模板,我正在使用Composer(即Apache Airflow)执行它。

该任务正在触发Dataflow作业,但随后出现错误,according to posts on SO指示我需要指定具有更高内存的计算机类型的错误。

我在machineType中指定DataflowTemplateOperator,但它不适用于Dataflow作业:

dataflow_default_options={
    'project': 'projectname',
    'zone': 'europe-west1-b',
    'tempLocation': 'gs://bucketname-dataprep-working/temp/',
    'machineType': 'n1-highmem-4'
},

经过一段时间的调查,我看到有关什么称为machineType属性的相互矛盾的建议 - 我也尝试过workerMachineTypemachine-typeworker-machine-type无济于事。

有没有人在这里成功为DataflowTemplateOperator指定了一个工人类型?

python google-cloud-dataflow airflow google-cloud-composer
2个回答
1
投票

我假设你正在使用基于标签的Python SDK。你有没有尝试过execution parameter documentation的Python选项? Python选项拼写为machine_type,它是带有下划线的worker_machine_type的别名。

我之前没有使用过Composer / Airflow,所以这只是一个建议。


1
投票

根据hook sourcemachineType是模板工作唯一被接受的关键。然后,您指定的变量用于构建对REST API的请求,如下所示:

# RuntimeEnvironment
environment = {}
for key in ['maxWorkers', 'zone', 'serviceAccountEmail', 'tempLocation',
            'bypassTempDirValidation', 'machineType', 'network', 'subnetwork']:
    if key in variables:
        environment.update({key: variables[key]})

# LaunchTemplateParameters
body = {"jobName": name,
        "parameters": parameters,
        "environment": environment}

# projects.locations.template.launch
service = self.get_conn()
request = service.projects().locations().templates().launch(
    projectId=variables['project'],
    location=variables['region'],
    gcsPath=dataflow_template,
    body=body
)

projects.locations.template.launch的文档指定请求体应该是LaunchTemplateParameters的一个实例,它有另一个RuntimeEnvironment。这从钩子源看起来是准确的。

您可以采取的一些调试步骤:您可以记录/检查传出的REST调用,或者在Stackdriver日志记录中查找调用(以及与作业创建请求相关的元数据)。

注意:这仅适用于[AIRFLOW-1954],它是Airflow v1.10.0版本的一部分。这意味着它仅存在于某些Cloud Composer版本中。

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