HDFS上的root scratch dir:/ tmp/hive应该是可写的.当前权限是:rw-rw-rw-(在Windows上)

use*_*205 43 windows hdfs

我在Windows 7上运行Spark.当我使用Hive时,我看到以下错误

The root scratch dir: /tmp/hive on HDFS should be writable. Current permissions are: rw-rw-rw- 
Run Code Online (Sandbox Code Playgroud)

权限设置如下

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
Run Code Online (Sandbox Code Playgroud)

我已经从Windows-> properties-> security-> Advanced为所有用户设置了"完全控制".

但我仍然看到同样的错误.有什么帮助吗?我查了一堆链接,有人说这是Spark 1.5上的一个错误.这是真的?

谢谢Aarthi

Nis*_*yal 74

首先,确保为您的操作系统使用正确的Winutils.然后下一步是权限.
在Windows上,您需要在cmd上运行以下命令:

D:\winutils\bin\winutils.exe chmod 777 D:\tmp\hive
Run Code Online (Sandbox Code Playgroud)

希望你已经下载了winutils已经设置了HADOOP_HOME.

  • @ user1384205:如果您认为,它帮助了您,您能否接受答案,以便帮助其他人使用 (5认同)
  • 这解决了这个问题.最初,我有错误的winutils.我正在使用Windows 10,64位和winutils.exe在这个位置[https://osdn.net/projects/win-hadoop/downloads/62852/hadoop-winutils-2.6.0.zip/]适合我 (4认同)
  • 可以在https://codeload.github.com/gvreddy1210/64bit/zip/master上找到winutils的64位版本 (2认同)

小智 26

首先要检查您的计算机域.尝试

c:\work\hadoop-2.2\bin\winutils.exe ls c:/tmp/hive
Run Code Online (Sandbox Code Playgroud)

如果此命令显示拒绝访问FindFileOwnerAndPermission错误(1789):此工作站与主域之间的信任关系失败.

这意味着您的计算机域控制器无法访问,可能的原因可能是您与系统域控制器不在同一个VPN上.连接到VPN并重试.

现在尝试Viktor或Nishu提供的解决方案.

  • 这对我有用,我必须连接到一个VPN以获得我的域控制器网络.等待一段时间,然后运行chmod 777命令. (3认同)

小智 11

下一个解决方案适用于Windows:

  • 首先,我定义了HADOOP_HOME.它在这里详细描述
  • 接下来,我确实喜欢Nishu Tayal,但有一点不同:C:\temp\hadoop\bin\winutils.exe chmod 777 \tmp\hive

\tmp\hive 不是本地目录


cri*_*007 10

您需要在HDFS上设置此目录的权限,而不是本地文件系统./tmp并不意味着C:\tmp除非你fs.defaultFs在core-site.xml中设置file://c:/,这可能是一个坏主意.

检查一下

hdfs dfs -ls /tmp 
Run Code Online (Sandbox Code Playgroud)

使用它设置它

hdfs dfs -chmod 777 /tmp/hive
Run Code Online (Sandbox Code Playgroud)


小智 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

在此之后,启动了火花壳,它工作得很好..


Abh*_*bey 6

这是一个简单的 4 步过程:

对于 Spark 2.0+:

  1. 下载适用于 Windows / Winutils 的 Hadoop
  2. 将此添加到您的代码中(SparkSession 初始化之前):

    if(getOS()=="windows"){
        System.setProperty("hadoop.home.dir", "C:/Users//winutils-master/hadoop-2.7.1"); 
    }   
    
  3. 将此添加到您的 spark-session (您可以将其更改为C:/Temp而不是桌面)

    .config("hive.exec.scratchdir","C:/Users//桌面/tmphive")
    
  4. 打开 cmd.exe 并运行:

    "path\to\hadoop-2.7.1\bin\winutils.exe" chmod 777 C:\Users\\Desktop\tmphive
    


Ree*_*yay 1

请尝试向文件夹 /tmp/hive 授予 777 权限,因为我认为 Spark 作为匿名用户运行(将出现在其他用户类别中),并且此权限应该是递归的。我在 1.5.1 版本的 Spark for hive 中遇到了同样的问题,它通过在 Linux 上使用以下命令授予 777 权限来工作

chmod -r 777 /tmp/hive
Run Code Online (Sandbox Code Playgroud)

  • 谢谢。我试过了。没用..你是在 Windows 上这样做的吗? (3认同)
  • 问题是在Windows环境而不是unix环境下出现这个问题。即使如此,chmod 也无法在根级别 /tmp 下自行运行。这是 unix 的正确命令, sudo chmod -R 777 /tmp/hive (3认同)