1. 程式人生 > >Hive簡介、什麼是Hive、為什麼使用Hive、Hive的特點、Hive架構圖、Hive基本組成、Hive與Hadoop的關係、Hive與傳統資料庫對比、Hive資料儲存

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

1.1 Hive簡介

1.1.1   什麼是Hive

Hive是基於Hadoop的一個數據倉庫工具,可以將結構化的資料檔案對映為一張資料庫表,並提供類SQL查詢功能。

1.1.2   為什麼使用Hive

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

人員學習成本太高

專案週期要求太短

MapReduce實現複雜查詢邏輯開發難度太大

 

Ø  為什麼要使用Hive

操作介面採用類SQL語法,提供快速開發的能力。

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

功能擴充套件很方便。

1.1.3   Hive的特點

Ø  可擴充套件

Hive可以自由的擴充套件叢集的規模,一般情況下不需要重啟服務。

 

Ø  延展性

Hive支援使用者自定義函式,使用者可以根據自己的需求來實現自己的函式。

 

Ø  容錯

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

1.2 Hive架構

1.2.1   架構圖

Jobtracker是hadoop1.x中的元件,它的功能相當於: Resourcemanager+AppMaster

 

TaskTracker 相當於:  Nodemanager +  yarnchild

 

 

 

 

1.2.2   基本組成

Ø  使用者介面:包括 CLI、JDBC/ODBC、WebGUI。

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

Ø  直譯器、編譯器、優化器、執行器。

1.2.3  各元件的基本功能

Ø  使用者介面主要由三個:CLI、JDBC/ODBC和WebGUI。其中,CLI為shell命令列;JDBC/ODBC是Hive的JAVA實現,與傳統資料庫JDBC類似;WebGUI是通過瀏覽器訪問Hive。

Ø  元資料儲存:Hive將元資料儲存在資料庫中。Hive 中的元資料包括表的名字,表的列和分割槽及其屬性,表的屬性(是否為外部表等),表的資料所在目錄等。

Ø  直譯器、編譯器、優化器完成 HQL 查詢語句從詞法分析、語法分析、編譯、優化以及查詢計劃的生成。生成的查詢計劃儲存在HDFS 中,並在隨後有 MapReduce 呼叫執行。

 

1.1 Hive與Hadoop的關係

Hive利用HDFS儲存資料,利用MapReduce查詢分析資料

 

 

 

1.2 Hive與傳統資料庫對比[M1] 
hive用於海量資料的離線資料分析

 

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

1.3 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雜湊之後的多個檔案

 

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

8.  可擴充套件性。由於 Hive 是建立在 Hadoop 之上的,因此 Hive 的可擴充套件性是和 Hadoop 的可擴充套件性是一致的(世界上最大的 Hadoop 叢集在 Yahoo!,2009年的規模在 4000 臺節點左右)。而資料庫由於 ACID 語義的嚴格限制,擴充套件行非常有限。目前最先進的並行資料庫 Oracle 在理論上的擴充套件能力也只有 100 臺左右。

9.      資料規模。由於 Hive 建立在叢集上並可以利用 MapReduce 進行平行計算,因此可以支援很大規模的資料;對應的,資料庫可以支援的資料規模較小。

轉載:

https://blog.csdn.net/tototuzuoquan/article/details/73003730