我们正在尝试在云中运行Google Cloud Dataflow作业,但我们不断获得" java.lang.OutOfMemoryError:Java堆空间"。
我们正在尝试处理来自Big Query表的6.1亿条记录,并将处理过的记录写入12个不同的输出(主+ 11侧输出)。
我们已尝试将实例数增加到64个n1-standard-4实例,但我们仍然遇到此问题。
虚拟机上的Xmx值似乎设置为~4GB(-Xmx3951927296),即使实例具有15GB内存。有没有办法增加Xmx值?
职位编号为 - 2015-06-11_21_32_32-16904087942426468793
答案 0 :(得分:2)
您无法直接设置堆大小。但是,数据流会根据计算机类型缩放堆大小。您可以通过设置标志“--machineType”来选择具有更多内存的计算机。堆大小应随机器类型的总内存线性增加。
Dataflow故意限制堆大小以避免对shuffler产生负面影响。
您的代码是否显式累积内存中多个记录的值?您是否预计4GB对于任何给定的记录都不足够?
Dataflow的内存要求应根据单个记录的大小和代码在内存中缓冲的数据量进行扩展。数据流的内存要求不应随记录数量的增加而增加。