所以基本上我有一个python spark作业,读取一些简单的json文件,然后尝试将它们写为由一个字段分区的orc文件。分区不是很平衡,因为有些键非常大,而其他键非常小。
在做这样的事情时我遇到了记忆问题:
events.write.mode('append').partitionBy("type").save("s3n://mybucket/tofolder"), format="orc")
向执行程序添加内存似乎没有任何影响,但我解决了增加驱动程序内存的问题。这是否意味着所有数据都被发送给驱动程序以供其编写?每个执行者都不能写自己的分区吗?我正在使用Spark 2.0.1
答案 0 :(得分:0)
即使您对数据集进行分区,然后将其写入存储,也不可能将记录发送到驱动程序。您应该查看内存问题的日志(如果它们出现在驱动程序或执行程序上),以找出失败的确切原因。
由于之前的计算,您的驱动程序可能内存太低而无法处理此write
。尝试减少spark.ui.retainedJobs
和spark.ui.retainedStages
以节省旧作业和阶段元数据的内存。如果这没有帮助,请使用jvisualvm
连接到驱动程序以查找作业/阶段,而不是使用大堆碎片并尝试进行优化。