Hive(一):基礎知識最全總結

Hive基礎

一、基礎概念

Hive:facebook實現並開源的Hadoop的一個數據倉庫工具,底層數據存儲依賴於Hadoop的HDFS分佈式文件存儲上,將結構化數據映射到一張數據庫表中,並提供HQL的查詢功能,HQL的本質在於將HQL解析,轉換爲MapReduce任務進行數據的分析。

概括下:Hive就是基於HDFS進行數據存儲,HSQ基於MapReduce任務進行數據分析的Hadoop數據倉庫工具。

HQL請求
Hive處理轉化爲MapReduce
MapReduce任務執行

MapReduce 所面臨的問題:

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

爲什麼要使用 Hive

  • 1、更友好的接口:操作接口採用類 SQL 的語法,提供快速開發的能力
  • 2、更低的學習成本:避免了寫 MapReduce,減少開發人員的學習成本
  • 3、更好的擴展性:可自由擴展集羣規模而無需重啓服務,還支持用戶自定義函數

二、數據倉庫與數據庫

  • 數據庫:Database (Oracle, Mysql, PostgreSQL)主要用於事務處理(OLTP)
    • 典型代表:常用的關係型數據庫(RDBMS):MySQL,Oracle,SqlServer等
  • 數據倉庫:Datawarehouse (Amazon Redshift, Hive)主要用於數據分析(OLAP)。
    • 典型代表:AWS Redshift, Greenplum, Hive等

Hive與關係型數據庫(RDBMS)對比

數據庫 Hive 關係型數據庫(RDBMS)
查詢語言 HQL SQL
數據存儲 HDFS(分佈式文件系統) Row Device 或者 Local FS (本地文件系統)
執行器 MapReduce Executor
數據操作 覆蓋追加 行級更新刪除
數據插入 可批量導入 可單行、可批量導入
處理數據規模
執行延遲
分區 支持 支持
索引 0.8版本加入簡單索引 支持複雜索引
擴展性 有限
數據加載模式 讀時模式(快) 寫時模式(慢)
應用場景 海量數據 實時查詢

三、Hive的基本特性

  • 採用批處理方式處理海量數據
    • Hive需要把HiveQL語句轉換成MapReduce任務進行運行。
    • 數據倉庫存儲的是靜態數據,對靜態數據的分析適合採用批處理方式,不需要快速響應給出結果,而且數據本身也不會頻繁變化。
  • 提供適合數據倉庫操作的工具
    • Hive本身提供了一系列對數據進行提取、轉換、加載(ETL)的工具,可以存儲、查詢和分析存儲在Hadoop中的大規模數據。
    • 這些工具能夠很好地滿足數據倉庫各種應用場景。

四、Hive基礎組件

Hive基本組件

  • 用戶接口模塊包括CLI、HWI、JDBC、ODBC、Thrift Server。
    • CLI,Shell 終端命令行(Command Line Interface),採用交互形式使用 Hive 命令行與 Hive 進行交互,最常用(學習,調試,生產)
    • JDBC/ODBC,是Hive的基於JDBC操作提供的客戶端,用戶(開發員,運維人員)通過 這連接至 Hive server 服務。
    • Web UI,通過瀏覽器訪問 Hive。
  • 驅動模塊(Driver)包括編譯器、優化器、執行器等,負責把HiveSQL語句轉換成一系列MapReduce作業。
    Hive的核心是驅動引擎, 驅動引擎由四部分組成:
    • (1) 解釋器:解釋器的作用是將 HiveSQL 語句轉換爲抽象語法樹(AST)
    • (2) 編譯器:編譯器是將語法樹編譯爲邏輯執行計劃
    • (3) 優化器:優化器是對邏輯執行計劃進行優化
    • (4) 執行器:執行器是調用底層的運行框架執行邏輯執行計劃
  • 元數據存儲模塊(Metastore)是一個獨立的關係型數據庫(自帶derby數據庫,或MySQL數據庫)
    • Hive 中的元數據通常包括:表的名字,表的列和分區及其屬性,表的屬性(內部表和 外部表),表的數據所在目錄。
    • Metastore 默認存在自帶的Derby數據庫中。缺點就是不適合多用戶操作,並且數據存儲目錄不固定。數據庫跟着 Hive打開的路徑走,極度不方便管理。
    • 解決方案:通常存我們自己創建的MySQL庫(本地或遠程),Hive 和 MySQL 之間通過 MetaStore 服務交互。

五、Hive的工作原理

① SQL語句轉換成MapReduce作業的基本原理

以Join語句和Group by語句爲例

  • Join過程

Join在MapReduce的轉化過程

  • Group by過程
    Group by在MapReduce的轉化過程

② HQL查詢轉換成MapReduce作業

QL查詢轉換成MapReduce作業

  • 第1步:由Hive驅動模塊中的編譯器對用戶輸入的SQL語言進行詞法和語法解析,將SQL語句轉化爲抽象語法樹的形式。
  • 第2步:抽象語法樹的結構仍很複雜,不方便直接翻譯爲MapReduce算法程序,因此,把抽象語法書轉化爲查詢塊。
  • 第3步:把查詢塊轉換成邏輯查詢計劃,裏面包含了許多邏輯操作符。
  • 第4步:重寫邏輯查詢計劃,進行優化,合併多餘操作,減少MapReduce任務數量。
  • 第5步:將邏輯操作符轉換成需要執行的具體MapReduce任務。
  • 第6步:對生成的MapReduce任務進行優化,生成最終的MapReduce任務執行計劃。
  • 第7步:由Hive驅動模塊中的執行器,對最終的MapReduce任務進行執行輸出。

注意事項

  • 當啓動MapReduce程序時,Hive本身是不會生成MapReduce算法程序的,需要通過一個表示“Job執行計劃”的XML文件驅動執行內置的、原生的Mapper和Reducer模塊
  • Hive通過和JobTracker通信來初始化MapReduce任務,不必直接部署在JobTracker所在的管理節點上執行。
  • 通常在大型集羣上,會有專門的網關機來部署Hive工具。網關機的作用主要是遠程操作和管理節點上的JobTracker通信來執行任務。
  • 數據文件通常存儲在HDFS上,HDFS由名稱節點管理。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章