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

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

我无法通过jdbc更新配置单元表。我可以选择,但不能更新。
连接到配置单元数据库:

  1. Connection connection =
  2. DriverManager.getConnection("jdbc:hive2://localhost:10000/db", "", "");

我的问题:

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

堆栈跟踪:

  1. java.sql.SQLException: Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.MoveTask
  2. at org.apache.hive.jdbc.HiveStatement.execute(HiveStatement.java:275)
  3. at org.apache.hive.jdbc.HiveStatement.executeQuery(HiveStatement.java:355)
  4. at com.spnotes.hive.App.main(App.java:63)

同样,我可以通过jdbc选择但不能更新。但是,我只能通过配置单元外壳更新表。我认为这是一个用户权限问题。我还见过其他问题,hdfs目录在写入之前需要被授予权限。
我必须用hdfs用户调用我的hive shell,如下所示:

  1. sudo -u hdfs hive

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

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

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

46scxncf

46scxncf1#

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

相关问题