1

我有一个使用 DirectRunner 在本地运行良好的 Beam 管道。但是,当切换到 DataFlowRunner 时,作业开始了,我可以从 Google 数据流 web ui 中看到流程图。但是,作业不会运行。它一直挂在那里,直到我停止工作。我正在使用 Beam 2.10。我可以在日志中看到自动缩放调整cpu,没有异常。

我认为这与我创建 Jar 文件的方式有关。我正在使用 shadow Jar 在 gradle build 中创建 jar 文件。使用 ShadowJar 的主要原因是用于 mergeServiceFiles()。如果不使用 mergeServiceFiles(),则作业将运行异常,例如No FileSystem found for gs

所以我从谷歌数据流模板回购中复制了字数并将其打包为 jar 文件。它显示了同样的事情,工作开始但没有移动。该代码已对服务帐户凭据进行了最小更改。我扩展了凭证的 GcsOptions,而不是原来的 PipelineOptions。

尝试过梁 2.12、2.10。

4

1 回答 1

1

通过单击显示的日志右上角的stackdrive进行挖掘并找到完整的日志。找到以下

Caused by: java.lang.IllegalStateException: Detected both log4j-over-slf4j.jar AND bound slf4j-log4j12.jar on the class path, preempting StackOverflowError. See also http://www.slf4j.org/codes.html#log4jDelegationLoop for more details. at org.slf4j.impl.Log4jLoggerFactory.<clinit>(Log4jLoggerFactory.java:54) ....

然后 java failed with exit status 1 在log4j错误下有一个日志条目几行。基本上 java 程序已经停止,但数据流 UI 仍然显示它正在流程图上运行。

使用 gradle 构建脚本排除所有 slf4j-log4j12 compile ('org.apache.hadoop:hadoop-mapreduce-client-core:3.2.0') {exclude group: 'org.slf4j', module: 'slf4j-log4j12'}

和其他依赖项包含 slf4j-log4j12 并且作业开始移动。

于 2019-05-15T20:53:52.763 回答