HDFS 上的根暂存目录:/tmp/hive 应该是可写的。当前权限为:rw-rw-rw-(在 Windows 上)

Posted

技术标签:

【中文标题】HDFS 上的根暂存目录:/tmp/hive 应该是可写的。当前权限为:rw-rw-rw-(在 Windows 上)【英文标题】:The root scratch dir: /tmp/hive on HDFS should be writable. Current permissions are: rw-rw-rw- (on Windows) 【发布时间】:2015-12-10 07:46:17 【问题描述】:

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

我已从 Windows->properties->security->Advanced 为所有用户设置“完全控制”。

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

谢谢 阿尔西

【问题讨论】:

【参考方案1】:

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

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

希望你有downloaded winutils already and set the HADOOP_HOME variable。

【讨论】:

@user1384205 : 如果你觉得,它对你有帮助,你能不能接受答案,这样它会帮助别人使用 使用 64 位或 32 位版本的 winutils 很重要。我反复运行它,看起来权限设置正确(通过winutils ls),但只有当我替换 winutils.exe 时它才起作用。 这解决了这个问题。最初,我有错误的winutils。我在这个位置使用 Windows 10、64 位和 winutils.exe [osdn.net/projects/win-hadoop/downloads/62852/… 为我工作 @ParthaMishra 在您提供的链接上找不到文件 64位版本的winutils可以在codeload.github.com/gvreddy1210/64bit/zip/master找到【参考方案2】:

首先检查您的计算机域。试试

c:\work\hadoop-2.2\bin\winutils.exe ls c:/tmp/hive

如果此命令显示 access deniedFindFileOwnerAndPermission 错误 (1789):此工作站与主域之间的信任关系失败

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

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

【讨论】:

这对我有用,我必须连接到一个 *** 才能进入我的域控制器网络。等待一段时间,然后运行 ​​chmod 777 命令。 我一遍又一遍地执行 %HADOOP_HOME%\bin\winutils.exe chmod 777 c:\tmp\hive,并且对为什么权限设置不正确感到困惑,这是一个绝对的救星。 此错误 FindFileOwnerAndPermission 可能是由于如果您在给定的 AD 域上连接,则无法访问域控制器。就我而言,我已连接到 ***,因此可以访问域控制器并为我工作。谢谢@Aaditya @Aaditya - 绝对的救生员。想知道您是如何得到这个答案的?【参考方案3】:

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

使用检查它

hdfs dfs -ls /tmp 

使用设置它

hdfs dfs -chmod 777 /tmp/hive

【讨论】:

在 Linux 中也为我工作过。别忘了先换成hdfs用户【参考方案4】:

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

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

\tmp\hive 不是本地目录

【讨论】:

谢谢维克多。但是当我尝试您的解决方案时出现以下错误。 C:\Programs\winutil\bin>winutils.exe chmod 777 \tmp\hive ChangeFileModeByMask 错误(5):访问被拒绝。 您需要以管理员身份运行命令提示符或 cygwin 才能运行命令【参考方案5】:

在 Windows 上运行的 VM 上启动 spark-shell 时出错: 错误消息:根暂存目录:HDFS 上的 /tmp/hive 应该是可写的。权限被拒绝

解决方案: /tmp/hive 是临时目录。这里只保存临时文件 地点。即使我们删除这个目录也没问题,会在创建的时候 需要适当的权限。

步骤 1) 在 hdfs 中,删除 /tmp/hive 目录 ==> "hdfs dfs -rm -r /tmp/hive"

2) 在操作系统级别,删除目录 /tmp/hive ==> rm -rf /tmp/hive

在此之后,启动 spark-shell,它工作正常..

【讨论】:

这个回复可能会晚 4 个月,但这对我有帮助。【参考方案6】:

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

对于 Spark 2.0+:

    下载适用于 Windows/Winutils 的 Hadoop

    将此添加到您的代码中( 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

【讨论】:

这对我有帮助。我只是准备在 Intellij 上运行一些测试用例【参考方案7】:

主要原因是您在错误的目录中启动了 spark。请在 D://tmp/hive 中创建文件夹(授予完全权限)并在 D: 驱动器中启动你的 spark D:> 火花壳

现在它可以工作了.. :)

