我有一个由Dataprep生成的Dataflow模板,并正在使用Composer(即Apache Airflow)执行它。
该任务正在触发数据流作业,但是随后失败,并显示错误消息according to posts on SO,该错误指示我需要指定具有更高内存的计算机类型。
我在machineType
中指定了DataflowTemplateOperator
,但是它不适用于数据流作业:
dataflow_default_options={
'project': 'projectname',
'zone': 'europe-west1-b',
'tempLocation': 'gs://bucketname-dataprep-working/temp/',
'machineType': 'n1-highmem-4'
},
对此进行了一段时间的调查,我发现关于如何称呼machineType
属性的建议存在冲突-我也尝试过workerMachineType
,machine-type
和{{1} }无济于事。
这里有没有人成功地为worker-machine-type
指定了工作者类型?
答案 0 :(得分:1)
我假设您正在使用基于标签的Python SDK。
您是否尝试过execution parameter documentation中的Python选项?
Python选项拼写为machine_type
,这是worker_machine_type
的别名,带有下划线。
我以前没有使用过Composer / Airflow,所以这只是一个建议。
答案 1 :(得分:1)
根据hook source,machineType
是模板作业唯一接受的密钥。然后,您指定的变量将用于构建对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版本中存在。