hive採用了類sql
的查詢語言hql
,因此很容易將hive理解為資料庫。其實從結構上來看,hive和資料庫除了擁有類似的查詢語言,再無類似之處。
資料庫可以用在oltp
的應用中,但是hive
是為資料倉儲而設計的,清楚這一點,有助於從應用角度理解hive的特性。
hive不適合用於聯機事務處理(oltp),也不提供實時查詢功能。它最適合應用在基於大量不可變資料的批處理作業。hive 的特點是可伸縮(在hadoop 的集群上動態的新增裝置),可擴充套件、容錯、輸入格式的鬆散耦合。hive
的入口是driver
,執行的sql
語句首先提交到driver
驅動,然後調compiler
解釋驅動,最終解釋成mapreduce
任務執行,最後將結果返回。
比較項關聯式資料庫
hive
ansi sql
支援不完全支援
更新update insert delete
insert overwrite\ into table
事務支援
支援(部分支援)
模式寫模式讀模式
儲存位置
塊裝置、本地檔案系統
hdfs延時低
高多表插入
不支援支援
子查詢完全支援
只能用在from子句中
檢視updatable
read-only
可擴充套件性低高
資料規模
小大
實時響應
毫秒級秒級
解釋1、查詢語言:由於sql被廣泛的應用在資料倉儲中,因此,專門針對hive的特性設計了類sql的查詢語言hql
。熟悉sql開發的開發者可以很方便的使用hive
進行開發。
2、資料儲存位置:hive是建立在hadoop
之上的,所有hive的資料都是儲存在hdfs
中的。而資料庫則可以將資料儲存在塊裝置或者本地檔案系統中。
3、資料格式:hive中沒有定義專門的資料格式,資料格式可以由使用者指定,使用者定義資料格式需要指定三個屬性:列分隔符(通常為空格、"\t"、"\x001"
)、行分隔符("\n")以及讀取檔案資料的方法(hive中預設有三個檔案格式textfile、sequencefile
以及rcfile
)。由於在載入資料的過程中,不需要從使用者資料格式到hive
定義的資料格式的轉換,因此,hive在載入的過程中不會對資料本身進行任何修改,而只是將資料內容複製或者移動到相應的hdfs
目錄中。而在資料庫中,不同的資料庫有不同的儲存引擎,定義了自己的資料格式。所有資料都會按照一定的組織儲存,因此,資料庫載入資料的過程會比較耗時。
4、資料更新:由於hive是針對資料倉儲應用設計的,而資料倉儲的內容是讀多寫少的。因此,hive
中不支援對資料的改寫和新增,所有的資料都是在載入的時候中確定好的。而資料庫中的資料通常是需要經常進行修改的,因此可以使用insert into...values
新增資料,使用update…set修改資料。
6、執行:hive中大多數查詢的執行是通過hadoop提供的mapreduce
來實現的(類似select * from tbl的查詢不需要mapreduce)。而資料庫通常有自己的執行引擎。
7、執行延遲:之前提到,hive在查詢資料的時候,由於沒有索引,需要掃瞄整個表,因此延遲較高。另外乙個導致hive執行延遲高的因素是mapreduce
框架。由於mapreduce
本身具有較高的延遲,因此在利用mapreduce
執行hive查詢時,也會有較高的延遲。相對的,資料庫的執行延遲較低。當然,這個低是有條件的,即資料規模較小,當資料規模大到超過資料庫的處理能力的時候,hive的平行計算顯然能體現出優勢。
8、可擴充套件性:由於hive是建立在hadoop之上的,因此hive的可擴充套件性是和hadoop的可擴充套件性是一致的。而資料庫由於acid語義的嚴格限制,擴充套件性非常有限。目前最先進的並行資料庫oracle在理論上的擴充套件能力也只有100臺左右。
9、資料規模:由於hive建立在集群上並可以利用mapreduce進行平行計算,因此可以支援很大規模的資料;對應的,資料庫可以支援的資料規模較小。
Hive與MySQL的區別
hive與mysql的區別hive採用了類sql的查詢語言hql hive query language 除了hql之外,其餘無任何相似的地方。hive是為了資料倉儲設計的。儲存位置 hive在hadoop上 mysql將資料儲存在裝置或本地系統中 資料更新 hive不支援資料的改寫和新增,是在載入...
Hadoop Pig與Hive的區別
請允許我很無聊的把飛機和火車拿來做比較,因為2者根本沒有深入的可比性,雖然兩者都是一種高速的交通工具,但是具體的作用範圍是截然不同的,就像hive和pig都是hadoop中的專案,並且hive和pig有很多共同點,但hive還似乎有點資料庫的影子,而pig基本就是乙個對mapreduce實現的工具 ...
Hive與Hbase的區別
以下 由網上內容 整理 hive是為了簡化編寫mapreduce程式而生的,使用mapreduce做過資料分析的人都知道,很多分析程式除業務邏輯不同外,程式流程基本一樣。在這種情況下,就需要hive這樣的使用者程式設計介面。hive本身不儲存和計算資料,它完全依賴於hdfs和mapreduce,hi...