我在Windows 7上运行Spark。当我使用Hive时,我看到以下错误
The root scratch dir: /tmp/hive on HDFS should be writable. Current permissions are: rw-rw-rw-
权限设置如下
C:\tmp>ls -la
total 20
drwxr-xr-x 1 ADMIN Administ 0 Dec 10 13:06 .
drwxr-xr-x 1 ADMIN Administ 28672 Dec 10 09:53 ..
drwxr-xr-x 2 ADMIN Administ 0 Dec 10 12:22 hive
我设置了#34;完全控制"对于来自Windows-> properties-> security-> Advanced。
的所有用户但我仍然看到同样的错误。有什么帮助吗? 我查了一堆链接,有人说这是Spark 1.5上的一个错误。这是真的吗?
由于 Aarthi
答案 0 :(得分:69)
首先,确保为您的操作系统使用正确的Winutils。然后下一步是权限 在Windows上,您需要在cmd上运行以下命令:
D:\winutils\bin\winutils.exe chmod 777 D:\tmp\hive
希望你已经下载了winutils并设置了HADOOP_HOME。
答案 1 :(得分:24)
首先检查您的计算机域。试试
c:\work\hadoop-2.2\bin\winutils.exe ls c:/tmp/hive
如果此命令显示访问被拒绝或 FindFileOwnerAndPermission错误(1789):此工作站与主域之间的信任关系失败。
这意味着您的计算机域控制器无法访问,可能的原因可能是您与系统域控制器不在同一个VPN上。连接到VPN并重试。
现在尝试Viktor或Nishu提供的解决方案。
答案 2 :(得分:11)
下一个解决方案适用于我:
C:\temp\hadoop\bin\winutils.exe chmod 777 \tmp\hive
\tmp\hive
不是本地目录
答案 3 :(得分:10)
您需要在HDFS上设置此目录的权限,而不是本地文件系统。 /tmp
并不意味着C:\tmp
,除非您将core-site.xml中的fs.defaultFs
设置为file://c:/
,这可能是一个坏主意。
使用
进行检查hdfs dfs -ls /tmp
使用
设置hdfs dfs -chmod 777 /tmp/hive
答案 4 :(得分:8)
在Windows上运行的VM上启动spark-shell时出错: 错误消息:HDFS上的root scratch dir:/ tmp / hive应该是可写的。许可被拒绝
解决方案: / tmp / hive是临时目录。此处仅保留临时文件 地点。即使我们删除此目录也没问题,将在何时创建 需要具有适当的权限。
步骤1)在hdfs中,删除/ tmp / hive目录==> " hdfs dfs -rm -r / tmp / hive"
2)在OS级别,删除dir / tmp / hive ==> rm -rf / tmp / hive
在此之后,启动了火花壳,它运行良好..
答案 5 :(得分:2)
主要原因是你在错误的目录中启动了火花。请在D:// tmp / hive中创建文件夹(授予完全权限)并在D:驱动器中启动火花 d产品:>火花壳
现在它会起作用.. :)
答案 6 :(得分:2)
这是一个简单的四步过程:
对于Spark 2.0 +:
将此添加到您的代码中(在初始化SparkSession之前):
if(getOS()=="windows"){ System.setProperty("hadoop.home.dir", "C:/Users//winutils-master/hadoop-2.7.1"); }
将其添加到您的spark-session (您可以将其更改为C:/Temp
而不是桌面)。
.config("hive.exec.scratchdir","C:/Users//Desktop/tmphive")
打开cmd.exe并运行:
"path\to\hadoop-2.7.1\bin\winutils.exe" chmod 777 C:\Users\\Desktop\tmphive
答案 7 :(得分:1)
问题已在spark版本2。2。2(2016年11月14日)中解决。使用此版本。 版本2.1.0 2016年12月28日发布具有相同的问题。
答案 8 :(得分:1)
我也遇到过这个问题。此问题与网络有关。我使用特定域在Windows 7上安装了spark。
可以检查域名
开始 - >电脑 - >右键单击 - >属性 - >电脑名称, 域和工作组设置 - >点击更改 - >电脑名称 (标签) - >点击更改 - >域名。
当我运行spark-shell命令时,它运行正常,没有任何错误。
在其他网络中,我收到了写入权限错误。 要避免此错误,请在上面路径中指定的域上运行spark命令。
答案 9 :(得分:1)
Spark Jira中有一个错误。几天前就解决了这个问题。这是链接。
https://issues.apache.org/jira/browse/SPARK-10528
评论有所有选项,但没有保证的解决方案。
答案 10 :(得分:0)
请尝试给文件夹/ tmp / hive 777权限,因为我认为spark是以匿名用户身份运行(将来自其他用户类别),此权限应该是递归的。 我在hive的1.5.1版本的spark中遇到了同样的问题,并且它通过在linux上使用以下命令给予777权限而起作用
chmod -r 777 /tmp/hive
答案 11 :(得分:0)
使用最新版本的“winutils.exe”并尝试。 https://github.com/steveloughran/winutils/blob/master/hadoop-2.7.1/bin/winutils.exe
答案 12 :(得分:0)
使用正确版本的winutils.exe为我做了诀窍。 winutils应该来自Spark之前为之构建的Hadoop版本。
将HADOOP_HOME环境变量设置为winutils.exe的bin位置。我已经存储了winutils.exe以及C:\ Spark \ bin文件。现在我的SPARK_HOME和HADOOP_HOME指向同一位置C:\Spark
。
现在已将winultils添加到路径中,使用winutils.exe chmod 777 C:\tmp\hive
答案 13 :(得分:0)
在Windows 7上,我收到相同的错误“ HDFS上的根临时目录:/ tmp / hive应该是可写的。当前权限是:rw-rw-rw-”。这是我为解决此问题所做的工作:
注意:在Winutils的早期版本中,chmod命令也设置了所需的权限而没有错误,但是spark仍然抱怨/ tmp / hive文件夹不可写。
答案 14 :(得分:0)
您不必自己修改/ tmp / hive目录的权限(如建议的某些答案)。 winutils可以为您做到这一点。从https://github.com/steveloughran/winutils下载适当版本的winutils,并将其移至spark的bin目录(例如C:\ opt \ spark \ spark-2.2.0-bin-hadoop2.6 \ bin)。这样就可以解决。
答案 15 :(得分:0)
我正在从IDEA运行火花测试,而我的问题是错误的winutils.exe
版本。我认为您需要将其与Hadoop版本匹配。您可以找到winutils.exe
here
答案 16 :(得分:-1)
我刚刚在Win7环境中解决了这个问题。我用错误的IP修改了DNS设置。这使我的桌面无法连接到域控制器。设置正确的DNS IP后,重新启动计算机。问题不见了。我可以使用winutils来创建目录。