簡體   English   中英

如何使Hive JDBC驅動程序和Hive Shell與同一個數據庫對話?

[英]How can I get the Hive JDBC driver and the Hive shell talk to the same DB?

我有一個通過以下hive --service hiveserver在默認端口10000上運行的hive服務器: hive --service hiveserver然后,我使用Hive JDBC Client通過以下方式連接到它的Java程序(本教程!):

Connection con = DriverManager.getConnection("jdbc:hive://localhost:10000/default", "", "");

本教程將運行,並在默認數據庫上創建一個表testhivedrivertable並對其進行描述。 這工作正常,我的蜂巢服務記錄了很多東西。

然后,我嘗試通過hive -p 10000將外殼程序帶到同一數據庫,這使我獲得了外殼程序,但是我看不到Java程序創建的表(Java程序也看不到我在外殼程序中創建的表) 。 另外,當我在hive shell中運行命令時,控制台中沒有任何顯示,因此,我很確定自己正在與其他hive實例進行對話。

我如何才能使Hive Shell與Java JDBC驅動程序所在的同一數據庫進行交互?

您正在與同一個Hive實例交談; 不幸的是,不是同一個metastore。

Hive Metastore是一個數據庫,用於存儲有關Hive表的元數據(例如,表名,列名和類型,表位置,正在使用的存儲處​​理程序,表中的存儲桶數,排序列(如果有),分區列(如果有)等)。 )。 創建表時,此元存儲庫將使用與新表相關的信息進行更新,當您對該表發出查詢時,會查詢該新表。

但是,Hive創始人的重要考慮之一是使其易於使用。 這促使他們決定默認使用嵌入式Derby數據庫作為元存儲。 這不需要任何設置,但是副作用是數據庫的范圍在單個CLI調用或單個JDBC客戶端上下文內。 因此,Hive元數據不會在客戶端的多次調用或客戶端之間保持不變。 這就是您所看到的。

您應該遷移到使用獨立的元存儲,該存儲將跨多個Hive客戶端持久保存數據。 MySQL和PostGres是流行的選項。 Cloudera有一篇不錯的文章,介紹如何配置Hive和MySQL以使用MySQL元存儲。 在這里可用。

谷歌將我發送到這里,所以我以為我想和其他谷歌人分享我的發現:

如果您使用的是hive2,則可以使用新的beeline客戶端。 似乎使用jdbc連接到服務器,因此共享同一metastore。

例如:beeline -u jdbc:hive2:// localhost:10000 / default

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM