我正在使用jdbc连接在hive(v 0.11)上运行查询。代码如下:
Connection con = DriverManager.getConnection(
"jdbc:hive://192.168.1.10:10000", "", "");
Statement stmt = con.createStatement();
stmt.execute("some query");
它成功运行以下查询:
CREATE TABLE testdb.test(name string,id int);
SELECT * FROM testdb.test;
但是,在执行任何包含INSERT OVERWRITE子句的查询时将失败。例如:
INSERT OVERWRITE DIRECTORY '/user/jim/dir' SELECT * FROM space.test;
INSERT OVERWRITE TABLE testdb.t2 select name,id from testdb.test;
具有以下跟踪:
java.sql.SQLException: Query returned non-zero code: 1, cause: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.MapRedTask
at org.apache.hadoop.hive.jdbc.HivePreparedStatement.executeImmediate(HivePreparedStatement.java:178)
at org.apache.hadoop.hive.jdbc.HivePreparedStatement.executeQuery(HivePreparedStatement.java:141)
at my.pack.test.HiveTest.main(HiveTest.java:31)
Caused by: HiveServerException(message:Query returned non-zero code: 1, cause: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.MapRedTask, errorCode:1, SQLState:08S01)
at org.apache.hadoop.hive.service.ThriftHive$execute_result$execute_resultStandardScheme.read(ThriftHive.java:1494)
at org.apache.hadoop.hive.service.ThriftHive$execute_result$execute_resultStandardScheme.read(ThriftHive.java:1480)
at org.apache.hadoop.hive.service.ThriftHive$execute_result.read(ThriftHive.java:1430)
at org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:78)
at org.apache.hadoop.hive.service.ThriftHive$Client.recv_execute(ThriftHive.java:116)
at org.apache.hadoop.hive.service.ThriftHive$Client.execute(ThriftHive.java:103)
at org.apache.hadoop.hive.jdbc.HivePreparedStatement.executeImmediate(HivePreparedStatement.java:176)
... 2 more
主要问题是可以从配置单元控制台成功执行这些查询。
如果我在这里缺少任何东西,请帮助任何人。还是有一些更好的方法可以使用jdbc实现呢?
注意:以上块中的每个查询均不使用分号单独执行。我只是为了便于阅读而放置它们。
嗨,我试过了您的示例案例,它可以正常工作,在执行JDBC Client查询时可以像这样使用:
String sql = "INSERT OVERWRITE DIRECTORY '/user/jim/dir' select * from " + tableName;
stmt.execute(sql);
笔记 :
确保/ user / jim / dir是可写的,如果不能,则将其写为
hadoop fs -chmod a + rwx / user / jim / dir
使用stmt.execute(sql)而不是stmt.executeQuery(sql);
PS:问题仍然存在,请告诉我,将共享完整的代码。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句