【问题标题】:java.lang.OutOfMemoryError: Java heap space - Google Dataflow Jobjava.lang.OutOfMemoryError:Java 堆空间 - Google 数据流作业
【发布时间】:2018-08-04 02:08:44
【问题描述】:

我正在运行一个有 150 名工作人员的 Google Dataflow 作业。我正在阅读来自 Google PubSub 的输入。经过几次充实后,我将结果写入 Google BigQuery。

对于少数记录,我在 Google 数据流中看到以下错误

  (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。我应该进一步增加工人数量吗?或者我应该增加每个工人的记忆?如何增加每个worker的内存?

【问题讨论】:

    标签: google-cloud-platform google-cloud-dataflow apache-beam


    【解决方案1】:

    Dataflow 可能会遇到此类问题,因为您的工作人员的内存负载非常高,并且会导致工作人员稳定性出现问题。您可以尝试增加工作人员可用的内存。

    例如,您可以尝试n1-highmem-2

    要选择机器类型,您可以在 Python 中使用 --worker_machine_type 参数,在 Java 中使用 --workerMachineType

    有关机器类型的更多信息,请查看GCE Machine Types

    【讨论】:

      猜你喜欢
      • 2010-12-08
      • 2015-05-14
      • 1970-01-01
      • 2019-07-10
      相关资源
      最近更新 更多