在Windows 7 64位中删除Spark临时目录时出现异常

Bip*_*ath 9 hadoop apache-spark

我试图在Windows 7 64位中运行spark作业的单元测试.我有

HADOOP_HOME=D:/winutils

winutils path= D:/winutils/bin/winutils.exe
Run Code Online (Sandbox Code Playgroud)

我跑下面的命令:

winutils ls \tmp\hive
winutils chmod -R 777  \tmp\hive
Run Code Online (Sandbox Code Playgroud)

但是,当我运行我的测试时,我得到以下错误.

Running com.dnb.trade.ui.ingest.spark.utils.ExperiencesUtilTest
Tests run: 17, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.132 sec
17/01/24 15:37:53 INFO Remoting: Remoting shut down
17/01/24 15:37:53 ERROR ShutdownHookManager: Exception while deleting Spark temp dir: C:\Users\415387\AppData\Local\Temp\spark-b1672cf6-989f-4890-93a0-c945ff147554
java.io.IOException: Failed to delete: C:\Users\415387\AppData\Local\Temp\spark-b1672cf6-989f-4890-93a0-c945ff147554
        at org.apache.spark.util.Utils$.deleteRecursively(Utils.scala:929)
        at org.apache.spark.util.ShutdownHookManager$$anonfun$1$$anonfun$apply$mcV$sp$3.apply(ShutdownHookManager.scala:65)
        at .....

Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=786m; support was removed in 8.0

Caused by: java.lang.RuntimeException: java.io.IOException: Access is denied
        at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:525)
        ... 28 more
Caused by: java.io.IOException: Access is denied
        at java.io.WinNTFileSystem.createFileExclusively(Native Method)
Run Code Online (Sandbox Code Playgroud)

我试图手动更改permition ..每次我得到相同的错误.

请帮忙

小智 6

问题出在ShutdownHook中,它试图删除临时文件但失败。尽管您无法解决问题,但可以通过将以下两行添加到log4j.properties文件中来隐藏异常%SPARK_HOME%\conf。如果该文件不存在,请复制log4j.properties.template并重命名。

log4j.logger.org.apache.spark.util.ShutdownHookManager=OFF
log4j.logger.org.apache.spark.SparkEnv=ERROR
Run Code Online (Sandbox Code Playgroud)

视线不清。

  • 忽略这一点的问题在于,未删除的临时文件会堆积起来并占用磁盘空间,大多数人不太可能在此目录中查找它们。 (2认同)

Bru*_*ral 5

尝试使用Spark-submit命令运行 WordCount 示例后,我遇到了同样的问题。现在,我忽略它,因为它在错误发生之前返回结果。

我在 Spark Jira 中发现了一些老问题,但没有找到任何修复。(顺便说一句,其中之一的状态已关闭。)

https://issues.apache.org/jira/browse/SPARK-8333

https://issues.apache.org/jira/browse/SPARK-12216

不幸的是,他们似乎根本不关心窗户上的火花。

一种糟糕的解决方案是将 Temp 文件夹(在您的情况下为 *C:\Users\415387\AppData\Local\Temp*)授予所有人权限。

所以它会是这样的:

winutils chmod -R 777 C:\Users\415387\AppData\Local\Temp\
Run Code Online (Sandbox Code Playgroud)

但我强烈建议您要这样做。

  • 我更改了 Temp 文件夹的权限以查看问题所在,但它不起作用。另外,我尝试使用 --conf spark.local.dir 指定一个不同的工作目录,其中一个目录我知道我有权限,但它也不起作用。所以这绝对不是权限问题。如果有人有解决方案,请分享。 (4认同)
  • 您还可以通过设置“java.io.tmpdir”Java 系统属性来更改此临时目录的位置,这样您就可以将其放在您愿意更改权限的其他位置。 (2认同)

小智 5

下面的行应该隐藏 Windows 上log4j2的错误

logger.shutdownhookmanager.name = org.apache.spark.util.ShutdownHookManager
logger.shutdownhookmanager.level = OFF

logger.sparkenv.name = org.apache.spark.SparkEnv
logger.sparkenv.level = ERROR
Run Code Online (Sandbox Code Playgroud)


小智 3

我已经按照与您相同的方式设置了 HADOOP_HOME 变量。(在 Windows 10 上)

设置权限时尝试使用完整路径,即

D:> winutils/bin/winutils.exe chmod 777 \tmp\hive

这对我有用。

另外,只是关于异常的注释 - 我在通过运行“sys.exit”从 cmd 退出 Spark 时遇到了相同的异常。

但是......当我使用“:q”或“:quit”时,我可以干净地退出。所以,不确定这里发生了什么,仍在试图弄清楚......