天天看點

Hive簡介、什麼是Hive、為什麼使用Hive、Hive的特點、Hive架構圖、Hive基本組成、Hive與Hadoop的關系、Hive與傳統資料庫對比、Hive資料存儲(來自學習資料)

hive是基于hadoop的一個資料倉庫工具,可以将結構化的資料檔案映射為一張資料庫表,并提供類sql查詢功能。

Ø  直接使用hadoop所面臨的問題

人員學習成本太高

項目周期要求太短

mapreduce實作複雜查詢邏輯開發難度太大

Ø  為什麼要使用hive

操作接口采用類sql文法,提供快速開發的能力。

避免了去寫mapreduce,減少開發人員的學習成本。

功能擴充很友善。

Ø  可擴充

hive可以自由的擴充叢集的規模,一般情況下不需要重新開機服務。

Ø  延展性

hive支援使用者自定義函數,使用者可以根據自己的需求來實作自己的函數。

Ø  容錯

良好的容錯性,節點出現問題sql仍可完成執行。

Hive簡介、什麼是Hive、為什麼使用Hive、Hive的特點、Hive架構圖、Hive基本組成、Hive與Hadoop的關系、Hive與傳統資料庫對比、Hive資料存儲(來自學習資料)

jobtracker是hadoop1.x中的元件,它的功能相當于: resourcemanager+appmaster

tasktracker 相當于:  nodemanager +  yarnchild

Ø  使用者接口:包括 cli、jdbc/odbc、webgui。

Ø  中繼資料存儲:通常是存儲在關系資料庫如 mysql , derby中。

Ø  解釋器、編譯器、優化器、執行器。

Ø  使用者接口主要由三個:cli、jdbc/odbc和webgui。其中,cli為shell指令行;jdbc/odbc是hive的java實作,與傳統資料庫jdbc類似;webgui是通過浏覽器通路hive。

Ø  中繼資料存儲:hive将中繼資料存儲在資料庫中。hive 中的中繼資料包括表的名字,表的列和分區及其屬性,表的屬性(是否為外部表等),表的資料所在目錄等。

Ø  解釋器、編譯器、優化器完成 hql 查詢語句從詞法分析、文法分析、編譯、優化以及查詢計劃的生成。生成的查詢計劃存儲在hdfs 中,并在随後有 mapreduce 調用執行。

hive利用hdfs存儲資料,利用mapreduce查詢分析資料

Hive簡介、什麼是Hive、為什麼使用Hive、Hive的特點、Hive架構圖、Hive基本組成、Hive與Hadoop的關系、Hive與傳統資料庫對比、Hive資料存儲(來自學習資料)
Hive簡介、什麼是Hive、為什麼使用Hive、Hive的特點、Hive架構圖、Hive基本組成、Hive與Hadoop的關系、Hive與傳統資料庫對比、Hive資料存儲(來自學習資料)

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

1、  hive中所有的資料都存儲在 hdfs 中,沒有專門的資料存儲格式(可支援text,sequencefile,parquetfile,rcfile等)

sequencefile是hadoop中的一種檔案格式:

      檔案内容是以序列化的kv對象來組織的

2、隻需要在建立表的時候告訴 hive 資料中的列分隔符和行分隔符,hive 就可以解析資料。

3、hive 中包含以下資料模型:db、table,external table,partition,bucket。

²  db:在hdfs中表現為${hive.metastore.warehouse.dir}目錄下一個檔案夾

²  table:在hdfs中表現所屬db目錄下一個檔案夾

²  external table:與table類似,不過其資料存放位置可以在任意指定路徑

²  partition:在hdfs中表現為table目錄下的子目錄

²  bucket:在hdfs中表現為同一個表目錄下根據hash散列之後的多個檔案

<a target="_blank"></a>

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 的并行計算顯然能展現出優勢。

8.  可擴充性。由于 hive 是建立在 hadoop 之上的,是以 hive 的可擴充性是和 hadoop 的可擴充性是一緻的(世界上最大的 hadoop 叢集在 yahoo!,2009年的規模在 4000 台節點左右)。而資料庫由于 acid 語義的嚴格限制,擴充行非常有限。目前最先進的并行資料庫 oracle 在理論上的擴充能力也隻有 100 台左右。

9.      資料規模。由于 hive 建立在叢集上并可以利用 mapreduce 進行并行計算,是以可以支援很大規模的資料;對應的,資料庫可以支援的資料規模較小。