当我们从一个docker映像启动我们的Beam Golang SDK管道(驱动程序)时,我们经常会得到一个错误,该映像在从local/VM实例启动时工作。我们正在为我们的管道和Kubernetes使用Dataflow runner进行部署。
User program exited: fork/exec /bin/worker: no such file or directory
在查看Stackdriver日志以了解更多细节时,我们看到以下内容:
Error syncing pod 00014c7112b5049966a4242e323b7850 ("dataflow-go-job-1-1611314272307727-
01220317-27at-harness-jv3l_default(00014c7112b5049966a4242e323b7850)"),
skipping: failed to "StartContainer" for "sdk" with CrashLoopBackOff:
"back-off 2m40s restarting failed container=sdk pod=dataflow-go-job-1-
1611314272307727-01220317-27at-harness-jv3l_default(00014c7112b5049966a4242e323b7850)"
在Dataflow common errors文档中找到了对此错误的引用,但它太通用了,无法找出哪里失败了。在多次重试之后,我们能够从POD中消除任何与权限/访问相关的问题。不知道这里还有什么问题。
经过多次尝试,我们决定从一个新的基于Debian10的VM实例中手动启动这项工作,它成功了。这让我们注意到,我们在Docker中使用的是基于Alpine
的golang映像,它可能没有安装启动作业所需的所有依赖项。
在golang docker hub上,我们找到了golang:1.14-buster
,其中buster是Debian10的代号。将其用于docker构建帮助我们解决了这个问题。我在这里回答,以帮助其他面临同样问题的人。
我正在使用apache束编写的google数据流上运行一项作业,该数据流从BigQuery表和文件中读取。转换数据并将其写入其他BigQuery表。作业“通常”会成功,但有时我在从大查询表读取时随机获得nullpoer异常,而我的作业失败: 我不知道这与什么有关。当我清除临时目录并重新加载模板时,作业再次通过。 我阅读BQ的方式很简单: 我将非常感谢任何帮助。 任何人
因此,我们正在寻找防止这种融合发生的方法,因此数据流将窗口与窗口的后处理分开。这样,我们期望Dataflow能够再次分配多个工作人员来进行激发窗口的后处理。 到目前为止我们所尝试的: null 最后两个操作确实创建了第三个集群操作(1/processing2/windowing3/post-processing),但我们注意到,在开窗之后,仍然是同一个worker在执行所有操作。 是否有任何解决方
我有一个从BigQuery获取数据并将其写入GCS的管道,但是,如果我发现任何拒绝,我希望将它们正确地添加到一个BigQuery表中。我将拒绝收集到一个全局列表变量中,然后将列表加载到BigQuery表中。当我在本地运行它时,这个过程工作得很好,因为管道以正确的顺序运行。当我使用dataflowrunner运行它时,它不能保证顺序(我希望pipeline1在Pipeline2之前运行。有没有一种方
我在Google Dataflow上运行了一个Apache Beam管道,它从GCS读取GZIP压缩的JSON数据,转换它们,并将它们加载到Google BigQuery中。管道在样本批数据上的工作与预期的一样,但是当我试图在整个数据上运行它时(~2.4百万个文件),它有时会引发一个令人困惑的错误,在几次出现后就会破坏进程。 错误是: 我知道错误涉及的阶段是: 其中是管道对象,是形式的glob。
我正在构建一个Apache Beam管道,将Kafka作为一个无界源进行阅读。 我能够使用直接运行器在本地运行它。 然而,当在云上使用Google Cloud Dataflow runner运行时,管道会因附加的异常堆栈跟踪而失败。 似乎最终是Conscrypt Java库抛出了。我真的不知道如何解决这个问题。