gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 21:34:31 24 4
gpt4 key购买 nike

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

连接到 hive 数据库:

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 选择但不能更新。但是,我只能通过 hive shell 更新我的表。我相信这是一个用户权限问题。我已经看到其他问题,其中 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 不同。也许可以将“用户名”与更新配置单元表的权限联系起来?

欢迎任何帮助。谢谢!

最佳答案

您正试图在 executeQuery() 中传递更新语句
出于安全原因,使用此方法时,任何更新语句都会失败。改为executeUpdate()
另外,我建议不要使用这样的查询,而是使用 准备好的报表 ,因为通过使用参数,您可以减少 SQL 注入(inject)的脆弱性

关于hadoop - 无法通过 JDBC 更新配置单元表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33266280/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com