google-cloud-platform - 如何解决 Google Dataflow 中的稳定性问题
问题描述
我有一个数据流作业已经稳定运行了几个月。过去 3 天左右,我的工作出现问题,经过一段时间后卡住了,我唯一能做的就是停止工作并开始新的工作。这发生在处理 2、6 和 24 小时后。这是最新的例外:
java.lang.ExceptionInInitializerError
at org.apache.beam.runners.dataflow.worker.options.StreamingDataflowWorkerOptions$WindmillServerStubFactory.create (StreamingDataflowWorkerOptions.java:183)
at org.apache.beam.runners.dataflow.worker.options.StreamingDataflowWorkerOptions$WindmillServerStubFactory.create (StreamingDataflowWorkerOptions.java:169)
at org.apache.beam.sdk.options.ProxyInvocationHandler.returnDefaultHelper (ProxyInvocationHandler.java:592)
at org.apache.beam.sdk.options.ProxyInvocationHandler.getDefault (ProxyInvocationHandler.java:533)
at org.apache.beam.sdk.options.ProxyInvocationHandler.invoke (ProxyInvocationHandler.java:158)
at com.sun.proxy.$Proxy54.getWindmillServerStub (Unknown Source)
at org.apache.beam.runners.dataflow.worker.StreamingDataflowWorker.<init> (StreamingDataflowWorker.java:677)
at org.apache.beam.runners.dataflow.worker.StreamingDataflowWorker.fromDataflowWorkerHarnessOptions (StreamingDataflowWorker.java:562)
at org.apache.beam.runners.dataflow.worker.StreamingDataflowWorker.main (StreamingDataflowWorker.java:274)
Caused by: java.lang.RuntimeException: Loading windmill_service failed:
at org.apache.beam.runners.dataflow.worker.windmill.WindmillServer.<clinit> (WindmillServer.java:42)
Caused by: java.io.IOException: No space left on device
at sun.nio.ch.FileDispatcherImpl.write0 (Native Method)
at sun.nio.ch.FileDispatcherImpl.write (FileDispatcherImpl.java:60)
at sun.nio.ch.IOUtil.writeFromNativeBuffer (IOUtil.java:93)
at sun.nio.ch.IOUtil.write (IOUtil.java:65)
at sun.nio.ch.FileChannelImpl.write (FileChannelImpl.java:211)
at java.nio.channels.Channels.writeFullyImpl (Channels.java:78)
at java.nio.channels.Channels.writeFully (Channels.java:101)
at java.nio.channels.Channels.access$000 (Channels.java:61)
at java.nio.channels.Channels$1.write (Channels.java:174)
at java.nio.file.Files.copy (Files.java:2909)
at java.nio.file.Files.copy (Files.java:3027)
at org.apache.beam.runners.dataflow.worker.windmill.WindmillServer.<clinit> (WindmillServer.java:39)
似乎设备上没有剩余空间,但这不应该由谷歌管理吗?或者这是我工作中的一个错误?
更新:工作流程如下:
- 从 PubSub 读取海量数据(最高 1500/s)
- 过滤一些消息
- 将会话窗口保持在键上并按其分组
- 对数据进行排序并进行计算
- 将数据输出到另一个 PubSub
解决方案
您可以在管道参数中增加存储容量。看看diskSizeGb
这个页面中的这个
此外,您在内存中保存的数据越多,您需要的内存就越多。窗口就是这种情况,如果您从不关闭它们,或者如果您允许延迟数据太长时间,您需要大量内存来保持所有这些数据。
调整您的管道或机器类型。或两者!
推荐阅读
- oracle - 分区索引以减少缓冲区繁忙等待?
- tableau-api - 按分组日期计算记录数?
- javascript - 由于变量未加载,无法绑定到子组件的属性?
- c#-4.0 - 为什么程序集配置会覆盖 app.config?
- r - 在堆叠的“geom_bar()”中将误差线与组均值垂直对齐
- html5-video - 使用 videogular2 从 Google 驱动器播放视频
- javascript - 如何在服务器(cpanel)上设置 nodejs 代码
- python - 将mysql查询结果(对象数组)转换为json
- git - 由于空间问题,如何更改 git-bare 存储库位置?
- angular - 离子搜索栏过滤器不是功能