數分-理論-大資料6-Hive(資料倉庫)
(資料分析系列)
文章目錄
- 數分-理論-大資料6-Hive(資料倉庫)
- 1知識點
- 2具體內容
- 2.1資料倉庫
- 2.1.1起源
- 2.1.2數倉概念
- 2.1.3體系結構
- 2.1.4存在挑戰
- 2.2Hive基礎
- 2.2.1概述
- 2.2.2背景
- 2.2.3Hive與Hadoop生態系統
- 2.2.4對比
- 2.2.5模擬實作
- 2.3Hive核心
- 2.3.1資料型別
- 2.3.2資料模型
- 2.4Hive系統結構
- 2.4.1用戶介面模塊
- 2.4.2驅動模塊Driver
- 2.4.3元資料存盤模塊Metastore
- 2.4.4HQL的執行流程
- 2.5實戰應用
- 3參考
1知識點
- 資料倉庫
- Hive基礎
- Hive核心
- Hive系統結構
- 實戰應用
2具體內容
2.1資料倉庫
2.1.1起源
基于分析型決策的優化,需高性能的完成用戶查詢,提出資料倉庫
2.1.2數倉概念
1.概念
- 資料倉庫是一個面向主題的、集成的、非易失的、隨時間變化的,用來支持管理人員決策的資料集合,資料倉庫中包含了粒度化的企業資料,
- 企業資料倉庫有效集成了來自不同部門、不同地理位置、具有不同格式的資料,為企業管理決策者提供了企業范圍內的單一資料視圖,
2.特征
主體性+集成性+非易失性+時變性

- 主題性
- 針對不同業務進行歸類分析,抽象為主題,對應某一分析領域涉及的分析物件
- 抽象層次,每個領域各有邏輯內核,互不交叉
- 集成性
- 統一口徑,統一資料來源中的歧義、單位、字長等元素進行總和計算,聚合成新資料
- 非易失性
- 保存歷史業務資料,根據業務每隔一段時間匯入新的資料,不會輕易丟失改變
- 時變性
- 反應一個業務程序,業務變化會隨著改變,適應分析決策
2.1.3體系結構
資料源、資料存盤和管理、資料服務以及資料應用

- 資料源:數倉的資料來源,外部資料+業務系統+文黨澩
- 資料存盤和管理:存盤和管理資料,資料倉庫+資料集市+資料倉庫監視+運行與維護工具+元資料管理
- 資料服務:為前端工具和應用提供資料服務,從數倉獲取資料提供給前端,或通過OLAP服務器為前端應用提供復雜資料服務
- 資料應用:直接面向最終用戶,資料工具+自由報表工具+資料分析工具+資料挖掘工具+應用系統
2.1.4存在挑戰
- 無法滿足快速增長的海量資料存盤需求
- 無法有效處理不同型別的資料
- 計算和處理能力不足
2.2Hive基礎

2.2.1概述
- 建立在hadoop上的一種數倉工具
- 將結構化、半結構化的資料檔案映射為一張資料庫表
- 基于資料庫表,提供一種類sql的查詢模型HQL
- 訪問、分析存在Hadoop檔案中的大型資料集
注意:
- 本身不具備存盤功能
- 核心:將HQL轉換為MapReduce程式,提交到Hadoop集群執行

特點:
- 類SQL的查詢語言HQL
- 可自定義用戶函式UDF和存盤格式
- 為超大資料集設計計算和存盤能力,集群擴展容易
- 統一元資料管理,可與preso\impala\sqarksql共享資料
- 執行延遲高,不適實時處理,時候海量資料離線處理
2.2.2背景
- 成本:MR需要學java,不易復雜查詢
- 建立分析型數倉:支持類SQL的查詢及支持自定義函式,可做數倉工具
2.2.3Hive與Hadoop生態系統

- HDFS:分布式檔案系統,存盤海量資料
- MapReduce:分布式并行編程模型,批處理,實作高性能計算
- Hive:資料倉庫,不存盤和處理資料,用HQL撰寫處理邏輯,轉換為MR任務執行
- Pig:Hive的替代工具,資料流語言和運行環境,適用于在Hadoop平臺查詢半結構化資料集,用于資料抽取(ETL),將外部資料裝載到Hadoop集群,轉換為用戶需要的資料格式
- HBase:分布式資料庫,面向列式存盤、分布式、可伸縮的資料庫,它可以提供資料的實時訪問功能
- Hive只能處理靜態資料,BI報表資料
- Hive為了減少復雜MR應用程式的撰寫
- HBase為了實作對資料的實時訪問
2.2.4對比
底層依賴HDFS+MapReduce
| 對比內容 | Hive | 傳統資料庫 |
|---|---|---|
| 資料存盤 | HDFS | 本地檔案系統 |
| 索引 | 支持有限索引 | 支持復雜索引 |
| 磁區 | 支持 | 支持 |
| 執行引擎 | MapReduce、Tez、Spark | 自身的執行引擎 |
| 執行延遲 | 高 | 低 |
| 擴展性 | 好 | 有限 |
| 資料規模 | 大 | 小 |
2.2.5模擬實作
1,jingjing,26,hangzhou
2,wenrui,26,beijing
3,dapeng,26,beijing
4,tony,15,hebei
-
需求:HDFS檔案系統的檔案,撰寫SQL,統計來自北京的年齡大于20的人數
-
分析:對表操作,先找到檔案與表的對應關系,實作表與檔案的映射

