大數據技術原理與應用——數據倉庫

大數據技術原理與應用——數據倉庫

8.1 數據倉庫的概念

根本目的

在這裏插入圖片描述

數據倉庫概念

數據倉庫是一個面向主題的、集成的、相對穩定的、反映歷史變化的數據集合,用於支持管理決策。
在這裏插入圖片描述
數據倉庫的數據都來自於數據源,數據源中的數據需要經過抽取、轉換、加載這樣一個過程,把它加載到數據倉庫,這個抽取、轉換、加載這個過程一般簡稱爲 ETL,加載到數據倉庫以後,可以通過裏面的 OLAP 服務器和數據挖掘引擎對上層用戶提供服務構建一個基礎,就可以對外提供數據挖掘、報表、分析、查詢等等應用。
在這裏插入圖片描述
數據倉庫基本上保留了你歷史上所有數據的狀態。保留大量歷史數據可以幫助企業構建經營分析系統,通過大量歷史數據,就可以進行 OLAP 分析,找出企業經營管理中一些事物的規律。
在這裏插入圖片描述

傳統數據倉庫面臨的挑戰

1.無法滿足快速增長的海量數據存儲需求。
2.無法有效處理不同類型的數據。(傳統數據庫是基於關係型數據庫構建的,只能支持結構化數據存儲,沒有辦法去存儲很多類型的非結構化數據)
3.計算和處理能力不足。(關係型數據庫縱向擴展能力有限,水平擴展能力基本沒有,沒有辦法通過增加節點方式,增加它的處理能力,縱向擴展加CPU、加內存,擴展空間也是有限的)

8.2 Hive 簡介

在大數據時代,有Hadoop這一平臺以後,實際上,基於Hadoop平臺上構建的數據倉庫產品很自然地就會填補市場的空白,就用來滿足企業的大數據存儲和數據倉庫分析的需求,纔有了Hive,Hive就是構建在Hadoop整個平臺之上頂層的數據倉庫工具,而且它支持大規模的數據存儲分析,因爲它是構建在Hadoop平臺之上的,Hadoop本身是大數據處理架構、分佈式處理架構,它具有非常好的水平可擴展性,所有構建在它之上的Hive也具有非常好的水平可擴展性,雖然Hive是一個數據倉庫工具,它和傳統的數據倉庫也不一樣。
在這裏插入圖片描述
在這裏插入圖片描述
Hadoop 本身就有支持大規模數據存儲的組件 HDFS,支持大規模數據處理的組件叫 MapReduce,Hive就藉助這兩個組件完成數據的存儲和處理。

  • 依賴分佈式文件系統 HDFS 存儲數據
  • 依賴分佈式並行計算模型 MapReduce 處理數據
  • 借鑑SQL語言設計了新的查詢語言 HiveQL
    在這裏插入圖片描述

Hive 兩個方面的特性

(1)採用批處理方式處理海量數據

  • Hive 會把 HiveQL 語句轉換成 MapReduce 任務進行運行
  • 數據倉庫存儲的是靜態數據對靜態數據的分析適合採用批處理方式,不需要快速響應給出結果,而且數據本身也不會頻繁變化

(2)Hive 提供了一系列對數據進行提取、轉換、加載(ETL)的工具

  • 可以存儲、查詢和分析存儲在 Hadoop 中的大規模數據
  • 這些工具能夠很好地滿足數據倉庫各種應用場景

在這裏插入圖片描述

Pig 和 Hive 應用場景的區別

Pig 主要用於數據倉庫的 ETL 環節
Hive 主要用於數據倉庫海量數據的批處理分析

Hive 和傳統數據庫

Hive 在很多方面和傳統的關係數據庫類似,但是它的底層依賴的是 HDFS 和 MapReduce,所以在很多方面又有別於傳統數據庫。
在這裏插入圖片描述

Hive 在企業大數據分析平臺中的應用

在這裏插入圖片描述

Hive 在 Facebook 公司的應用

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
Hive 對外訪問接口
CLI:一種命令行工具
HWI:Hive Web Interface 是 Hive 的 Web 接口
JDBC 和 ODBC:開放數據庫連接接口很多應用開發都支持
Thrift Server:基於 Thrift 架構開發的接口,允許外界通過這個接口,實現對 Hive 倉庫的 RPC 調用
驅動模塊(Driver)
包含編譯器、優化器、執行器
負責把 HiveQL 語句轉換成一系列 MapReduce 作業
元數據存儲模塊(Metastore)
是一個獨立的關係型數據庫
通過 MySQL 數據庫來存儲 Hive 元數據

在這裏插入圖片描述

  • Qubole
    在這裏插入圖片描述
    Hive HA 基本原理
    在這裏插入圖片描述
    在這裏插入圖片描述

8.3 SQL 轉換成 MapReduce 作業的原理

Hive 本身不做具體的數據處理和存儲
Hive 把 SQL 語句轉換成相關的 MapReduce 作業

兩個步驟

1.SQL 語句轉換成 MapReduce 作業的基本原理
2.Hive 中 SQL 查詢轉換成 MapReduce 作業的過程
連接:怎麼能夠用 MapReduce 來實現數據庫的連接操作
(1).編寫一個 Map 處理邏輯
(2).Map 處理邏輯輸入關係數據庫的表
(3).通過 Map 對它進行轉換

  • join 的實現原理
    在這裏插入圖片描述
    在這裏插入圖片描述
  • group by 的實現原理
    在這裏插入圖片描述

