无法通过jdbc更新配置单元表

mitkmikd  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(357)

我无法通过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用户调用我的hive shell,如下所示:

sudo -u hdfs hive

我可以通过jdbc传递一个“hfds”用户吗?看来这是不可能的。我就是这么想的例外不会再发生了。
以下是传递用户名和密码的“安全方法”:

Connection con = DriverManager.getConnection("jdbc:hive2:/hiveserver.domain.com:10000/default;user=username;password=password");

但这与传递用户hdfs不同。也许可以将“用户名”与更新配置单元表的权限链接起来?
欢迎任何帮助。谢谢!

46scxncf

46scxncf1#

您正试图在 executeQuery() 出于安全原因,使用此方法时,任何update语句都将失败。把它改成 executeUpdate() 另外,我建议不要使用这样的查询,而是使用prepared语句,因为通过使用参数,可以减少sql注入的风险

相关问题