hive與hadoop、spark集成方案實踐

這幾天我嘗試了hadoop+spark+hive+mysql集成方案:

1.       Hadoop: 提供HDFS服務

2.       Spark: 實現map-reduce分析算法

3.       Hive提供Spark計算的來源數據

4.       Mysql存放Hive的元數據,以及計算的最終結果

 

首先,我把需要處理的原始數據文件臨時存放在hdfs上,文件名是隨機產生,以實現文件名的唯一性。

然後,我通過hive提供的接口,將數據導入到hive中。(注:其實hive是將數據保存在HDFS上自己特定目錄下)

最後,我用spark處理hive上數據,再將最終結果存放到mysql裏面。

 

這套方案已經可以工作。不過還有一些遺留問題:

 

Hive的效率:爲了提高hive的處理效率,需要將數據分區。hive分區的實現原理,與我們之前的想法是一致的。Hive也是在hdfs上創建了不同的目錄,來存放分區數據。

但是hive的分區對用戶不是透明的。也就是說,在我們查詢數據時,必須知道是要查詢哪幾個分區,在查詢條件中也必須顯式地指出分區的具體值。

這個與我之前理解的分區接口不太一樣。比如mysql的分區,用戶是不需要在查詢SQL中寫出分區條件的。另外, hive支持的SQL標準也有限。論壇說hive在處理大規模數據時,性能比較差。

Hive的性能比較差,主要是基於hadoop map-reduce方案的原因。Hadoop map-reduce在處理過程中,會把中間結果寫入hdfs,也就是磁盤上。IO效率會成爲系統瓶頸。

星環科技採用Spark來實現處理過程,大量中間結果保存在內存中,這個應該是影響效率最大的部分。

 

我看了星環科技的方案,他沒有用SparkSQL、Hive這樣的技術,而是自己實現SQL這一層。

參考了網上的一些資料,我們也可以按這個思路試一下:在上層封裝一層SQLParser,在下面可以基於Spark來實現具體動作。

 

我找了一個開源SQLParser: JSqlParser  http://jsqlparser.sourceforge.net/

通過這個工具,可以對用戶提交的SQL進行解析,然後用map-reduce對源數據進行處理,得到用戶想要的結果。

我試用了一下這個工具,可以分析SQL文法。這個文法採用JavaCC描述,可以根據需要進行調整。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章