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.
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 –
@ 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
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. –