0

我在 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 错误?

谢谢!

4

0 回答 0