我正在尝试在Windows 7 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)
我试图手动改变permition ..每次我都得到同样的错误。
请帮忙
答案 0 :(得分:3)
我以与你相同的方式设置了HADOOP_HOME变量。 (在Windows 10上)
设置权限时尝试使用完整路径,即
d产品:> winutils / bin / winutils.exe chmod 777 \ tmp \ hive
这对我有用。
另外,只是关于异常的注释 - 我通过运行“sys.exit”从cmd退出spark时遇到相同的异常。
但是......当我使用“:q”或“:quit”时,我可以干净利落地退出。所以,不确定这里发生了什么,仍然试图找出......
答案 1 :(得分:2)
尝试使用 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\
但我强烈建议您不这样做。
答案 2 :(得分:2)
问题出在ShutdownHook中,它试图删除临时文件但失败了。虽然您无法解决问题,但您可以通过在log4j.properties
中的%SPARK_HOME%\conf
文件中添加以下两行来隐藏例外情况。如果该文件不存在,请复制log4j.properties.template
并重命名。
log4j.logger.org.apache.spark.util.ShutdownHookManager=OFF
log4j.logger.org.apache.spark.SparkEnv=ERROR
看不见了。
答案 3 :(得分:2)
我对此有一种解决方法,您可以发出Windows命令来执行此操作,而不是让spark的ShutdownHookManager
删除临时目录,
步骤:
使用spark.local.dir
文件中的spark-defaults.conf
更改临时目录
在log4j.logger.org.apache.spark.util.ShutdownHookManager=OFF
文件中设置log4j.properties
spark-shell
内部调用spark-shell.cmd
文件。因此,添加rmdir /q /s "your_dir\tmp"
这应该有效!
答案 4 :(得分:1)
我遇到了类似的问题。我将权限更改为\ tmp文件夹而不是\ tmp \ hive
D:> winutils / bin / winutils.exe chmod 777 \ tmp
此后没有看到任何错误,并且有一个干净的退出
答案 5 :(得分:1)
在Windows中运行Spark会删除Spark temp问题。您可以按如下方式设置它以隐藏它。
Logger.getLogger("org").setLevel(Level.FATAL)
答案 6 :(得分:0)
我创建目录Sub StartButton()
For Each ws In ActiveWorkbook.Worksheets
ws.Visible = xlSheetVisible
Next ws
starttime = Timer
Call ExtractTotals("Current", "Prov")
Call ExtractTotals("Previous", "Prov")
Call ExtractTotals("Current", "CCG")
Call ExtractTotals("Previous", "CCG")
Call ExtractWaitTimes("Current", "Prov")
Call ExtractWaitTimes("Previous", "Prov")
Call ExtractWaitTimes("Current", "CCG")
Call ExtractWaitTimes("Previous", "CCG")
'Sheets("Current Year Main").Visible = xlSheetHidden
'Sheets("Previous Year Main").Visible = xlSheetHidden
MsgBox ("finished in " & CStr(Timer - starttime))
End Sub
Sub ExtractTotals(year As String, level As String)
Application.ScreenUpdating = False
Sheets(year & " Year Main").Select
Cells(1, 1).Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.Copy
Sheets(year & " Year " & level & " Totals").Select
Cells(1, 1).Select
ActiveSheet.Paste
i = 2
j = 2
Do Until Len(Sheets(year & " Year Main").Cells(i, 1)) = 0
Sheets(year & " Year Main").Select
If level = "Prov" Then
strlevel = "Provider"
ElseIf level = "CCG" Then
strlevel = "CCG"
End If
If Cells(i, 1) = strlevel And Cells(i, 4) = "Total" Then
Cells(i, 1).Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.Copy
Sheets(year & " Year " & level & " Totals").Select
Cells(j, 1).Select
ActiveSheet.Paste
j = j + 1
i = i + 1
Else
i = i + 1
End If
Loop
Sheets(year & " year " & level & " Totals").Visible = xlSheetHidden
Application.ScreenUpdating = True
End Sub
Sub ExtractWaitTimes(year As String, level As String)
Application.ScreenUpdating = False
Sheets(year & " Year " & level & " W Times").Cells.Clear
Sheets(year & " Year Main").Select
Cells(1, 1).Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.Copy
Sheets(year & " Year " & level & " W Times").Select
Cells(1, 1).Select
ActiveSheet.Paste
i = 2
j = 2
Do Until Len(Sheets(year & " Year Main").Cells(i, 1)) = 0
Sheets(year & " Year Main").Select
If level = "Prov" Then
strlevel = "Provider"
ElseIf level = "CCG" Then
strlevel = "CCG"
End If
If Cells(i, 1) = strlevel And Cells(i, 4) = "Waiting Time" Then
Cells(i, 1).Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.Copy
Sheets(year & " Year " & level & " W Times").Select
Cells(j, 1).Select
ActiveSheet.Paste
j = j + 1
i = i + 1
Else
i = i + 1
End If
Loop
Sheets(year & " year " & level & " W Times").Visible = xlSheetHidden
Application.ScreenUpdating = True
End Sub
我完全控制此目录下的所有人
我跑步
d:\spark\temp
然后我提交我的jar来火花并在浏览器中观看目录。
创建/删除了许多文件和目录,但是其中一个例外。
天哪,这不是正确的问题。
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
这是在尝试删除已提交的软件包时。可能不是所有相关进程都已发布它。
答案 7 :(得分:0)
我在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")
结果:我遇到了同样的错误,但是我的输出在输出路径D:\ HDFS \ spark-submit中传递的输出中生成了
希望这有助于绕过此错误,并获得在Windows本地运行的Spark的预期结果。
答案 8 :(得分:0)
在遵循了上述建议之后,我进行了以下更改-
更新 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”
C:\ Users \ nitin \ AppData \ Local \ Temp \ jansi *。*
通过上述更新,我还可以看到临时文件夹清理也很干净。
答案 9 :(得分:0)
对于python:
创建一个空目录tmp \ hive
import os
os.system(command=f"path to \\bin\\winutils.exe chmod -R 777 path to \\tmp\\hive")