Python 工作流失败。原因:(35af2d4d3e5569e4):数据流似乎被卡住

Python 工作流失败。原因:(35af2d4d3e5569e4):数据流似乎被卡住,python,google-cloud-dataflow,apache-beam,Python,Google Cloud Dataflow,Apache Beam,我正在使用GoogleDataflow服务为ETL运行一些ApacheBeam脚本 这些作业最初需要4-5分钟才能完成,但现在它们在一小时后失败,并出现以下错误 工作流失败。原因:(35af2d4d3e5569e4):数据流似乎被卡住 看来这项工作实际上并没有开始 我使用PythonSDK2.1.0来执行它,作为切换SDK的问题的答案,我尝试使用PythonSDK2.0.0来执行它,但没有成功 工作编号:2017-09-28_04_28_31-11363700448712622518 更新: 在

我正在使用GoogleDataflow服务为ETL运行一些ApacheBeam脚本

这些作业最初需要4-5分钟才能完成,但现在它们在一小时后失败,并出现以下错误

工作流失败。原因:(35af2d4d3e5569e4):数据流似乎被卡住

看来这项工作实际上并没有开始

我使用PythonSDK2.1.0来执行它,作为切换SDK的问题的答案,我尝试使用PythonSDK2.0.0来执行它,但没有成功

工作编号:2017-09-28_04_28_31-11363700448712622518

更新:

在@BenChambers建议检查日志后,作业似乎没有启动,因为工人启动失败

日志显示了以下4次日志(如数据流文档中所述,在声明捆绑包失败之前,尝试了4次捆绑包)

为dataflow worker运行setup.py安装:已完成,状态为“完成”
已成功安装dataflow-worker-2.1.0
正在执行:/usr/local/bin/pip install/var/opt/google/dataflow/workflow.tar.gz
Processing/var/opt/google/dataflow/workflow.tar.gz
从命令python setup.py egg_info完成输出:
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
IOError:[Errno 2]没有这样的文件或目录:'/tmp/pip YAAeGg build/setup.py'
---------------------------------------- 
命令“python setup.py egg_info”在/tmp/pip YAAeGg build/中失败,错误代码为1
/usr/local/bin/pip失败,退出状态为1
数据流基本路径覆盖:https://dataflow.googleapis.com/ 
未能向服务报告安装错误:无法租用工作项以报告失败(未返回任何工作项)

管道堵塞的一个常见原因是工人无法启动。在UI中,您应该能够单击顶部附近的“日志”,然后单击显示“Stackdriver”的链接。这将带您进入Stackdriver日志页面,该页面配置为查看给定作业的
工作人员
日志。如果将其从
worker
更改为
worker startup
,则应显示尝试启动worker的日志。如果在启动过程中出现问题,则应显示在此处。

当作业提交给数据流服务时,它会向工作人员安装最新版本的apache beam。目前,apache beam的最新版本是2.1.0。apachebeam或googlecloudpython包的内部实现必须使用名为
six
的python包

正如答案所示,包
six
的最新版本,即
1.11.0
不适用于
apachebeam 2.1.0

我建议您为数据流服务提供一个设置文件,其中会提到
six
的版本应该是1.10,而不是1.11。您可以通过向安装文件提供
install requires
参数来实现这一点

install_requires=[
    'six==1.10.0',      
    ]
您可以在

您可以在以下位置阅读有关如何为数据流作业提供安装文件的信息:


更新

当您将作业提交给dataflow时,dataflow服务将启动计算引擎作为其工作程序,并安装运行dataflow所需的所有需求。因此,它安装的所有python包都在dataflow服务的手中,并且它会安装它们的默认配置。这可能会导致诸如以下问题:

解决方案是通过向管道的
pipeline\u选项提供
requirements\u file
参数,向数据流作业提供需求文件。这将使dataflow服务能够在worker上安装您在需求文件中提到的python包,并且可以避免由于包的版本控制而引起的问题


您可以在

上找到如何向数据流管道提供需求文件。检查日志后,我更新了问题,您能建议如何继续吗?
install_requires=[
    'six==1.10.0',      
    ]