我在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执行写入查询(创建,插入)?
谢谢!