我正在运行一个谷歌数据流的工作与150名工人。我正在阅读来自谷歌PubSub的输入。经过几次充实后,我将结果写入谷歌BigQuery。
对于少数记录,我在Google Dataflow中看到以下错误
(787b51f314078308): Exception: java.lang.OutOfMemoryError: Java heap space
java.nio.HeapByteBuffer.<init>(HeapByteBuffer.java:57)
java.nio.ByteBuffer.allocate(ByteBuffer.java:335)
...
...
...
com.google.cloud.dataflow.sdk.util.SimpleDoFnRunner.invokeProcessElement(SimpleDoFnRunner.java:49)
com.google.cloud.dataflow.sdk.util.DoFnRunnerBase.processElement(DoFnRunnerBase.java:139)
com.google.cloud.dataflow.sdk.runners.worker.SimpleParDoFn.processElement(SimpleParDoFn.java:188)
com.google.cloud.dataflow.sdk.runners.worker.ForwardingParDoFn.processElement(ForwardingParDoFn.java:42)
com.google.cloud.dataflow.sdk.runners.worker.DataflowWorkerLoggingParDoFn.processElement(DataflowWorkerLoggingParDoFn.java:47)
Stack trace truncated. Please see Cloud Logging for the entire trace.
我使用150个工作人员每秒处理大约75K条消息。每条消息的大小约为1.5KB。我是否应该进一步增加no.of工作人员?或者我应该增加每个工作者的内存?如何增加每个工作进程的内存?
发布于 2017-06-20 23:17:10
数据流可能会遇到这样的问题,因为工作进程上的内存负载非常高,并且会给工作进程的稳定性带来问题。您可以尝试增加工作人员可用的内存。
例如,您可以尝试n1-highmem-2
。
要选择机器类型,可以在Python语言中使用--worker_machine_type
参数,在Java语言中使用--workerMachineType
。
有关机器类型的详细信息,请查看GCE Machine Types
https://stackoverflow.com/questions/44644045
复制相似问题