1. 程式人生 > 其它 >大資料開發之資料倉庫Hive

大資料開發之資料倉庫Hive

1.資料倉庫的基本概念

資料倉庫,英文名稱為Data Warehouse,可簡寫為DW或DWH。資料倉庫的目的是構建面向分析的整合化資料環境,為企業提供決策支援(Decision Support)。它出於分析性報告和決策支援目的而建立。

資料倉庫本身並不“生產”任何資料,同​大資料培訓​時自身也不需要“消費”任何的資料,資料來源於外部,並且開放給外部應用,這也是為什麼叫“倉庫”,而不叫“工廠”的原因。

2.資料倉庫的主要特徵

資料倉庫是面向主題的(Subject-Oriented )、整合的(Integrated)、非易失的(Non-Volatile)和時變的(Time-Variant )資料集合,用以支援管理決策。

2.1.面向主題

傳統資料庫中,最大的特點是面向應用進行資料的組織,各個業務系統可能是相互分離的。而資料倉庫則是面向主題的。主題是一個抽象的概念,是較高層次上企業資訊系統中的資料綜合、歸類並進行分析利用的抽象。在邏輯意義上,它是對應企業中某一巨集觀分析領域所涉及的分析物件。

操作型處理(傳統資料)對資料的劃分並不適用於決策分析。而基於主題組織的資料則不同,它們被劃分為各自獨立的領域,每個領域有各自的邏輯內涵但互不交叉,在抽象層次上對資料進行完整、一致和準確的描述。一些主題相關的資料通常分佈在多個操作型系統中。

2.2. 整合性

通過對分散、獨立、異構的資料庫資料進行抽取、清理、轉換和彙總便得到了資料倉庫的資料,這樣保證了資料倉庫內的資料關於整個企業的一致性。

資料倉庫中的綜合資料不能從原有的資料庫系統直接得到。因此在資料進入資料倉庫之前,必然要經過統一與綜合,這一步是資料倉庫建設中最關鍵、最複雜的一步,所要完成的工作有:

(1)要統一源資料中所有矛盾之處,如欄位的同名異義、異名同義、單位不統一、字長不一致,等等。

(2)進行資料綜合和計算。資料倉庫中的資料綜合工作可以在從原有資料庫抽取資料時生成,但許多是在資料倉庫內部生成的,即進入資料倉庫以後進行綜合生成的。

下圖說明一個保險公司綜合資料的簡單處理過程,其中資料倉庫中與“保險” 主題有關的資料來自於多個不同的操作型系統。這些系統內部資料的命名可能不同,資料格式也可能不同。把不同來源的資料儲存到資料倉庫之前,需要去除這些不一致。

2.3. 非易失性(不可更新性)

操作型資料庫主要服務於日常的業務操作,使得資料庫需要不斷地對資料實時更新,以便迅速獲得當前最新資料,不至於影響正常的業務運作。在資料倉庫中只要儲存過去的業務資料,不需要每一筆業務都實時更新資料倉庫,而是根據商業需要每隔一段時間把一批較新的資料匯入資料倉庫。

資料倉庫的資料反映的是一段相當長的時間內歷史資料的內容,是不同時點的資料庫快照的集合,以及基於這些快照進行統計、綜合和重組的匯出資料。

資料非易失性主要是針對應用而言。資料倉庫的使用者對資料的操作大多是資料查詢或比較複雜的挖掘,一旦資料進入資料倉庫以後,一般情況下被較長時間保留。資料倉庫中一般有大量的查詢操作,但修改和刪除操作很少。因此,資料經加工和整合進入資料倉庫後是極少更新的,通常只需要定期的載入和更新。

2.4. 時變性

資料倉庫包含各種粒度的歷史資料。資料倉庫中的資料可能與某個特定日期、星期、月份、季度或者年份有關。資料倉庫的目的是通過分析企業過去一段時間業務的經營狀況,挖掘其中隱藏的模式。雖然資料倉庫的使用者不能修改資料,但並不是說資料倉庫的資料是永遠不變的。分析的結果只能反映過去的情況,當業務變化後,挖掘出的模式會失去時效性。因此資料倉庫的資料需要更新,以適應決策的需要。從這個角度講,資料倉庫建設是一個專案,更是一個過程 。資料倉庫的資料隨時間的變化表現在以下幾個方面。

