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

时间:2015-12-10 07:46:18

标签: windows hdfs

我在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

17 个答案:

答案 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)

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

  • 首先,我定义了HADOOP_HOME。它详细描述了here
  • 接下来,我确实喜欢Nishu Tayal,但有一点不同: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 +:

  1. 下载Hadoop for Windows / Winutils
  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//Desktop/tmphive")
    
  4. 打开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)

答案 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

为hive文件夹授予权限

答案 13 :(得分:0)

在Windows 7上,我收到相同的错误“ HDFS上的根临时目录:/ tmp / hive应该是可写的。当前权限是:rw-rw-rw-”。这是我为解决此问题所做的工作:

  1. 我已经在C:\ Program Files(x86)上安装了Spark,它正在C下寻找/ tmp / hive,即C:\ tmp \ hive
  2. 我从https://github.com/steveloughran/winutils下载了WinUtils.exe。我选择的版本与安装Spark时为hadoop软件包选择的版本相同。即hadoop-2.7.1 (您可以在bin文件夹下找到https://github.com/steveloughran/winutils/tree/master/hadoop-2.7.1/bin
  3. 现在使用以下命令使c:\ tmp \ hive文件夹可写 winutils.exe chmod 777 \ tmp \ hive

注意:在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来创建目录。