我有两个spark实用程序函数:myUtility1和myUtility2。它们彼此非常独立,并且首先运行哪个并不重要。
如果我跑:
val outData1 = myUtiltity1.process(inputData, utilData1)
这需要40分钟。一切顺利,没有重试。
如果我跑:
val outData2 = myUtiltity2.process(inputData, utilData2)
它工具20分钟。一切顺利,没有重试。
但是,如果我这样做:
val outData1 = myUtiltity1.process(inputData, utilData1)
val outData2 = myUtiltity2.process(outData1, utilData2)
这项工作需要比(40 + 20)= 60分钟更长的时间,并且myUtiltity1和myUtiltity2中的某些任务都会重试。为什么会发生这种情况?如何解决这个问题?
非常感谢!
答案 0 :(得分:1)
问题的可能原因是myUtiltity1.process
正在对您的rdds进行一些缓存。执行myUtiltity2.process
时,由于内存空间不足,它会溢出到磁盘中。
查看Spark Web UI(存储选项卡)并检查内存中是否有任何rdds。考虑修改代码以释放未使用的rdds(因为您提到这两个进程是独立的)或者保留到磁盘。