(1)資料倉庫的資料時限一般要遠遠長於操作型資料的資料時限。

(2)操作型系統儲存的是當前資料,而資料倉庫中的資料是歷史資料。

(3)資料倉庫中的資料是按照時間順序追加的,它們都帶有時間屬性。

3.資料倉庫與資料庫區別

資料庫與資料倉庫的區別實際講的是 OLTP 與 OLAP 的區別。

操作型處理,叫聯機事務處理 OLTP(On-Line Transaction Processing,),也可以稱面向交易的處理系統,它是針對具體業務在資料庫聯機的日常操作,通常對少數記錄進行查詢、修改。使用者較為關心操作的響應時間、資料的安全性、完整性和併發支援的使用者數等問題。傳統的資料庫系統作為資料管理的主要手段,主要用於操作型處理。

分析型處理,叫聯機分析處理 OLAP(On-Line Analytical Processing)一般針對某些主題的歷史資料進行分析,支援管理決策。

首先要明白,資料倉庫的出現,並不是要取代資料庫。

  • 資料庫是面向事務的設計,資料倉庫是面向主題設計的。
  • 資料庫一般儲存業務資料,資料倉庫儲存的一般是歷史資料。
  • 資料庫設計是儘量避免冗餘,一般針對某一業務應用進行設計,比如一張簡單的User表,記錄使用者名稱、密碼等簡單資料即可,符合業務應用,但是不符合分析。
  • 資料倉庫在設計是有意引入冗餘,依照分析需求,分析維度、分析指標進行設計。
  • 資料庫是為捕獲資料而設計,資料倉庫是為分析資料而設計。

以銀行業務為例。資料庫是事務系統的資料平臺,客戶在銀行做的每筆交易都會寫入資料庫,被記錄下來,這裡,可以簡單地理解為用資料庫記賬。資料倉庫是分析系統的資料平臺,它從事務系統獲取資料,並做彙總、加工,為決策者提供決策的依據。比如,某銀行某分行一個月發生多少交易,該分行當前存款餘額是多少。如果存款又多,消費交易又多,那麼該地區就有必要設立ATM了。

顯然,銀行的交易量是巨大的,通常以百萬甚至千萬次來計算。事務系統是實時的,這就要求時效性,客戶存一筆錢需要幾十秒是無法忍受的,這就要求資料庫只能儲存很短一段時間的資料。而分析系統是事後的,它要提供關注時間段內所有的有效資料。這些資料是海量的,彙總計算起來也要慢一些,但是,只要能夠提供有效的分析資料就達到目的了。

資料倉庫,是在資料庫已經大量存在的情況下,為了進一步挖掘資料資源、為了決策需要而產生的,它決不是所謂的“大型資料庫”。

4、資料倉庫分層架構

按照資料流入流出的過程,資料倉庫架構可分為三層——源資料、資料倉庫、資料應用。

資料倉庫的資料來源於不同的源資料,並提供多樣的資料應用,資料自下而上流入資料倉庫後向上層開放應用,而資料倉庫只是中間整合化資料管理的一個平臺。

源資料層(ODS):此層資料無任何更改,直接沿用外圍系統資料結構和資料,不對外開放;為臨時儲存層,是介面資料的臨時儲存區域,為後一步的資料處理做準備。

資料倉庫層(DW):也稱為細節層,DW層的資料應該是一致的、準確的、乾淨的資料,即對源系統資料進行了清洗(去除了雜質)後的資料。

資料應用層(DA或APP):前端應用直接讀取的資料來源;根據報表、專題分析需求而計算生成的資料。

資料倉庫從各資料來源獲取資料及在資料倉庫內的資料轉換和流動都可以認為是ETL(抽取Extra, 轉化Transfer, 裝載Load)的過程,ETL是資料倉庫的流水線,也可以認為是資料倉庫的血液,它維繫著資料倉庫中資料的新陳代謝,而資料倉庫日常的管理和維護工作的大部分精力就是保持ETL的正常和穩定。

為什麼要對資料倉庫分層?

用空間換時間,通過大量的預處理來提升應用系統的使用者體驗(效率),因此資料倉庫會存在大量冗餘的資料;不分層的話,如果源業務系統的業務規則發生變化將會影響整個資料清洗過程,工作量巨大。

