2017-06-20 8 views
0

Ich führe einen Google Dataflow-Job mit 150 Mitarbeitern aus. Ich lese die Eingabe von Google PubSub. Nach einer kleinen Bereicherung schreibe ich das Ergebnis in Google BigQuery.java.lang.OutOfMemoryError: Java-Heapspeicher - Google Dataflow-Job

Für einige Datensätze sehe ich die unten Fehler in 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. 

I 150 Arbeitern sind mit ~ 75K Nachrichten pro Sekunde zu verarbeiten. Und jede Nachricht hat eine Größe von ~ 1,5KB. Soll ich die Anzahl der Arbeiter weiter erhöhen? Oder sollte ich die Erinnerung an jeden Arbeiter erhöhen? Wie kann ich die Erinnerung an jeden Arbeiter erhöhen?

Antwort

0

Sie können versuchen, höhere Speichermaschinen für Arbeiter zu verwenden. Zum Beispiel können Sie versuchen, n1-highmem-2.

Um einen Maschinentyp auszuwählen, können Sie den Parameter --worker_machine_type in Python und --workerMachineType in Java verwenden.

Weitere Informationen zu Maschinentypen finden Sie unter GCE Machine Types

Verwandte Themen