Hivenate方言用于Hive / SparkSQL?

时间:2017-10-13 22:54:31

标签: hibernate hadoop hive apache-spark-sql

我有一个用于连接MySQL的应用,我有Hibernate个配置 就像这样:

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

现在,如果我想要连接到Hive/SparkSQL,那么会是什么呢? 这些属性的等价值是?

我对driver_classurl有一些想法(假设我们使用的是端口10000),但dialect应该是什么?

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

更新

我尝试了很多不同的值,但没有一个值有效。 (我还没有 找出Apache Hive安装使用的Metastore,所以这里 我只是做了反复试验)

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

我注意到,在任何情况下,都会发出警告 Hibernate说:

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

然后代码会遇到NullPointerExceptionorg.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure() (4.2.0.Final中的第207行)。

我下载了Hibernate的源代码并追踪了逻辑。 引起异常是因为变量前面有几行 dialect(类型Dialect)被确定为null 尝试执行第138行时遇到异常:

metaReportsDDLCausesTxnCommit = meta.dataDefinitionCausesTransactionCommit();

例外是

java.sql.SQLException: Method not supported

(导致上述警告信息)

这是否意味着我不能将Hibernate与Apache Hive一起使用? 如果是这样的话,那就这样吧。 (我想我会的 替换此部分的Hibernate实现) 但我很想知道权威的答案 对此。

在互联网上,我找不到有力的证据 人们一直在使用{H}成功使用Hibernate

1 个答案:

答案 0 :(得分:1)

我在这里回答我自己的问题。

对于Hibernate,我认为答案是“不 - Hive / SparkSQL没有方言”。显然,在Hibernate中不支持HiveServer2(即Hive Metastore)。我相信这是真实的(95%信心)截至目前(2017-10-19)。

就我而言,我最终重写了我的代码并替换了Hibernate代码来代替直接使用JDBC代码。我很幸运,那里的Hibernate代码仅用于简单的数据库查询(session.createSQLQuery())而不是严重的ORM,因此更改相对容易。