我使用的Apache梁在Python与谷歌云数据流(2.3.0)。当指定worker_machine_type
参数作为例如n1-highmem-2
或custom-1-6656
,数据流运行工作,但总是使用标准机型为n1-standard-1
每一个工人。
没有人有一个想法,如果我做错了什么?
其他主题(here和here)显示,这应该是可能的,所以这可能是一个版本的问题。
我指定PipelineOptions代码(注意,所有其他选项都做工精细,所以应该认识到worker_machine_type
参数):
def get_cloud_pipeline_options(project):
options = {
'runner': 'DataflowRunner',
'job_name': ('converter-ml6-{}'.format(
datetime.now().strftime('%Y%m%d%H%M%S'))),
'staging_location': os.path.join(BUCKET, 'staging'),
'temp_location': os.path.join(BUCKET, 'tmp'),
'project': project,
'region': 'europe-west1',
'zone': 'europe-west1-d',
'autoscaling_algorithm': 'THROUGHPUT_BASED',
'save_main_session': True,
'setup_file': './setup.py',
'worker_machine_type': 'custom-1-6656',
'max_num_workers': 3,
}
return beam.pipeline.PipelineOptions(flags=[], **options)
def main(argv=None):
args = parse_arguments(sys.argv if argv is None else argv)
pipeline_options = get_cloud_pipeline_options(args.project_id
pipeline = beam.Pipeline(options=pipeline_options)
PipelineOptions
使用argparse
幕后解析它的参数。在机种的情况下,参数的名称是machine_type
然而标志名称是worker_machine_type
。这在以下两种情况下,如果不argparse及其解析,并意识到这种混淆的正常工作:
my_pipeline.py --worker_machine_type custom-1-6656
flags['--worker_machine_type', 'worker_machine_type custom-1-6656', ...]
但是它不与**kwargs
很好地工作。以这种方式传递的任何额外的参数是用来代替已知的参数名称(但不是标志名称)。
总之,使用machine_type
会的工作无处不在。我申请https://issues.apache.org/jira/browse/BEAM-4112这是固定在梁的未来。
这可以通过使用该标志,而不是machine_type
的worker_machine_type
来解决。代码的其余部分工作正常。
因此,documentation被提了错误的字段名。
什么在Apache的梁2.8.0工作对我来说是通过改变this line到--worker_machine_type
更新--machine_type
的源代码(再使用machine_type
作为参数的名称,如其他答案建议)。