- 表位置
- 欄位位置
- 內容讀取的分隔操作
-
Hive對SQL陳述句語法校驗,根據記錄的元資料對sql決議,制定執行計劃,轉為MR程式執行,結果封裝后回傳給用戶
2.3Hive核心
2.3.1資料型別
1.基本資料型別
| 大類 | 型別 |
|---|---|
| Integers(整型) | TINYINT:1位元組的有符號整數; SMALLINT:2位元組的有符號整數;INT:4位元組的有符號整數; |
| BIGINT:8位元組的有符號整數 | |
| Boolean(布爾型) | BOOLEAN:TRUE/FALSE |
| Floating point numbers(浮點型) | FLOAT:單精度浮點型; |
| DOUBLE:雙精度浮點型 | |
| Fixed point numbers(定點數) | DECIMAL:用戶自定義精度定點數,比如 DECIMAL(7,2) |
| String types(字串) | STRING:指定字符集的字符序列;VARCHAR:具有最大長度限制的字符序列;CHAR:固定長度的字符序列 |
| Date and time types(日期時間型別) | TIMESTAMP:時間戳; |
| TIMESTAMP WITH LOCAL TIME ZONE:時間戳,納秒精度;DATE:日期型別 | |
| Binary types(二進制型別) | BINARY:位元組序列 |
- TIMESTAMP :提交的時間按照原始時間保存,查詢時,也不做任何轉換
- TIMESTAMP WITH LOCAL TIME ZONE:用戶提交TIMESTAMP給資料庫時,會被轉換成資料庫所在的時區來保存,查詢時,則按照查詢客戶端的不同,轉換為查詢客戶端所在時區的時間,
2.隱式轉換:子型別到祖先型別允許隱式轉換
- STRING型別可隱式轉換為DOUBLE型別

3.復雜型別
| 型別 | 描述 | 示例 |
|---|---|---|
| STRUCT | 類似于物件,欄位的集合,欄位的型別可以不同,可以使用名稱.欄位名方式進行訪問 | STRUCT(‘xiaoming’, 12 , ‘2018-12-12’) |
| MAP | 鍵值對的集合,可以使用名稱[key]的方式訪問對應的值 | map(‘a’, 1, ‘b’, 2) |
| ARRAY | 陣列是一組具有相同型別和名稱的變數的集合,可以使用名稱[index]訪問對應的值 | ARRAY(‘a’, ‘b’, ‘c’, ‘d’) |
CREATE TABLE students(
name STRING, -- 姓名
age INT, -- 年齡
subject ARRAY<STRING>, -- 學科
score MAP<STRING,FLOAT>, -- 各個學科考試成績
address STRUCT<houseNumber:int, street:STRING, city:STRING, province:STRING> -- 家庭居住地址
) ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t";
2.3.2資料模型
- 描述Hive組織、管理和操作資料的方式
- Hive資料存于HDFS,默認一個根目錄,在hive-site.xml配置資料的存盤路徑
1.庫 - 默認資料庫default
- 創建不同數倉庫database
- 相當于關系資料庫的命名空間,將用戶和資料庫的表隔離
2.表
-
表相關的元資料是存盤在關系資料庫
-
分內部表,外部表
1)加載資料和創建表:
- 內:程序分開,加載時資料被移動到數倉目錄,對資料的訪問在數倉目錄實作
- 外:是一個程序,訪問即讀取HDFS內資料
2)洗掉表: - 內:表內資料和元資料同步被洗掉(資料移到數倉目錄了)
- 外:資料在HDFS,洗掉表不影響資料
3)創建表: - 默認創建內部表
- External創建外部表
| 內容 | 內部表 | 外部表 |
|---|---|---|
| 資料存盤位置 | 內部表資料存盤的位置由hive.Metastore.warehouse.dir引數指定,默認情況下,表的資料存盤在HDFS的/user/hive/warehouse/資料庫名.db/表名/目錄下 | 外部表資料的存盤位置創建表時由Location引數指定 |
| 匯入資料 | 在匯入資料到內部表,內部表將資料移動到自己的資料倉庫目錄下,資料的生命周期由Hive來進行管理 | 外部表不會將資料移動到自己的資料倉庫目錄下,只是在元資料中存盤了資料的位置 |
| 洗掉表 | 洗掉元資料(metadata)和檔案 | 只洗掉元數 |
3.磁區:優化
- 減少全表掃描
- 存盤:表的主目錄檔案夾下的子檔案夾,子檔案夾的名字表示所定義的磁區列名字
4.分桶:拆分資料檔案本身
- 根據表中欄位(例如,編號ID)的值,經過hash計算規則,將資料檔案劃分成指定的若干個小檔案
- 優化join查詢和方便抽樣查詢,
2.4Hive系統結構
用戶介面模塊+驅動模型+元資料存盤模塊

