天天看點

46 Hive與傳統資料庫對比

46 Hive與傳統資料庫對比

hive具有sql資料庫的外表,但應用場景完全不同,hive隻适合用來做批量資料統計分析

對比

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 修改資料。

5.索引 :之前已經說過,Hive 在加載資料的過程中不會對資料進行任何處理,甚至不會對資料進行掃描,是以也沒有對資料中的某些 Key 建立索引。Hive 要通路資料中滿足條件的特定值時,需要暴力掃描整個資料,是以通路延遲較高。由于 MapReduce 的引入, Hive 可以并行通路資料,是以即使沒有索引,對于大資料量的通路,Hive 仍然可以展現出優勢。資料庫中,通常會針對一個或者幾個列建立索引,是以對于少量的特定條件的資料的通路,資料庫可以有很高的效率,較低的延遲。由于資料的通路延遲較高,決定了 Hive 不适合線上資料查詢。

6.執行 :Hive 中大多數查詢的執行是通過 Hadoop 提供的 MapReduce 來實作的,而資料庫通常有自己的執行引擎。

7.執行延遲 :之前提到,Hive 在查詢資料的時候,由于沒有索引,需要掃描整個表,是以延遲較高。另外一個導緻 Hive 執行延遲高的因素是 MapReduce 架構。由于 MapReduce 本身具有較高的延遲,是以在利用 MapReduce 執行 Hive 查詢時,也會有較高的延遲。相對的,資料庫的執行延遲較低。當然,這個低是有條件的,即資料規模較小,當資料規模大到超過資料庫的處理能力的時候,Hive 的并行計算顯然能展現出優勢。

繼續閱讀