2017-10-13 2 views
0

Ich habe eine Anwendung, die auf MySQL zu verbinden, und ich habe Hibernate Config es wie folgt aus:Hibernate Dialekt für Hive/SparkSQL?

<hibernate-configuration> 
    <session-factory> 
     <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 
     <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
     <property name="hibernate.connection.url">jdbc:mysql://somehost:3306/some_db</property> 
     ... 

Nun, wenn ich stattdessen Hive/SparkSQL anschließen wollen, was würden die äquivalente Werte für diese Eigenschaften Sein?

Ich habe einige Ideen auf driver_class und url (vorausgesetzt, wir Port verwenden 10000), aber was soll das dialect sein?

<property name="hibernate.connection.driver_class">org.apache.hive.jdbc.HiveDriver</property> 
<property name="hibernate.connection.url">jdbc:hive2://someHost:10000</property> 

aktualisieren

Ich habe versucht, viele verschiedene Werte, aber keiner von ihnen arbeiten. (Ich habe noch um herauszufinden, was Metastore der Apache Hive-Installation verwendet, so dass hier Ich war gerade dabei Trial-and-error)

org.hibernate.dialect.MySQLDialect 
org.hibernate.dialect.MySQLInnoDBDialect 
org.hibernate.dialect.DerbyDialect 
org.hibernate.dialect.DerbyTenFiveDialect 
org.hibernate.dialect.Oracle10gDialect 
org.hibernate.dialect.H2Dialect 
org.hibernate.dialect.Dialect 

Ich bemerkte, dass in jedem Fall gibt es eine Warnung aus Hibernate dass sagte:

WARN JdbcServicesImpl,main:160 - \ 
    HHH000341: Could not obtain connection metadata : \ 
    Method not supported 

Und dann würde der Code in ein NullPointerException
in org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure() (Linie 207 in 4.2.0.Final) laufen.

Ich habe den Quellcode von Hibernate heruntergeladen und die Logik verfolgt. Die Ausnahme wurde verursacht, weil ein paar Linie vor einer Variable dialect (vom Typ Dialect) bestimmt null aufgrund eine Ausnahme gefangen zu sein, wenn sie versuchen Linie auszuführen 138:

metaReportsDDLCausesTxnCommit = meta.dataDefinitionCausesTransactionCommit(); 

Die Ausnahme war

java.sql.SQLException: Method not supported 

(das verursacht die obige Warnmeldung)

Heißt das, ich meine nichtverwenden könnenmit Apache Hive? Wenn das der Fall ist, dann sei es so. (Ich denke, ich hätte , um die Hibernate Implementierung für diesen Teil zu tauschen) Aber ich bin neugierig, die autoritative Antwort auf diesem zu wissen.

Im Internet konnte ich keinen starken Beweis finden, dass Menschen Hibernate erfolgreich mit Apache Hive verwendet haben.

+1

Wenn Sie sich nur für die Hive-Metastre (wie SparkSQL) interessieren, können Sie den Mysql, Oracle10, Derby oder Postgres-Dialekt verwenden, je nachdem, was Ihr Metastore verwendet –

+0

@ cricket_007 - Danke! Wie kann ich wissen, was der Metastore verwendet? (Tut mir leid, wenn das zu ignorant klingt - Dieser Datensee wird von jemand anderem eingerichtet.) Gibt es einen Befehl, den ich ausführen kann? Oder eine Datei, die ich nachschlagen kann? – leeyuiwah

+1

Normalerweise würde ich versuchen, die Datei hive-site.xml und eine Eigenschaft mit 'jdo' zu finden. Ich schlage nicht vor, dass Sie das brauchen, einfach, dass SparkSQL JDBC nicht verwendet, um mit HiveServer2 zu sprechen. –

Antwort

-1

Ich beantworte meine eigene Frage hier.

Ich denke, die Antwort ist "Nein - es gibt keinen Dialekt für Hive/SparkSQL" für Hibernate. Offensichtlich gibt es keine Unterstützung für HiveServer2 (d. H. Nicht den Hive-Metastore) in Hibernate. Ich glaube, das ist jetzt wahr (95% Vertrauen) (2017-10-19).

In meinem Fall habe ich meinen Code neu geschrieben und stattdessen den Hibernate-Code durch direkten JDBC-Code ersetzt.Ich hatte Glück, dass der Hibernate-Code dort nur für einfache DB-Abfragen (session.createSQLQuery()) nicht seriös ORM war, so dass die Änderung relativ einfach war.

Verwandte Themen