Hadoop 无法通过JDBC更新配置单元表

Hadoop 无法通过JDBC更新配置单元表,hadoop,jdbc,hive,Hadoop,Jdbc,Hive,我无法通过JDBC更新配置单元表。我可以选择,但不能更新 连接到配置单元数据库: Connection connection = DriverManager.getConnection("jdbc:hive2://localhost:10000/db", "", ""); 我的问题是: ResultSet resultSet = statement.executeQuery("update db.test set name='yo yo' where id=1"); 堆栈跟踪: java

我无法通过JDBC更新配置单元表。我可以选择,但不能更新

连接到配置单元数据库:

Connection connection =  
DriverManager.getConnection("jdbc:hive2://localhost:10000/db", "", "");
我的问题是:

ResultSet resultSet = statement.executeQuery("update db.test set name='yo yo' where id=1");
堆栈跟踪:

java.sql.SQLException: Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.MoveTask
at org.apache.hive.jdbc.HiveStatement.execute(HiveStatement.java:275)
at org.apache.hive.jdbc.HiveStatement.executeQuery(HiveStatement.java:355)
at com.spnotes.hive.App.main(App.java:63)
同样,我可以选择,但不能通过JDBC进行更新。但是,我只能通过配置单元外壳更新表。我认为这是一个用户权限问题。我还见过其他问题,HDFS目录在写入之前需要被授予权限

我必须用我的HDFS用户调用我的配置单元外壳,如下所示:

sudo -u hdfs hive
我可以通过JDBC传递“hfds”用户吗?看来这是不可能的。这就是我认为例外情况不会再发生的方式

以下是传递用户名和密码的“安全方式”:

Connection con = DriverManager.getConnection("jdbc:hive2:/hiveserver.domain.com:10000/default;user=username;password=password");
但这与传递用户hdfs不同。也许可以将“用户名”与更新配置单元表的权限链接起来


欢迎任何帮助。谢谢

您正试图在
executeQuery()中传递update语句。
出于安全原因,使用此方法时,任何update语句都将失败。将其更改为
executeUpdate()


另外,我建议不要使用这样的查询,而是使用准备好的语句,因为通过使用参数,可以降低SQL注入的脆弱性

我尝试过使用executeUpdate和execute方法。两者都提供了与上述相同的堆栈跟踪:失败:执行错误,从org.apache.hadoop.hive.ql.exec.MoveTask返回代码1。我注意到在
DriverManager.getConnection(“jdbc:hive2://localhost:10000/db”),“”,“
中没有传递用户名。如果您将其更改为
DriverManager.getConnection,可能会发生这种情况(“jdbc:hive2://localhost:10000/db”、“hdfs”和“
我已经试过了,但没有成功。我认为用户名需要以某种方式注册……可能是通过Hue?注册的,该用户名需要更改表的权限。仍然卡住了。