0

所以基本上我有一个 python spark 作业,它读取一些简单的 json 文件,然后尝试将它们写为由一个字段分区的 orc 文件。分区不是很平衡,因为一些键非常大,而另一些非常小。

做这样的事情时我有记忆问题:

events.write.mode('append').partitionBy("type").save("s3n://mybucket/tofolder"), format="orc")

向执行程序添加内存似乎没有任何效果,但我解决了它增加驱动程序内存。这是否意味着所有数据都被发送到驱动程序以供其写入?每个执行者不能写自己的分区吗?我正在使用 Spark 2.0.1

4

1 回答 1

0

即使您对数据集进行分区然后将其写入存储,也不可能将记录发送到驱动程序。您应该查看内存问题的日志(如果它们发生在驱动程序或执行程序上)以找出失败的确切原因。

write由于先前的计算,您的驱动程序可能内存太低而无法处理。尝试减少spark.ui.retainedJobsspark.ui.retainedStages节省旧作业和阶段元数据的内存。如果这没有帮助,请连接到驱动程序jvisualvm以查找工作/阶段,而不是消耗大量堆碎片并尝试优化。

于 2016-11-17T07:02:14.683 回答