Spark -Java IOException:未能在 /TMP /BlockMgr*中创建本地DIR



我试图运行长期运行的火花作业。执行几个小时后,我得到以下例外:

Caused by: java.io.IOException: Failed to create local dir in /tmp/blockmgr-bb765fd4-361f-4ee4-a6ef-adc547d8d838/28 

试图通过检查:

来解决它
  1. /tmp dir中的权限问题。Spark Server并未作为root运行。但是/tmp dir对所有用户都应写。

  2. /tmp dir有足够的空间。

假设您正在使用几个节点,则需要检查每个节点都参与Spark操作(Master/driver Slaves/nodes/workers)。

请确认每个工作人员/节点都有足够的磁盘空间(尤其是Check/TMP文件夹)和正确的权限。

编辑:以下答案最终无法解决我的案例。这是因为某些子文件夹火花(或某些依赖关系)能够创建,但并非全部。创建此类路径的频繁必要性将使任何项目都无法生存。因此,我以管理员的身份运行了Spark(Pyspark),这解决了案件。因此,最后可能是一个权限问题。


原始答案:
我解决了我在本地 Windows 机器(不是群集)上遇到的相同问题。由于权限没有问题,因此我创建了Spark无法创建的DIR,即我创建了以下文件夹作为本地用户,并且不需要更改该文件夹上的任何权限。

C:Users<username>AppDataLocalTempblockmgr-97439a5f-45b0-4257-a773-2b7650d17142

验证所有权限和用户访问后。

在Talend Studio中构建组件时,我遇到了相同的问题,并且通过在Spark Scratch Directory(temp Directory)中提供了正确的"/"在Spark配置选项卡中解决的问题。这是在Windows中构建JAR并在Linux群集中运行时所必需的。

最新更新