當用戶向 Hive 輸入一段命令或查詢時,Hive 需要與 Hadoop 交互工作來完成該操作
1.驅動模塊接收該命令或查詢編譯器
2.對該命令或查詢進行解析編譯
3.由優化器對該命令或查詢進行優化計算
4.該命令或查詢通過執行器進行執行
在這裏插入圖片描述
(1)由 Hive 驅動模塊中的編譯器對用戶輸入的 SQL 語言進行詞法和語法解析,將 SQL 語句轉化爲抽象語法樹的形式。
(2)抽象語法樹的結構仍很複雜,不方便直接翻譯爲 MapReduce 算法程序,因此,需要把抽象語法樹轉化爲查詢塊。
(3)把查詢塊轉換成邏輯查詢計劃,裏面包含了許多邏輯操作符.
(4)重寫邏輯查詢計劃,進行優化合並多餘操作,減少 MapReduce 任務數量。
(5)將邏輯操作符轉換成需要執行的具體 MapReduce 任務。
(6)對生成的 MapReduce 任務進行優化生成最終的 MapReduce 任務執行計劃。
(7)由 Hive 驅動模塊中的執行器對最終的 MapReduce 任務進行輸出。
在這裏插入圖片描述

8.4.1 Impala 簡介

1.Hive 是建立在 Hadoop 平臺上。
2. Hive 依賴底層的 MapReduce 和 HDFS,所以它延遲比較高。
在這裏插入圖片描述
在這裏插入圖片描述

8.4.2 Impala 系統架構

在這裏插入圖片描述
Impala、Hive、HDFS、HBase 都是統一部署在一個 Hadoop 平臺上面。
Impala最典型的三個組件:
(1)Impalad:負責具體的相關查詢任務
(2)State Store:負責元數據管理和狀態信息維護
(3)CLI:用戶訪問接口
Impalad
是駐留在各個不同的數據節點上面的相關的進程,它包含了三個模塊,分別是:
(1)Query Planner(查詢計劃器)
(2)Query Coordinator(查詢協調器)
(3)Query Exec Engine(查詢執行引擎)
它的任務就是負責協調客戶端提交的查詢的執行,與 HDFS 的數據節點(HDFS DN)運行在同一節點上,它要做的事情是給其他 Impalad 分配任務以及收集其他 Impalad 的執行結果進行彙總,Impalad 也會執行其他 Impalad 給其分配的任務對本地 HDFS 和 HBase 裏的部分數據進行操作。
State Store
(1)會創建一個 statestored 進程
(2)負責收集分佈在集羣中各個 Impalad 進程的資源信息用於查詢調度
CLI
(1)給用戶提供查詢使用的命令行工具
(2)同時提供了 Hue、JDBC 及 ODBC 的使用接口
在這裏插入圖片描述

8.4.3 Impala 查詢執行過程

在這裏插入圖片描述
(0)當用戶提交查詢時,Impala 先創建一個負責協調客戶端提交的查詢的 Impalad 進程,該進程會向 Impala State Store 提交註冊訂閱信息,State Store 會創建一個 statestored 程,statestored 進程通過創建多個線程來處理 Impalad 的註冊訂閱信息。
(1)用戶通過 CLI 客戶端提交一個查詢到 impalad 進程,Impalad 的 Query Planner 對 SQL 語句進行解析,生成解析樹,Planner 把這個查詢的解析樹變成若干 PlanFragment ,發送到 Query Coordinator。
(2)Coordinator 通過從 MySQL 元數據庫中獲取元數據,從 HDFS 的名稱節點中獲取數據地址,以得到存儲這個查詢相關數據的所有數據節點。
(3)Coordinator 初始化相應 impalad 上的任務執行,即把查詢任務分配給所有存儲這個查詢相關數據的數據節點。
(4)Query Executor 通過流式交換中間輸出,並由 Query Coordinator 匯聚來自各個 impalad 的結果
(5)Coordinator 把彙總後的結果返回給 CLI 客戶端

8.4.4 Impala 與 Hive 的比較

在這裏插入圖片描述

Hive 與 Impala 的不同點

1.Hive 適合於長時間的批處理查詢分析,而 Impala 適合於實時交互式 SQL 查詢。
2.Hive 依賴於 MapReduce 計算框架,Impala 把執行計劃表現爲一棵完整的執行計劃,直接分發執行計劃到各個 Impalad 執行查詢。
3.Hive 在執行過程中,如果內存放不下所有數據則會使用外存,以保證查詢能順序執行完成。Impala 在遇到內存放不下數據時,不會利用外存所以 Impala 目前處理查詢時會受到一定的限制。

Hive 與 Impala 的相同點

1.Hive 與 Impala 使用相同的存儲數據池,都支持把數據存儲於 HDFS 和 HBase 中。
2.Hive 與 Impala 使用相同的元數據。
3.Hive 與 Impala 中對 SQL 的解釋處理比較相似都是通過詞法分析生成執行計劃。
在這裏插入圖片描述

8.5.1 Hive 安裝與基本操作

在這裏插入圖片描述
在這裏插入圖片描述
Hive 的數據類型
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

8.5.2 Hive 應用實例 WordCount

在這裏插入圖片描述
在這裏插入圖片描述
具體步驟
進入 hive 命令行界面,編寫 HiveQL 語句實現 WordCount 算法
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

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