我在最近提交的工作中遇到以下错误:
2015-01-07T15:51:56.404Z: (893c24e7fd2fd6de): Workflow failed.
Causes: (893c24e7fd2fd601):
There was a problem creating the GCE VMs or starting Dataflow on the VMs so no data was processed. Possible causes:
1. A failure in user code on in the worker.
2. A failure in the Dataflow code.
Next Steps:
1. Check the GCE serial console for possible errors in the logs.
2. Look for similar issues on http://stackoverflow.com/questions/tagged/google-cloud-dataflow.
没有其他错误。
这个错误是什么意思?
答案 0 :(得分:2)
不好意思。
Dataflow启动VM实例,然后在这些VM上启动代理。然后,这些代理会执行您的数据执行代码(例如,ParDo,读,写)。
错误表示作业失败,因为没有代理正在请求工作。结果,该服务将该作业标记为失败,因为它没有取得任何进展,因为没有任何代理处理您的数据。
因此,我们需要弄清楚代理启动过程中失败的原因。
要检查的第一件事是VM是否实际启动。当您运行作业时,您是否看到在项目中创建了任何VM? VM可能需要一两分钟才能启动,但它们应该在跑步者打印出消息"启动工作人员池设置"后不久出现。 VM应命名为
<PREFIX-OF-JOB-NAME>-<TIMESTAMP>-<random hexadecimal number>-<instance number>
仅使用作业名称的前缀来确保我们不超过GCE名称限制。
如果VM启动,接下来要做的是检查工作日志以查找指示启动代理时出现问题的错误。
访问日志的最简单方法是使用UI。转到Google Cloud Console,然后在左侧框中选择“数据流”选项。你应该看到你的工作清单。您可以单击相关作业。这应该会显示您的工作图。在右侧,您应该看到一个按钮&#34;查看日志&#34;。请点击它。然后,您应该看到用于导航日志的UI,您可以查找错误。
第二个选项是在GCS上查找日志。要查找的位置是:
gs://PATH TO YOUR STAGING DIRECTORY/logs/JOB-ID/VM-ID/LOG-FILE
您可能会看到多个日志文件。我们最感兴趣的是以&#34; start_java_worker&#34;开头的那个。如果该日志文件不存在,那么工作人员没有足够的进度来实际上传文件;或者上传日志文件时可能存在权限问题。
在这种情况下,最好的办法是在它被拆除之前尝试ssh到其中一个VM。您应该在作业失败前大约15分钟,并删除VM。
登录VM后,您可以在
中找到所有日志/var/log/dataflow/...
此时我们最关心的日志是:
/var/log/dataflow/taskrunner/harness/start_java_worker-SOME ID.log
如果在启动VM上运行的代码时出现问题,则日志应该告诉我们。该日志和其他日志还应告诉我们是否存在权限问题,导致该工作程序上运行的代码无法访问Dataflow。
如果您发现任何问题,请查看并通知我们。
答案 1 :(得分:0)
除了杰里米·莱维这个很好的答案之外,我想补充一点,如果您未在开发人员控制台中启用正确的Google API,我会看到此错误,如上所述{{ 3}},这导致许可问题,就像杰里米说的那样。