[英]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.