2017-06-20 35 views
0

我正在使用150名工作人員運行Google Dataflow作業。我正在閱讀來自Google PubSub的輸入內容。經過幾次豐富之後,我將結果寫入Google BigQuery。java.lang.OutOfMemoryError:Java堆空間 - 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。我應該進一步增加工人的數量嗎?還是應該增加每個工人的記憶?我怎樣才能增加每個工人的記憶?

回答

0

您可以嘗試爲工作人員使用更高的內存機器。例如,您可以嘗試n1-highmem-2

要選擇機器類型,您可以在Python中使用--worker_machine_type參數,在Java中使用--workerMachineType

有關機器類型的更多信息,請檢查GCE Machine Types

相關問題