【讨论】:

【参考方案8】:

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

chmod -r 777 /tmp/hive

【讨论】:

谢谢。我试过了。没用.. 你是在 Windows 上这样做的吗? 问题是关于这个问题在 Windows 环境而不是 unix 上。即便如此,chmod 也不会在根级别 /tmp 下单独工作。这是 unix 的正确命令,sudo chmod -R 777 /tmp/hive【参考方案9】:

Spark Jira 中存在同样的错误。这已经在几天前解决了。这是链接。

https://issues.apache.org/jira/browse/SPARK-10528

评论有所有选项,但没有保证解决方案。

【讨论】:

【参考方案10】:

问题已在 spark 版本 2.0.2(2016 年 11 月 14 日)中解决。使用这个版本。 2016 年 12 月 28 日发布的 2.1.0 版存在同样的问题。

【讨论】:

对于 Windows 机器上的我来说,这是将我推向正确方向的答案。我也遇到了另一个错误,但可以在以下post 的第二个答案的帮助下解决此错误【参考方案11】:

使用最新版本的“winutils.exe”并尝试。 https://github.com/steveloughran/winutils/blob/master/hadoop-2.7.1/bin/winutils.exe

【讨论】:

【参考方案12】:

我也遇到过这个问题。此问题与网络有关。我使用特定域在 Windows 7 上安装了 spark。

域名可以查

开始->计算机->右键->属性->计算机名, 域和工作组设置 -> 点击更改 -> 计算机名 (选项卡)-> 单击更改-> 域名。

当我运行 spark-shell 命令时,它工作正常,没有任何错误。

在其他网络中,我收到写权限错误。 为避免此错误,请在上述路径中指定的域上运行 spark 命令。

【讨论】:

您自己说过它适用于不同的用户/域。这意味着这是一个权限问题而不是网络。感谢您的诚实尝试【参考方案13】:

我在 Windows 7 上遇到了同样的错误“HDFS 上的根暂存目录:/tmp/hive 应该是可写的。当前权限是:rw-rw-rw-”。这是我为解决此问题所做的操作:

    我在 C:\Program Files (x86) 上安装了 Spark...,它正在 C 下寻找 /tmp/hive:即 C:\tmp\hive 我从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) 现在使用以下命令使 c:\tmp\hive 文件夹可写 winutils.exe chmod 777 \tmp\hive

注意:以前版本的 winutils 也是,chmod 命令设置所需权限没有错误,但 spark 仍然抱怨 /tmp/hive 文件夹不可写。

【讨论】:

【参考方案14】:

使用正确版本的 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 文件夹的权限

【讨论】:

【参考方案15】:

您不必自己修复 /tmp/hive 目录的权限(如建议的一些答案)。 winutils 可以为您做到这一点。从https://github.com/steveloughran/winutils 下载适当版本的 winutils 并将其移动到 spark 的 bin 目录(例如 C:\opt\spark\spark-2.2.0-bin-hadoop2.6\bin)。这样就解决了。

【讨论】:

【参考方案16】:

我正在从 IDEA 运行火花测试,在我的情况下,问题是错误的 winutils.exe 版本。我认为您需要将其与您的 Hadoop 版本相匹配。你可以找到winutils.exehere

【讨论】:

以上是关于HDFS 上的根暂存目录:/tmp/hive 应该是可写的。当前权限为:rw-rw-rw-(在 Windows 上)的主要内容,如果未能解决你的问题,请参考以下文章

HiveServer2 在 hdfs /tmp/hive/hive 中生成很多目录

hive 报错/tmp/hive on HDFS should be writable. Current permissions are: rwx--x--x

Apache spark:上传到作业暂存目录的文件的权限被拒绝

spark-local 模式 提示 /tmp/hive hdfs 权限不够的问题

hive client 登录报权限不足问题/tmp/hive on HDFS should be writable. Current permissions are: rwx------

hive client 登录报权限不足问题/tmp/hive on HDFS should be writable. Current permissions are: rwx------