我有一个运行在EMR上的spark应用程序(16个节点,1个主节点,15个核心,r3.2xlarge实例)。对于Spark执行程序配置,我们使用动态分配。
在将数据加载到RDD时,我看到有时候,当有大量数据(700 Gb)时,Spark会用完内存,但不会使App失败。而是应用程序卡在那里。我不确定为什么会这样,但这是我的理论:-
我的理论是,在创建数据帧时可能正在缓存事物,但是永远不会放弃缓存,这会导致Spark挂起。
有两种解决方案
关于如何进行的任何线索?
最佳答案
可能还有其他两种可能性。分区太大,或者偏斜严重(分区大小变化很大)。
尝试使用重新分区来增加分区的数量(并因此减小其大小)。这将在您的执行器中随机地重新整理数据(可以很好地减少偏斜,但速度较慢)。理想情况下,我希望我的分区在64Mo左右,具体取决于您的计算机。
关于hadoop - Spark 执行器在内存不足后挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39397500/