我在 Ubuntu 16.04 上运行 hive 2.1.1、hadoop 2.7.3。
在 hive 终端中执行 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:执行错误,从 org.apache.hadoop.hive.ql.exec.DDLTask 返回代码 1。MetaException(消息:得到异常:org.apache.hadoop.security.AccessControlException 权限被拒绝:user=hive2,access=WRITE,inode="/user/hive/warehouse/test2":server:supergroup:drwxrwxr-x
当我尝试在直线和 Java 中插入查询时,我得到了同样的错误。看来我只能通过JDBC读取而不能写入。
以下是我在beeline 中的登录方式:
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 ] 身份登录?
如何通过 JDBC 执行写查询(创建、插入)而不会出现 Permission denied 错误?
谢谢!