Hive初識功能架構

hadoop,spark,kafka交流羣:224209501

kafka源碼,hbase源碼,spark源碼請關注浪尖公衆號

本節講述的主要內容爲:

1) Hive 能做什麼,與MapReduce相比優勢在哪裏(對於開發者)
2) 爲什麼說Hive是Hadoop 數據倉庫,從【數據存儲和分析】方面理解
3) Hive 架構,分爲三個部分來理解,最好通過畫圖理解

1,hive PK mapreduce。

1.1 mapreduce的缺點

(1).MapReduce 格式比較固定。
【八股文】格式編程,三大部分組成
(2).No Schema(數據庫中的Schema,爲數據庫對象的集合,一個用戶一般對應一個schema。),缺少查詢語言,比如SQL。

  • 數據分析,針對DBA、SQL語句,如何進行數據分析。
  • MapReduce編程成本高。
  • 因此facebook,實現並開源了hive。

1.2 hive的優點

(1).操作接口採用類SQL語法,提供快速開發能力(簡單、容易上手);
(2).避免去寫mapreduce,減少開發人員的學習成本;
(3).統一的元數據管理,可與implela/spark等共享元數據;
(4).易擴展(HDFS+MapReduce:可以擴展集羣規模;支持自定義函數);
(5).數據的離線處理;比如:日誌分析,海量結構數據離線分析。
(6).hive執行延遲比較高,因此hive常用於數據分析的,對實時性要求不高的場合;
(7).hive優勢在於處理大數據,對於處理小數據沒有 優勢,因爲hive的執行延遲比較高。

2,hive是hadoop的數據倉庫

hive是基於Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射爲一張數據庫表,並提供簡單的sql查詢功能,可以將sql語句轉換爲MapReduce任務進行運行。其優點是學習成本低,可以通過類SQL語句快速實現簡單的MapReduce統計,不必開發專門的MapReduce應用,十分適合數據倉庫的統計分析。它提供了一系列的工具,可以用來進行數據提取轉化加載(ETL),這是一種可以存儲、查詢和分析存儲在 Hadoop中的大規模數據的機制。
(1).hive由FaceBook開源用於解決海量結構化日誌的數據統計。
(2).hive是基於hadoop的一個數據倉庫工具,可以將結構化的數據文件映射成一張表,並提供類SQL查詢功能。
(3).hive是構建在hadoop之上的數據倉庫:

  • 使用HQL語句作爲查詢接口
  • 使用HDFS進行存儲
  • 使用mapreduce進行計算。
    (4).hive本質是:將HQL轉化成MapReduce程序。
    (5).靈活和擴展性比較好:支持UDF,自定義存儲格式。
    (6).適合離線處理。
    (7).查詢和管理在分佈式存儲的大的數據集(數據庫:增刪改查,hive不支持增刪該)。管理主要是對錶的管理。

3,hive架構理解

hive在hadoop生態系統中的位置:
hive在生態系統中的位置.png-24.6kB
hive框架圖:
hive架構.png-14.4kB
hive執行流程:
hive執行流程.png-117.1kB

3.1 用戶接口:client

CLI(hive shell)、JDBC/ODBC(java訪問hive),WEBUI(瀏覽器訪問hive)

3,2 元數據:metastore

元數據包括:表名、表所屬的數據庫(默認是default)、表的擁有者、列/分區字段、表的類型(是否是外部表)、表的數據所在目錄等;
默認存儲在自帶的derby數據庫中,推薦採用mysql存儲metastore;

3,3 hadoop

使用HDFS進行存儲,使用mapreduce進行計算

3.4 驅動器:driver

驅動器包含:解析器、編譯器、優化器、執行器。
(1).解析器:
強SQL字符串轉換成抽象語法樹AST,這一步一般都用第三方工具完成,比如antlr;對AST進行語法分析,比如表是否存在、字段是否存在、SQL語義是否有誤(比如select中被判定爲聚合的字段在group by中是否出現).

(2).編譯器
將AST編譯生成邏輯執行計劃。

(3).優化器
對邏輯執行計劃進行優化。

(4).執行器。
把邏輯執行計劃轉換成可以運行的物理計劃。對於hive來說,就是MR/TEZ/Spark。

3.5,hive與關係型數據庫的區別。

(1).hive和關係數據庫存儲文件的系統不同,hive使用的是hadoop的HDFS(hadoop的分佈式文件系統),關係數據庫則是服務器本地的文件系統;
(2).hive使用的計算模型是mapreduce,而關係數據庫則是自己設計的計算模型;
(3).關係數據庫都是爲實時查詢的業務進行設計的,而hive則是爲海量數據做數據挖掘設計的,實時性很差;實時性的區別導致hive的應用場景和關係數據庫有很大的不同;
(4).Hive很容易擴展自己的存儲能力和計算能力,這個是繼承hadoop的,而關係數據庫在這個方面要比數據庫差很多。

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