2017-10-13 37 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,所以更改相對容易。

相關問題