Hive2 JDBC异常:org.apache.hadoop.security.AccessControlException权限被拒绝

时间:2017-02-15 19:20:54

标签: java jdbc hive beeline

我在Ubuntu 16.04上运行hive 2.1.1,hadoop 2.7.3。

在蜂巢终端中进行HQL是完全没问题的。

hive> show databases;
OK
default
Time taken: 0.799 seconds, Fetched: 1 row(s)
hive> show tables;
OK
Time taken: 0.027 seconds
hive> create table test1(id int, name string);
OK
Time taken: 0.928 seconds
hive> show tables;
OK
test1
Time taken: 0.021 seconds, Fetched: 1 row(s)
hive> 

这是我在直线和Java中从JDBC获得的错误:

  

错误:处理语句时出错:FAILED:Execution Error,   从org.apache.hadoop.hive.ql.exec.DDLTask返回代码1。   MetaException(消息:得到例外:   org.apache.hadoop.security.AccessControlException权限被拒绝:   user = hive2,access = WRITE,   索引节点= “/用户/蜂巢/仓库/ TEST2”:服务器:超组:drwxrwxr-X

当我在beeline和Java中尝试插入查询时,我得到了同样的错误。 似乎我只能阅读但不能通过JDBC写作。

以下是我直线登录的方式:

Beeline version 2.1.1 by Apache Hive
beeline> !connect jdbc:hive2://localhost:10000
Connecting to jdbc:hive2://localhost:10000
Enter username for jdbc:hive2://localhost:10000: hive2
Enter password for jdbc:hive2://localhost:10000: ******** 

这是我的Java代码:

try(
    Connection con = DriverManager.getConnection("jdbc:hive2://localhost:10000/default", "hive2", "password");
    Statement stmt = con.createStatement();) {
        ...
    }

我尝试在hive-site.xml中设置hive.exec.stagingdir属性:

 <property>
     <name>hive.exec.stagingdir</name>
     <value>/tmp/hive-staging</value>
 </property>

不幸的是它无法解决问题。

我发现的另一个解决方案是以root用户身份登录。但是,我如何以 root用户而非用户[ hive2 ]登录?

如何在不获得Permission denied错误的情况下通过JDBC执行写入查询(创建,插入)?

谢谢!

0 个答案:

没有答案