注意:以下翻译的准确性尚未经过验证。这是使用 AIP ↗ 从原始英文文本进行的机器翻译。

排查内存不足(OOM)出错

内存不足出错可以在任务中通过几种方式表现出来:

  • 看到 “任务因阶段失败而中止”
  • 看到 “ExecutorLostFailure”
  • 看到 “Spark模块在任务[jobID]使用时失效。(ExitReason: MODULE_UNREACHABLE)”
  • 看到 与驱动程序的连接丢失

这些错误信息表明您已经超出了该搭建的最大允许内存。这通常不是平台的问题,而是您请求平台运行的搭建的问题。您可以采取以下几个步骤来减少运行搭建所需的内存。

要进行故障排除,请执行以下步骤:

  • 如果您的变换是用Python或Pandas编写的:
    • 尽可能将计算移到PySpark中,以利用整个计算集群的能力。在原始Python和Pandas中的逻辑是在单个处理器的驱动程序上执行的,速度可能比您的笔记本电脑还慢。
  • 如果您的变换使用了合并:
    • 查找“空合并”——合并到许多行值为空的列上。这可能显著增加合并的内存消耗。为了解决这个问题,您可以在变换中或在之前的变换中筛选掉问题列中的空值。
    • 查找大幅增加输出数据集行数的合并,并确认这是必要的。一个提示是运行一个分析,计算数据集中每个键的行数以及合并后的结果行数。
  • 检查输入数据集中文件的大小 (数据集 → 详情 → 文件 → 数据集文件)。它们每个至少应该有128MB。如果它们太小或太大,您需要重新分区。
  • 将变换拆分为多个较小的变换。这也可以帮助您识别导致失败的变换部分。
  • 从输入数据集中删除不需要的列,或预筛选数据集以删除不需要的行,以减少Spark需要在内存中保留的数据量。
  • 如果可以,简化您的变换逻辑。