hive並發調用的運行方式-個人經驗篇


前言

使用hive,我們很多情況下會並發調用hive程序,將sql任務轉換成mapreuce提交到hadoop集群中,而在本人使用hive的過程中,發現並發調用hive有幾個問題,在這個和大家分享下.

正文

默認安裝hive,hive是使用derby內存數據庫保存hive的元數據,這樣是不可以並發調用hive的,需要配置為使用mysql保存hive的元數據。

 

運行hive,可以有以下訪問方式:

1.hiveserver:hive以thrift服務的服務器形式運行,允許不同的語言編寫客戶端進行訪問,通過thrift,jdbc,odbc連接器和hive服務器與hive通信,這種方式很適合java編程人員通過jdbc接口去訪問hive,但是在實踐中,發現並發調用時,很容易出現hiveserver無故宕機,沒有jvm的dump文件,hiveserver的程序也毫無輸出。

2.metastore:

2.1.內嵌metastore:默認情況下,metastore和hive是運行在同一個進程里,這種方式經過測試,在並發中是最穩定的,使用這種方式,暫時沒有出現問題。

2.2.遠程metastore:通過配置hive.metastore.local為false,讓metastore作為一個單獨的進程運行,hive客戶端都要連接遠程metastore才能執行任務,但是在實踐中,一樣很容易出現遠程metastore無故宕機,同樣沒有jvm的dump文件,遠程metastore程序也毫無輸出。

 

如果你是多個機器安裝了hive,多個機器共享同一個mysql元數據,那么默認情況下,在並發調用時,會偶爾發生hive報DELETEME找不到的錯誤,異常可以參考http://mail-archives.apache.org/mod_mbox/hive-user/201107.mbox/%3C4F6B25AFFFCAFE44B6259A412D5F9B1033183876@ExchMBX104.netflix.com%3E

這個錯誤是hive使用的datanucleus框架的bug,在hive中會去取schme name和catalog,是第三方的庫datanucleus在操作,可以看到它創建DELETEME123213一些隨機數字的表,然后刪掉。。目的就為了去獲取schme name和catalog。而多個機器在並發過程中,datanucleus發現有DELETEME表,會刪除,這個會導致創建了DELETEME的hive進程在訪問mysql過程中報錯。

要解決這個問題,需要做以下配置:

<property> 
  <name>datanucleus.fixedDatastore</name>          
  <value>true</value> 
</property>
<property>
 <name>datanucleus.autoCreateSchema</name>
 <value>false</value>
</property>

但是要注意:這個配置需要在讓hive在第一次初始化好后,才能啟動,因為第一次會自動創建元數據。

但是,這個配置會導致hive不會自動創建元數據,而第一次初始化時,不是全部的元數據會建好的,所以這個配置需要折中平衡,建議是沒有並發調用不啟動這個配置,如果有並發調用啟動,但是最好配置兩種hive實例,一種不啟動這個配置,作為日常的建表維護,一種作為定時任務,並發調用hive。

hive的並發調用,是很容易遇到問題的,要小心處理。

 

總結

個人經驗,如果需要並發調用hive,首先要配置hive的元數據為mysql數據庫,最好是通過內嵌metastore的方式去調用hive,通過執行 $HIVE_HOME/bin/hive -S -e "<hive sql>",再從管道獲取hive的輸出,是本人覺得最穩定安全的方式。

備注:執行sql做分析計算,以local的shell方式調用是沒啥問題,但是在load data的時候,並發調用依然有問題,hive stats設置為mysql依然無果,只能將load data的代碼以synchroize的方式調用,規避並發的問題。

參考 http://hi.baidu.com/youziguo/item/daa1550eb7efa865d45a1175

       http://fatkun.com/2012/04/hive-deleteme-table.html

       http://blog.csdn.net/jiedushi/article/details/6579956


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM