Hive的基本概念

一、Hive基本概念

1.1、Hive簡介

什麼是Hive

Hive是基於Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射爲一張數據庫表,並提供類SQL查詢功能(HQL)。
其本質是將SQL轉換爲MapReduce的任務進行運算,底層由HDFS來提供數據的存儲,hive可以理解爲一個將SQL轉換爲MapReduce的任務的工具。

爲什麼使用Hive

直接使用hadoop所面臨的問題

人員學習成本太高
項目週期要求太短
MapReduce實現複雜查詢邏輯開發難度太大

爲什麼要使用Hive

操作接口採用類SQL語法,提供快速開發的能力。
避免了去寫MapReduce,減少開發人員的學習成本。
功能擴展很方便。

Hive的特點

可擴展
Hive可以自由的擴展集羣的規模,一般情況下不需要重啓服務。

延展性
Hive支持用戶自定義函數,用戶可以根據自己的需求來實現自己的函數。

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

1.2、 Hive架構

架構圖

在這裏插入圖片描述

基本組成

用戶接口:包括CLI、JDBC/ODBC、WebGUI。其中,CLI(command line interface)爲shell命令行;JDBC/ODBC是Hive的JAVA實現,與傳統數據庫JDBC類似;WebGUI是通過瀏覽器訪問Hive。

元數據存儲:通常是存儲在關係數據庫如mysql/derby中。Hive 將元數據存儲在數據庫中。Hive 中的元數據包括表的名字,表的列和分區及其屬性,表的屬性(是否爲外部表等),表的數據所在目錄等。

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

1.4、Hive與傳統數據庫對比

hive用於海量數據的離線數據分析

在這裏插入圖片描述
1.數據格式。Hive中沒有定義專門的數據格式,數據格式可以由用戶指定,用戶定義數據格式需要指定三個屬性:列分隔符(通常爲空格、”\t”、”\x001″)、行分隔符(”\n”)以及讀取文件數據的方法(Hive 中默認有三個文件格式 TextFile,SequenceFile 以及 RCFile)。
2.Hive在加載數據的過程中,不需要從用戶數據格式到 Hive 定義的數據格式的轉換。
3.Hive 在加載的過程中不會對數據本身進行任何修改,甚至不會對數據進行掃描。而只是將數據內容複製或者移動到相應的 HDFS 目錄中。
4.Hive 中不支持對數據的改寫和添加,所有的數據都是在加載的時候中確定好的。
5.Hive 在加載數據的過程中不會對數據中的某些 Key 建立索引。Hive 要訪問數據中滿足條件的特定值時,需要暴力掃描整個數據,因此訪問延遲較高。由於數據的訪問延遲較高,決定了Hive 不適合在線數據查詢。
6.Hive 是建立在 Hadoop 之上的,因此 Hive 的可擴展性是和 Hadoop 的可擴展性是一致的。

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

1.5、Hive的數據存儲

1、Hive中所有的數據都存儲在 HDFS 中,沒有專門的數據存儲格式(可支持Text,SequenceFile,ParquetFile,ORC格式RCFILE等)

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散列之後的多個文件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章