Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop 在Windows 7 64位中删除Spark temp dir时出现异常_Hadoop_Apache Spark - Fatal编程技术网

Hadoop 在Windows 7 64位中删除Spark temp dir时出现异常

Hadoop 在Windows 7 64位中删除Spark temp dir时出现异常,hadoop,apache-spark,Hadoop,Apache Spark,我正在尝试在Windows7 64位中运行spark作业的单元测试。我有 HADOOP_HOME=D:/winutils winutils path= D:/winutils/bin/winutils.exe 我运行了以下命令: winutils ls \tmp\hive winutils chmod -R 777 \tmp\hive 但是当我运行我的测试时,我得到了下面的错误 Running com.dnb.trade.ui.ingest.spark.utils.Experiences

我正在尝试在Windows7 64位中运行spark作业的单元测试。我有

HADOOP_HOME=D:/winutils

winutils path= D:/winutils/bin/winutils.exe
我运行了以下命令:

winutils ls \tmp\hive
winutils chmod -R 777  \tmp\hive
但是当我运行我的测试时,我得到了下面的错误

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)
我已尝试手动更改权限。每次我都会犯同样的错误


请帮忙

我以与您相同的方式设置HADOOP_HOME变量。(在Windows 10上)

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

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

这对我有用

另外,请注意这个异常——我通过运行“sys.exit”从cmd退出spark时得到了相同的异常


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

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

我在spark Jira中发现了一些旧问题,但没有找到任何修复方法。(顺便说一句,其中一个处于关闭状态。)

不幸的是,他们似乎根本不关心windows上的spark

一个糟糕的解决方案是将临时文件夹(在您的案例中是*C:\Users\415387\AppData\Local\Temp*)权限授予所有人

所以会是这样的:

winutils chmod -R 777 C:\Users\415387\AppData\Local\Temp\

但是我强烈建议你不要那样做。

我也面临着类似的问题。我将权限更改为\tmp文件夹而不是\tmp\hive

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


在此之后没有看到任何错误,并且有一个干净的出口

在windows中运行Spark时存在此删除Spark temp问题。您可以按如下方式设置它以隐藏它


Logger.getLogger(“org”).setLevel(Level.FATAL)

问题出在试图删除临时文件但失败的关闭钩子中。虽然您无法解决此问题,但只需将以下两行添加到
%SPARK\u HOME%\conf
中的
log4j.properties
文件中,即可隐藏异常。如果文件不存在,请复制
log4j.properties.template
并重命名它

log4j.logger.org.apache.spark.util.ShutdownHookManager=OFF
log4j.logger.org.apache.spark.SparkEnv=ERROR

看不见就是想不起来。

我创建了一个目录
d:\spark\temp

我完全控制这个目录上的每个人

我跑

然后我将我的jar提交给spark,并在浏览器上查看目录

创建/删除了许多文件和目录,但其中一个文件和目录存在例外

我认为这不是一个正确的问题

java.io.IOException:未能删除:D:\data\temp\spark\spark-9cc5a3ad-7d79-4317-8990-f278e63cb40b\userFiles-4c442ed7-83ba-4724-a533-5f171d830913\simple-app_2.11-1.0.jar


这是在尝试删除提交的包时发生的。它可能尚未由所有相关进程发布。

Windows 10上的我的Hadoop环境:

HADOOP_HOME=C:\hadoop
Spark和Scala版本:

Spark-2.3.1 and Scala-2.11.8
下面是我的spark submit命令:

spark-submit --class SparkScalaTest --master local[*] D:\spark-projects\SparkScalaTest\target\scala-2.11\sparkscalatest_2.11-0.1.jar D:\HDFS\output
基于Windows 10上的Hadoop环境,我在Scala主类中定义了以下系统属性:

System.setProperty("hadoop.home.dir", "C:\\hadoop\\")
System.setProperty("hadoop.tmp.dir", "C:\\hadoop\\tmp")
结果:我得到了相同的错误,但我的输出是在spark submit中传递的输出路径D:\HDFS\output中生成的


希望这有助于绕过此错误并获得Spark在Windows上本地运行的预期结果。

我有一个解决方法,而不是让Spark的
ShutdownHookManager
删除临时目录,您可以发出Windows命令来执行此操作

步骤:

  • 使用
    spark defaults.conf
    文件中的
    spark.local.dir
    更改临时目录

  • log4j.properties
    文件中设置
    log4j.logger.org.apache.spark.util.ShutdownHookManager=OFF

  • sparkshell
    内部调用
    sparkshell.cmd
    文件。因此,添加
    rmdir/q/s“您的\u dir\tmp”


  • 这应该管用

    在遵循上述建议后,我做了以下更改-

    更新spark-defaults.conf或创建spark-defaults.conf.template的副本
    &将其重命名为spark-defaults.conf

    添加下面的行- spark.local.dir=E:\spark2.4.6\tempDir 通过上一行,我们正在设置Spark要使用的临时文件夹

    类似地,在spark设置中更新log4j.properties,如上所述,使用以下行-

    log4j.logger.org.apache.spark.util.ShutdownHookManager=OFF log4j.logger.org.apache.spark.SparkEnv=错误

    现在,在退出期间将不使用ShutdownHookManager,从而导致控制台上出现这些错误行

    现在如何清理临时文件夹呢?
    因此,在bin/spark-shell.cmd文件中添加以下行-

    rmdir/q/s“E:/spark2.4.6/tempDir”
    del C:\Users\nitin\AppData\Local\Temp\jansi**

    通过以上更新,我还可以看到清理退出和临时文件夹清理。

    对于python:

    创建一个空目录tmp\hive

    import os
    os.system(command=f"path to \\bin\\winutils.exe chmod -R 777 path to \\tmp\\hive")
    

    我更改了临时文件夹的权限以查看它,这就是问题所在,但它不起作用。此外,我还尝试使用--conf spark.local.dir指定一个不同的工作目录,该目录我知道我有权限,但也不起作用。所以这绝对不是权限问题。如果有人有解决方案,请共享。您还可以通过设置“java.io.tmpdir”java系统属性来更改此临时目录的位置,这样您就可以将其放在您可以轻松更改权限的其他地方。什么是“D:>”?这只是Windows cmd上的一个提示,当前位于D:drive中。我知道了,我把我的winutils放在那里了。谢谢我的是“C:\>“忽略这一点的问题是,未删除的临时文件会堆积起来并占用磁盘空间,大多数人不太可能在这个目录中找到它们。正确的“好友-外出”视图是不可能的。这是非常正确的。@UncleLongHair每隔一段时间,通过转到cmd并键入%temp%a来删除临时文件夹一直是一个好习惯删除一切,所以我相信这很好。
    import os
    os.system(command=f"path to \\bin\\winutils.exe chmod -R 777 path to \\tmp\\hive")