2017-10-13 35 views
0

我有一个用于连接到MySQL的应用程序,我有这方面Hibernate配置 这样的:Hive/SparkSQL的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> 

更新

我尝试了许多不同的值,但他们没有工作。 (我还没有 找出metastore了Apache蜂巢安装使用,所以这里 我只是在做试验和错误)

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 

我注意到,在所有的情况下,有从 休眠警告谓曰:

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

然后该代码将在org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure() 碰上NullPointerException
(在4.2.0.Final 207线)。

我下载了Hibernate的源代码并追踪了逻辑。 该异常被造成的,因为提前几行的可变 dialect(的Dialect型)被确定为null由于 试图执行138线时捕获的异常:

metaReportsDDLCausesTxnCommit = meta.dataDefinitionCausesTransactionCommit(); 

唯一的例外是

java.sql.SQLException: Method not supported 

(导致上面的警告消息)

这是否意味着我不能使用Hibernate与Apache Hive? 如果是这样,那就这样吧。 (我想我会有 换出Hibernate执行此部分) 但我很想知道关于此的权威答案 。

在互联网上我找不到有力证据表明 人已经成功使用Hibernate与Apache Hive。

+1

如果您只关心Hive metastore(如SparkSQL),则可以使用Mysql,Oracle10,Derby或Postgres方言,具体取决于您的metastore使用 –

+0

@ cricket_007 - 谢谢!我如何知道Metastore使用的是什么? (对不起,如果这听起来太无知 - 这个数据湖是由其他人建立的。)有没有我可以运行的命令?或者我可以查找的文件? – leeyuiwah

+1

通常,我会尝试找到hive-site.xml文件和一些包含'jdo'的属性。我并不是说这就是你需要的,只是SparkSQL不使用JDBC来与HiveServer2交谈 –

回答

-1

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

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

在我的情况下,我最终重写了我的代码,并将Hibernate代码替换为直接JDBC代码。幸运的是,那里的Hibernate代码只是用于简单的数据库查询(session.createSQLQuery())而不是严重的ORM,所以更改相对容易。

相关问题