在运行时更改Hadoop用户名不起作用

时间:2017-11-21 12:26:48

标签: java hadoop hdfs

我写了一个小的Hadoop客户端Java应用程序,它列出了HDFS中的所有文件(不安全)和Hive中的所有表,以及更多的东西。但是,我需要在运行时更改Hadoop用户名。

通过System.setProperty("HADOOP_USER_NAME", "testuser");设置名称可以在我第一次使用此用户名时正常工作。但是,当我想将用户名更改为例如System.setProperty("HADOOP_USER_NAME", "hdfs");我收到异常(在将hadoop用户名设置为hdfs后如上所示):

org.apache.hadoop.security.AccessControlException: Permission denied: user=testuser, access=READ_EXECUTE, inode="/app-logs/ambari-qa":ambari-qa:hadoop:drwxrwx---

这可能是什么问题?为什么我不能随时通过HADOOP_USER_NAME属性更改用户名?

修改

我可以在运行时使用UserGroupInformation.setLoginUser(UserGroupInformation.createRemoteUser(username));来更改用户,还是有一些限制?

1 个答案:

答案 0 :(得分:0)

因为您使用JDBC连接连接到HDFS或Hive。 您必须关闭现有连接,才能再从同一个应用程序再连接到HDFS / Hive服务。