Python 数据流:无工作程序活动
我在从AI平台笔记本运行相对普通的数据流作业时遇到了一些问题(该作业旨在从BigQuery>清理和准备>写入GCS中的CSV中获取数据):Python 数据流:无工作程序活动,python,google-cloud-platform,google-cloud-dataflow,apache-beam,Python,Google Cloud Platform,Google Cloud Dataflow,Apache Beam,我在从AI平台笔记本运行相对普通的数据流作业时遇到了一些问题(该作业旨在从BigQuery>清理和准备>写入GCS中的CSV中获取数据): options={'staging_location':'/staging/location/, “临时位置”:“/temp/location/”, “作业名称”:“数据流管道作业”, "项目":项目,, “拆卸政策”:“始终拆卸”, “最大工人数”:3, "地区":地区,, “子网络”:“区域//子网络/”, 'no_save_main_session':
options={'staging_location':'/staging/location/,
“临时位置”:“/temp/location/”,
“作业名称”:“数据流管道作业”,
"项目":项目,,
“拆卸政策”:“始终拆卸”,
“最大工人数”:3,
"地区":地区,,
“子网络”:“区域//子网络/”,
'no_save_main_session':True}
opts=beam.pipeline.PipelineOptions(标志=[],**选项)
p=beam.Pipeline('DataflowRunner',options=opts)
(p
|'read'>>beam.io.read(beam.io.BigQuerySource(query=selquery,use\u standard\u sql=True))
|“csv”>>波束平面图(至csv)
|'out'>>beam.io.Write(beam.io.WriteToText('OUTPUT\u DIR/out.csv'))
p、 运行()
stackdriver返回的错误:
工作流失败。原因:数据流作业似乎被卡住,因为在过去1小时内未看到任何工作人员活动。您可以在获得有关云数据流的帮助
以下警告:
S01:eval_out/WriteToText/Write/WriteImpl/DoOnce/Read+out/WriteToText/Write/WriteImpl/InitializeWrite失败
不幸的是,除此之外没有其他什么。其他需要注意的事项:
- 作业在本地运行,没有任何错误
- 网络在自定义模式下运行,但为默认网络
- Python版本==3.5.6
- Python Apache Beam版本==2.16.0
- AI平台笔记本实际上是一个GCE实例,上面部署了一个深度学习VM映像(使用容器优化的操作系统),然后我们使用端口转发来访问Jupyter环境
- 请求作业的服务帐户(计算引擎默认服务帐户)具有完成此操作所需的权限
- 笔记本电脑实例、数据流作业、地面军事系统存储桶都在欧洲西部1
- 我也试着在标准的AI平台笔记本上运行这个程序 还是一样的问题
我意识到我的错误与以下相同:
我的工作陷入困境的原因是,写入gcs步骤将首先运行,即使它本应最后运行。关于如何解决这个问题有什么想法吗?在检查代码时,我注意到使用的“WriteToText转换”的语法与Apache beam文档中建议的语法不匹配 请遵循中概述的“WriteToText”参数语法
建议的解决方案是考虑使用BQ到批处理模式下可用的CSV文件导出选项。
还有更多的导出选项可用。完整列表可在“数据格式和压缩类型”文档中找到。是否可以从笔记本中捕获命令行输出命令?或者您可以在命令行上运行它并捕获输出?这将打印出一个指向dataflow UI的链接,您可以在其中进行进一步调试。您还可以手动导航到dataflow UI,并找到最近运行的作业以访问同一页面。请查看这些说明,看看是否可以从Dataflow UI的Stackdriver日志中识别任何内容。您是通过
--需求文件
,--额外的包
还是--设置文件
?另外,请注意,某些步骤可能不需要任何工人,并且它们被标记为在管道运行的所有时间都在运行WriteToText
就是其中之一。因此,即使您的工作人员尚未启动,WriteToText
仍将处于«运行»状态。
options = {'staging_location': '/staging/location/',
'temp_location': '/temp/location/',
'job_name': 'dataflow_pipeline_job',
'project': PROJECT,
'teardown_policy': 'TEARDOWN_ALWAYS',
'max_num_workers': 3,
'region': REGION,
'subnetwork': 'regions/<REGION>/subnetworks/<SUBNETWORK>',
'no_save_main_session': True}
opts = beam.pipeline.PipelineOptions(flags=[], **options)
p = beam.Pipeline('DataflowRunner', options=opts)
(p
| 'read' >> beam.io.Read(beam.io.BigQuerySource(query=selquery, use_standard_sql=True))
| 'csv' >> beam.FlatMap(to_csv)
| 'out' >> beam.io.Write(beam.io.WriteToText('OUTPUT_DIR/out.csv')))
p.run()