Java 配置单元查询在插入覆盖时失败

Java 配置单元查询在插入覆盖时失败,java,jdbc,hive,Java,Jdbc,Hive,我正在使用jdbc连接在配置单元(V0.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

我正在使用jdbc连接在配置单元(V0.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 OVERRIDE子句的查询时失败。例如:

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客户端查询时使用如下方法:

String sql = "INSERT OVERWRITE DIRECTORY '/user/jim/dir' select * from " + tableName;

stmt.execute(sql);
注:

  • 确保/user/jim/dir是可写的,如果不是,则将其作为

    hadoop fs-chmoda+rwx/user/jim/dir

  • 使用stmt.execute(sql)而不是stmt.executeQuery(sql)


  • PS:问题仍然存在,请告诉我,我将分享完整的代码。

    Ya它应该可以工作。我已经尝试了chmod,但失败了。似乎我还面临着其他一些与配置相关的问题。无论如何,谢谢。