Hive (
http://en.wikipedia.org/wiki/Apache_Hive )(非嚴格的原文順序翻譯)
Apache Hive是一個構建在Hadoop上的數據倉庫框架,它提供數據的概要信息、查詢和分析功能。最早是Facebook開發的,現在也被像Netflix這樣的公司使用。Amazon維護了一個為自己定制的分支。
Hive提供了一個類SQL的語音--HiveQL,它將對關系數據庫的模式操作轉換為Hadoop的map/reduce、Apache Tez和Spark 執行引擎所支持的操作。以上的三種執行引擎都可以在YARN框架下運行。為了加速執行,它添加了indexes特性,包括bitmap indexes。
其他特性:
- 加速用的索引功能(有什么特別的?)
- 不同的存儲類型文件,例如plain text, RCFile, HBase, ORC, and others.
- 元數據保存在關系數據庫中,默認是(Apache Derbydatabase),可替換為Mysql等;
- 可對hadoop生態系統的壓縮數據操作,支持多種算法:gzip, bzip2, snappy, etc.
- 內置UDF(自定義函數)
- 類SQL查詢,是轉換為Mapreduce執行的。
HiveQL不完全兼容SQL-92標准:
1)它額外支持多行插入功能和通過select創建表功能;
2)僅支持基本的索引功能;
3)不支持事務和物化視圖功能;
4) 僅支持有限的子查詢功能
在Hive內部,HiveQL語句通過編譯器轉換為DAG(有向無環圖)關系的mapReduce,然后提交給hadoop執行;
Shark是一個為spark設計的大規模數據倉庫系統,它與Hive兼容。。。balabala
Shark將停止開發,而Spark SQL將取代並兼容Shark 0.9 的所有功能,並提供額外的功能。
Hive的缺點:
- 性能不佳;
- 為了執行交互查詢,需要部署昂貴且私有的數據倉庫,且這些數據倉庫(EDWs )需要嚴格而冗長的ETL處理。
Hive與EDWs的顯著性能差異導致了業界懷疑通用數據處理引擎在查詢處理上有與生俱來的缺陷。許多人相信交互性SQL需要昂貴的專業查詢系統(相對於通用數據引擎。)(如EDWs)。Shark是其中一個最早建立在Hadoop系統上的交互式SQL工具,且是唯一一個建立在spark上的。Shark證明Hive的缺陷不是固有的,像spark這樣的通用數據引擎能同時做到:像EDW那樣快,像Hive/MapReduce那樣大規模。
從Shark 到 Spark SQL
Shark建立在Hive的代碼基礎上,並通過將Hive的部分物理執行計划交換出來(by swapping out the physical execution engine part of Hive)。這個方法使得Shark的用戶可以加速Hive的查詢,但是Shark繼承了Hive的大且復雜的代碼基線使得Shark很難優化和維護。隨着我們遇到了性能優化的上限,以及集成SQL的一些復雜的分析功能,我們發現Hive那位MapReduce設計的框架限制了Shark的發展。
基於上述的理由我們停止Shark這個獨立項目的開發,而轉向spark SQL。Spark SQL是
作為spark一個組件,充分利用spark的有事從頭開始設計的。這種新的設計使我們數據更快,且最終交付給用戶一個體驗更好且更強大的工具。
對於SQL用戶,spark SQL提供很好的性能並且與Shark、Hive兼容。(性能提高一個數量級)。
對spark用戶,spark SQL提供了對結構化數據的簡便( narrow-waist)操作。那是真正的為高級的數據分析統一了SQL(結構化查詢語言)與命令式語言的混合使用。
對開源的高手來說,Spark SQL提供了新穎而優雅的構建查詢計划的方法。人們可以很容易添加新的優化到這個框架內。我們也被開源貢獻者的熱情所感動。。。balabala
Hive on Spark Project (HIVE-7292)
說大家都希望Hive盡快支持Hive on spark功能。。以及未來多么美好。。balabala
