j'ai une application qui permet de se connecter à MySQL
, et je Hibernate
config pour elle comme ceci:Dialecte Hibernate pour 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>
...
Maintenant, si je veux me connecter à Hive/SparkSQL
à la place, ce serait les valeurs équivalentes pour ces propriétés être?
J'ai quelques idées sur driver_class
et url
(en supposant que nous utilisons le port 10000
), mais ce devrait être le dialect
?
<property name="hibernate.connection.driver_class">org.apache.hive.jdbc.HiveDriver</property>
<property name="hibernate.connection.url">jdbc:hive2://someHost:10000</property>
Mise à jour
J'ai essayé beaucoup de valeurs différentes, mais aucun d'entre eux travaillent. (Je n'ai pas encore pour savoir ce que MetaStore l'installation Hive Apache utilise, alors voici que je ne faisais que d'essais et d'erreurs)
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
je remarquai que dans tous les cas, il y a un avertissement de Mise en veille prolongée qui disait:
WARN JdbcServicesImpl,main:160 - \
HHH000341: Could not obtain connection metadata : \
Method not supported
Et puis le code irait dans un NullPointerException
dans org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure()
(ligne 207 4.2.0.Final). J'ai téléchargé le code source d'Hibernate et tracé la logique. L'exception a été dû au fait que quelques lignes avant une variable dialect
(de type Dialect
) a été déterminée à null
en raison de une exception prise lors d'une tentative d'exécuter la ligne 138:
metaReportsDDLCausesTxnCommit = meta.dataDefinitionCausesTransactionCommit();
L'exception était
java.sql.SQLException: Method not supported
(qui a causé le message d'avertissement ci-dessus)
Est-ce que cela signifie que je ne peux pas utiliser Hibernate
avec Apache Hive? Si c'est le cas, alors qu'il en soit ainsi. (Je suppose que je devrais pour échanger la mise en œuvre Hibernate
pour cette partie) Mais je suis curieux de connaître la réponse faisant autorité à ce sujet.
Sur Internet, je n'ai pas pu trouver de preuves solides que personnes utilisaient Hibernate
avec Apache Hive.
Si vous ne vous souciez que du métastore Hive (comme SparkSQL), vous pouvez utiliser le dialecte Mysql, Oracle10, Derby ou Postgres en fonction de ce que votre métastore utilise –
@ cricket_007 - Merci! Comment puis-je savoir ce que le métastore utilise? (Désolé si cela semble trop ignorant - Ce lac de données est mis en place par quelqu'un d'autre.) Y at-il une commande que je peux exécuter? Ou un fichier que je peux rechercher? – leeyuiwah
Habituellement, j'essayerais de trouver le fichier hive-site.xml et une propriété contenant 'jdo'. Je ne suggère pas que c'est ce dont vous avez besoin, simplement que SparkSQL n'utilise pas JDBC pour parler à HiveServer2 –