0

我正在运行 MapR 社区版 Hadoop 集群 (M3)。

不幸的是,HiveServer2 服务崩溃了,根据 中的日志文件/opt/mapr/hive/hive-0.13/logs/mapr/hive.log,暂存目录的权限存在问题:

2015-02-24 21:21:08,187 WARN  [main]: server.HiveServer2 (HiveServer2.java:init(74)) - Failed to create/change scratchdir permissions to 777: Could not create FileClient java.io.IOException: Could not create FileClient

我使用以下命令检查了暂存目录的设置hive -e 'set;' | grep scratch

hive.exec.scratchdir=/user/mapr/tmp/hive/
hive.scratch.dir.permission=700

我注意到它hive.scratch.dir.permission设置为 700 并且错误消息表明它想要将其更改为 777。但是,根据文件系统,/mapr/my.cluster.com/user/mapr/tmp它具有 777 权限并且属于 mapr 用户。

mapr@hadoop01:/mapr/my.cluster.com/user/mapr/tmp$ ls -al
total 2
drwxr-xr-x  3 mapr mapr  1 Feb 22 10:39 .
drwxr-xr-x  5 mapr mapr  3 Feb 24 08:40 ..
drwxrwxrwx 56 mapr mapr 54 Feb 23 10:20 hive

从文件系统权限来看,我希望 mapr 用户可以对这个文件夹做任何事情,所以不理解错误消息。

我很想知道是否有人以前见过这个,如果有,你是怎么解决的?

更新:

我查看了源代码,并注意到警告之前的一些相关注释:

// When impersonation is enabled, we need to have "777" permission on root scratchdir, because
// query specific scratch directories under root scratchdir are created by impersonated user and
// if permissions are not "777" the query fails with permission denied error.

我在 hive-site.xml 中添加了以下属性:

<property>
  <name>hive.scratch.dir.permission</name>
  <value>777</value>
</property>

<property>
  <name>hive.exec.scratchdir</name>
  <value>/tmp/hive/</value>
</property>

...并/tmp/hive/在 HDFS 中创建了具有 777 权限的文件夹:

mapr@hadoop01:~$ hadoop fs -ls -d /tmp/hive
drwxrwxrwx   - mapr mapr          0 2015-02-27 08:38 /tmp/hive

尽管这看起来很有希望,但我仍然在hive.log.

4

1 回答 1

0

更新 /tmp/hive HDFS 目录的权限,将其设置为 777:

  hadoop fs -chmod 777 /tmp/hive

或删除 /tmp/hive ,即使您删除临时文件,也会创建临时文件。

hadoop fs -rm -r /tmp/hive;  
rm -rf /tmp/hive
于 2015-02-27T09:04:00.143 回答