通過資料分層管理可以簡化資料清洗的過程,因為把原來一步的工作分到了多個步驟去完成,相當於把一個複雜的工作拆成了多個簡單的工作,把一個大的黑盒變成了一個白盒,每一層的處理邏輯都相對簡單和容易理解,這樣我們比較容易保證每一個步驟的正確性,當資料發生錯誤的時候,往往我們只需要區域性調整某個步驟即可。

5、資料倉庫元資料管理

元資料(Meta Date),主要記錄資料倉庫中模型的定義、各層級間的對映關係、監控資料倉庫的資料狀態及ETL的任務執行狀態。一般會通過元資料資料庫(Metadata Repository)來統一地儲存和管理元資料,其主要目的是使資料倉庫的設計、部署、操作和管理能達成協同和一致。

元資料是資料倉庫管理系統的重要組成部分,元資料管理是企業級資料倉庫中的關鍵元件,貫穿資料倉庫構建的整個過程,直接影響著資料倉庫的構建、使用和維護。

l 構建資料倉庫的主要步驟之一是ETL。這時元資料將發揮重要的作用,它定義了源資料系統到資料倉庫的對映、資料轉換的規則、資料倉庫的邏輯結構、資料更新的規則、資料匯入歷史記錄以及裝載週期等相關內容。資料抽取和轉換的專家以及資料倉庫管理員正是通過元資料高效地構建資料倉庫。

l 使用者在使用資料倉庫時,通過元資料訪問資料,明確資料項的含義以及定製報表。

l 資料倉庫的規模及其複雜性離不開正確的元資料管理,包括增加或移除外部資料來源,改變資料清洗方法,控制出錯的查詢以及安排備份等。

元資料可分為技術元資料和業務元資料。技術元資料為開發和管理資料倉庫的IT 人員使用,它描述了與資料倉庫開發、管理和維護相關的資料,包括資料來源資訊、資料轉換描述、資料倉庫模型、資料清洗與更新規則、資料對映和訪問許可權等。而業務元資料為管理層和業務分析人員服務,從業務角度描述資料,包括商務術語、資料倉庫中有什麼資料、資料的位置和資料的可用性等,幫助業務人員更好地理解資料倉庫中哪些資料是可用的以及如何使用。

由上可見,元資料不僅定義了資料倉庫中資料的模式、來源、抽取和轉換規則等,而且是整個資料倉庫系統執行的基礎,元資料把資料倉庫系統中各個鬆散的元件聯絡起來,組成了一個有機的整體。

Hive簡介

1.什麼是Hive

Hive是基於Hadoop的一個數據倉庫工具,可以將結構化的資料檔案對映為一張資料庫表,並提供類SQL查詢功能。

其本質是將SQL轉換為MapReduce的任務進行運算,底層由HDFS來提供資料的儲存,說白了hive可以理解為一個將SQL轉換為MapReduce的任務的工具,甚至更進一步可以說hive就是一個MapReduce的客戶端

為什麼使用Hive

直接使用hadoop所面臨的問題

人員學習成本太高

專案週期要求太短

MapReduce實現複雜查詢邏輯開發難度太大

為什麼要使用Hive

操作介面採用類SQL語法,提供快速開發的能力。

避免了去寫MapReduce,減少開發人員的學習成本。

功能擴充套件很方便。

Hive的特點

可擴充套件

Hive可以自由的擴充套件叢集的規模,一般情況下不需要重啟服務。

延展性

Hive支援使用者自定義函式,使用者可以根據自己的需求來實現自己的函式。

容錯

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

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 呼叫執行。

3.Hive與Hadoop的關係

Hive利用HDFS儲存資料,利用MapReduce查詢分析資料

4.Hive與傳統資料庫對比hive用於海量資料的離線資料分析

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

5.Hive的資料儲存

Hive中所有的資料都儲存在 HDFS中,沒有專門的資料儲存格式(可Text,SequenceFile,ParquetFile,ORC格式RCFILE等)SequenceFile是hadoop中的一種檔案格式:檔案內容是以序列化的kv物件來組織的

只需要在建立表的時候告訴 Hive 資料中的列分隔符和行分隔符,Hive 就可以解析資料。

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雜湊之後的多個檔案