2016-07-09 3 views
0

Ich versuche, einzelne Tuple-Einfügungen auf Hive Server 2 mit JDBC zum Testen durchzuführen. Obwohl ich in der Lage bin, solche Operationen ohne Problem durch Beeline-Client während der Verbindung zu jdbc:hive2:// auf dem Server, kann ich nicht replizieren dasselbe mit JDBC.Ich kann keine Abfragen auf Hive-Server 2 über JDBC ausführen

Der betreffende Code-Schnipsel in einer Datei TestDAO.java wie folgt:

ps = con.prepareStatement("insert into table test_table select ?, ? from dummy"); 
ps.setInt(1, test.getRoll()); 
ps.setString(2, test.getName()); 

System.out.println("Name = " + test.getName() + ", Roll = " + test.getRoll()); 

returnValue = ps.executeUpdate(); // Line 22 

Während der Ausführung des Codes, wird eine Ausnahme aufgetreten:

Starting... 
jdbc:hive2://7.224.118.49:10000/acaddwh 
Connection obtained! 
Name = Inserted User, Roll = 120 
java.sql.SQLException: Error while processing statement: FAILED: Execution Error, return code -101 from org.apache.hadoop.hive.ql.exec.MoveTask. org.apache.hadoop.hdfs.client.HdfsAdmin.getEncryptionZoneForPath(Lorg/apache/hadoop/fs/Path;)Lorg/apache/hadoop/hdfs/protocol/EncryptionZone; 
    at org.apache.hive.jdbc.HiveStatement.execute(HiveStatement.java:277) 
    at org.apache.hive.jdbc.HiveStatement.executeUpdate(HiveStatement.java:390) 
    at org.apache.hive.jdbc.HivePreparedStatement.executeUpdate(HivePreparedStatement.java:117) 
    at in.ac.iitkgp.acaddwh.dao.TestDAO.saveDim(TestDAO.java:22) 
    at in.ac.iitkgp.acaddwh.service.etl.TestHiveLoad.load(TestHiveLoad.java:34) 
    at in.ac.iitkgp.acaddwh.service.etl.TestHiveLoad.main(TestHiveLoad.java:71) 
in.ac.iitkgp.acaddwh.exception.LoadException 
    at in.ac.iitkgp.acaddwh.service.etl.TestHiveLoad.load(TestHiveLoad.java:44) 
    at in.ac.iitkgp.acaddwh.service.etl.TestHiveLoad.main(TestHiveLoad.java:71) 
Load,1,120,Data is invalid 

I "rwx" gegeben haben Berechtigungen für alle Tabellen in der Datenbank mit:

hadoop fs -chmod -R 777 /user/hive/warehouse/acaddwh.db/test_table 

Das änderte jedoch nichts. Ich füge weitere Informationen hinzu, die für die Frage relevant sein könnten.


Version Info: Hive 0.12.0-cdh5.1.0

begann ich, den Server durch die Ausführung folgende:

./hive --service hiveserver2 10000 & 

Dies ist die komplette Liste der Abhängigkeiten in Meine pom.xml-Datei:

<dependency> 
     <groupId>jdk.tools</groupId> 
     <artifactId>jdk.tools</artifactId> 
     <version>1.6</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>javax.servlet-api</artifactId> 
     <version>3.0.1</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.tomcat</groupId> 
     <artifactId>tomcat-coyote</artifactId> 
     <version>7.0.4</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.hive</groupId> 
     <artifactId>hive-jdbc</artifactId> 
     <version>0.13.1-cdh5.3.1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.thrift</groupId> 
     <artifactId>libthrift</artifactId> 
     <version>0.9.0</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.thrift</groupId> 
     <artifactId>libfb303</artifactId> 
     <version>0.9.0</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.hadoop</groupId> 
     <artifactId>hadoop-core</artifactId> 
     <version>2.5.0-mr1-cdh5.3.1</version> 
    </dependency> 

    <dependency> 
     <groupId>org.apache.hadoop</groupId> 
     <artifactId>hadoop-common</artifactId> 
     <version>2.5.0-cdh5.3.1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.hive</groupId> 
     <artifactId>hive-exec</artifactId> 
     <version>0.13.1-cdh5.3.1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.hadoop</groupId> 
     <artifactId>hadoop-hdfs</artifactId> 
     <version>2.5.0-cdh5.3.1</version> 
    </dependency> 

Was könnte das Problem sein und wie kann es gelöst werden?

Antwort

0

GELöST

Nach einer Reihe von Versuch-und-Fehler, ich war in der Lage INSERT zu verbinden und ausführen, LOAD DATA, SELECT-Abfragen erfolgreich durch Starten des hive Servers meiner Java-Anwendung verwenden:

hiveserver2 

statt

./hive --service hiveserver2 10000 & 

Zusätzlich ohne Unterbrechung auf Logou den Server laufen zu lassen t, ich bin derzeit mit der folgenden, den Server zu starten:

nohup hiveserver2 & 
0

hadoop/HDFS unterstützt keine Aktualisierung.

+0

Nur um zu überprüfen, änderte ich ** ps.executeUpdate(); ** bis ** ps.execute(); **, und es immer noch hat nicht funktioniert. Ich versuche, eine Einfügung einer neuen Zeile durchzuführen, und dieselbe Abfrage wird ausgeführt, während Beeline-Client oder eingebetteten Hive-Client verwendet; nur nicht durch meinen Java-Code. Darüber hinaus funktionieren SELECT-Abfragen auch nicht über JDBC. –

Verwandte Themen