插入覆盖目录拒绝Hive权限

时间:2014-10-23 09:17:14

标签: hadoop permissions hive hdfs

我在运行以下命令时获得了hdfs拒绝失败的权限:

hive -e "insert overwrite directory '/user/hadoop/a/b/c/d/e/f' select * from table_name limit 10;"

错误消息是:

Permission denied: user=hadoop, access=WRITE, inode="/user/hadoop/a/b":hdfs:hive:drwxrwxr-x

但是当我跑:hadoop fs -ls /user/hadoop/a时,我得到:

drwxrwxrwx   - hadoop supergroup          0 2014-04-08 00:56 /user/hadoop/a/b

似乎我已经打开了文件夹b的完全权限,为什么我仍然被拒绝许可?

PS:我在hive配置文件中设置了hive.insert.into.multilevel.dirs=true

3 个答案:

答案 0 :(得分:0)

打开一个新终端,然后尝试:

1。)将用户更改为root:

su

2.)将用户更改为hdfs:

su hdfs

3.)然后运行此命令:

hadoop fs -chown -R hadoop /user/hadoop/a

现在您可以尝试运行的命令。

希望它有所帮助...... !!!

答案 1 :(得分:0)

我遇到了同样的问题,我只是通过使用完全合格的HDFS路径解决了这个问题。像这样。

hive -e "insert overwrite directory 'hdfs://<cluster>/user/hadoop/a/b/c/d/e/f' select * from table_name limit 10;"

请参阅here提及此问题。

但是,我不知道根本原因,但它与权限无关。

答案 2 :(得分:0)

问题实际上与目录权限无关。 Hive应该有权访问路径,我的意思是不在文件级别。

以下是有关如何向用户/组授予对hdfs路径和数据库的访问权限的步骤。每个命令的注释都以#

开头
#Login as hive superuser to perform the below steps
create role <role_name_x>;

#For granting to database
grant all on database to role <role_name_x>;

#For granting to HDFS path
grant all on URI '/hdfs/path' to role <role_name_x>;

#Granting the role to the user you will use to run the hive job
grant role <role_name_x> to group <your_user_name>;

#After you perform the below steps you can validate with the below commands
#grant role should show the URI or database access when you run the grant role check on the role name as below

show grant role <role_name_x>;

#Now to validate if the user has access to the role

show role grant group <your_user_name>;

Here是我通过黑斑羚对类似问题的回答之一。 More on hive permissions

基于其他答案和评论的其他建议,如果您想查看某些hdfs路径或文件hdfs dfs -ls的权限,则不是您的朋友了解有关权限及其旧学校方法的更多信息。您可以使用hdfs dfs -getfacl /hdfs/path为您提供完整的详细信息,结果如下所示。

 hdfs dfs -getfacl /tmp/
# file: /tmp
# owner: hdfs
# group: supergroup
# flags: --t
user::rwx
group::rwx
other::rwx