2.4.1用戶介面模塊
- 實作外部應用對Hive的訪問
- 包括:CLI、Hive網頁介面(Hive Web Interface,HWI)、JDBC、ODBC、Thrift Server等
- 操作資料:
- CLI(command-line shell): Hive自帶的一個命令列客戶端工具
- HWI(Thrift/JDBC):Hive的一個簡單網頁,JDBC、ODBS和Thrift Server可以向用戶提供編程訪問的介面,用戶可以按照標準的JDBC的方式,通過Thrift協議操作資料,
2.4.2驅動模塊Driver
- 實作:MR,把 HiveQL陳述句轉換成一系列MapReduce作業,所有命令和查詢都會進入驅動模塊,通過該模塊對輸入進行決議編譯,對計算程序進行優化,然后按照指定的步驟執行,
- 包括:編譯器、優化器、執行器等
- 執行引擎:可以是 MapReduce、Tez或Spark等
2.4.3元資料存盤模塊Metastore
1.元資料:描述資料的資料
- 描述HDFS檔案和表的各種對應關系(位置關系、順序關系、分隔符)
- 存盤:在關系資料庫中(Hive內置的是Derby、第三方的是MySQL),HDFS中存盤的是資料
- 默認存盤在Hive內置的Derby資料庫中,但由于Derby只能有一個實體,也就是說不能有多個命令列客戶端同時訪問,所以在實際生產環境中,通常使用 MySQL代替Derby
2.Metastore
- Metastore是獨立的關系資料庫,可以是MySQL實體,也可是Hive自帶的Derby實體,提供元資料服務
- Metastore保存表模式和其他系統元資料
- 表的名稱
- 表的列及其屬
- 表的磁區及其屬性
- 表的屬性
- 表中資料所在位置資訊等
- Metastore對外提供一個服務地址,使客戶端能夠連接Hive,以此來對元資料進行訪問
- 元資料把資料保存在關系資料庫中,Hive提供元資料服務,通過對外的服務地址,用戶能夠使用客戶端連接Hive,訪問并操作元資料
- 支持多個客戶端的連接,實作了資料訪問層面的解耦操作
- Hive創建的表在presto/impala/sparksql中可直接使用(Metastore中獲取統一的元資料資訊)

3.Metastore管理元資料方式
-
內嵌:默認Metastore元資料服務和Hive服務融合在一起

- Hive服務(即Hive驅動本身)+ 元資料服務Metastore + 元資料metadata(用于存盤映射資訊)在一個JVM
- 啟動HiveServer行程,Derby和Metastore都會啟動
- 一次只能支持一個用戶訪問,適用于測驗場景
-
本地:把元資料提取出來

- Metastore服務與HiveServer主行程在同一個JVM行程中運行,存盤元資料的資料庫在單獨的行程中
- 元資料一般存盤在MySQL關系型資料庫
-
遠程:都單獨行程

- Metastore在單獨行程運行,保證全域唯一,保證資料訪問安全性(不隨hive啟動而動)
- 安裝在遠程服務器集群,解耦Hive服務和Metastore服務,保證Hive的穩定運行
2.4.4HQL的執行流程
- 語法決議:Antlr定義SQL的語法規則,完成SQL詞法,語法決議,將SQL轉化為抽象語法樹AST Tree;
- 語意決議:遍歷AST Tree,抽象出查詢的基本組成單元QueryBlock;
- 生成邏輯執行計劃:遍歷QueryBlock,翻譯為執行操作樹OperatorTree;
- 優化邏輯執行計劃:邏輯層優化器進行OperatorTree變換,合并不必要的ReduceSinkOperator,減少shuffle資料量;
- 生成物理執行計劃:遍歷OperatorTree,翻譯為MapReduce任務;
- 優化物理執行計劃:物理層優化器進行MapReduce任務的變換,生成最終的執行計劃,
2.5實戰應用
- Hive的安裝部署和管理
- Hive常用的DDL操作
3參考
- https://shenhao-stu.github.io/Big-Data/#/
- HiveQL編譯程序
- LanguageManual DDL
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/421423.html
標籤:其他
上一篇:時間輪分析
