第一章,大數(shù)據(jù)之路淺談
數(shù)倉&數(shù)據(jù)集市&數(shù)據(jù)湖
**數(shù)據(jù)倉庫**:英文名稱為Data Warehouse,可簡寫為DW或DWH。數(shù)據(jù)倉庫,是為企業(yè)所有級別的決策制定過程,提供所有類型數(shù)據(jù)支持的戰(zhàn)略集合。它是單個數(shù)據(jù)存儲,出于分析性報告和決策支持目的而創(chuàng)建。 為需要業(yè)務智能的企業(yè),提供指導業(yè)務流程改進、監(jiān)視時間、成本、質(zhì)量以及控制。
**數(shù)據(jù)倉庫**:一個面向主題的(Subject Oriented),集成的(Integrated),非易失的(Non-Volatilea),隨時間變化的(Time Variant),用來支持管理人員決策的數(shù)據(jù)集合
**數(shù)據(jù)湖&hub**:概念最初是由大數(shù)據(jù)廠商提出的,表面上看,數(shù)據(jù)都是承載在基于可向外擴展的HDFS廉價存儲硬件之上的。但數(shù)據(jù)量越大,越需要各種不同種類的存儲。最終,所有的企業(yè)數(shù)據(jù)都可以被認為是大數(shù)據(jù),但并不是所有的企業(yè)數(shù)據(jù)都是適合存放在廉價的HDFS集群之上的。
**數(shù)據(jù)集市(Data Mart)** :也叫數(shù)據(jù)市場,數(shù)據(jù)集市就是滿足特定的部門或者用戶的需求,按照多維的方式進行存儲,包括定義維度、需要計算的指標、維度的層次等,生成面向決策分析需求的數(shù)據(jù)立方體。
在業(yè)務快速發(fā)展的時候,一般一個業(yè)務模式或者場景對應一個數(shù)據(jù)集市,以支撐業(yè)務快速發(fā)展
例如:爬蟲集市、反爬蟲集市、搜索推薦集市、內(nèi)容營銷集市、風控集市、財務集市、營銷集市等等
數(shù)據(jù)模型
**本文所提到模型即是指由Hive將存儲在HDFS或者其他數(shù)據(jù)源上結(jié)構(gòu)化文件映射成為的“表”**
模型ETL頻率:
離線模型:T+1、T+2、周、月、季
準實時模型(rtf 模型):1min、5min、10min、30min、1hour
實時topic:實時消費、流式處理、實時接入、實時消費
模型存儲技術:
非分區(qū)模型:不存儲歷史數(shù)據(jù),只存儲數(shù)據(jù)最新狀態(tài)
全量模型:全量存儲數(shù)據(jù),超出一定時間未更新狀態(tài)數(shù)據(jù)存入History分區(qū),否則存入ACTIVE分區(qū),只記錄數(shù)據(jù)最新狀態(tài)
增量模型:增量存儲數(shù)據(jù),每日新增數(shù)據(jù)紀錄成快照并存入最新分區(qū)
拉鏈模型:拉鏈模型是一種數(shù)據(jù)處理和存儲的技術方式;通過比較,記錄數(shù)據(jù)的生命周期;能快速還原任意天的歷史快照,極大的節(jié)省了存儲。 顧名思義,所謂拉鏈,就是記錄歷史。記錄一個事物從開始,一直到當前狀態(tài)的所有變化的信息
模型數(shù)據(jù)分層:
分區(qū)模型:就是一種物理上的“索引”,將總數(shù)據(jù)按規(guī)則分裝到各個小區(qū)中并打上標簽,查詢指定標簽的數(shù)據(jù)時只用遍歷該小區(qū)的數(shù)據(jù)即可
桶模型: 對于每一個模型(table)或者分區(qū), Hive可以進一步組織成桶,也就是說桶是更為細粒度的數(shù)據(jù)范圍劃分。Hive也是針對某一列進行桶的組,筆者在日常開發(fā)中沒有使用過“分桶”技術
注意:
1. 而分區(qū)又會被分為靜態(tài)分區(qū)&動態(tài)分區(qū),在insert數(shù)據(jù)時會有區(qū)別,靜態(tài)分區(qū)insert數(shù)據(jù)時需要制定分區(qū),動態(tài)分區(qū)不需要制定?
如果分區(qū)是可以確定的話,千萬不要用動態(tài)分區(qū),動態(tài)分區(qū)相較與靜態(tài)分區(qū),效率會低一些。因為動態(tài)分區(qū)的值是在reduce運行階段確定的,也就是會把所有的記錄distribute by,而Distribute by 按指定字段,將數(shù)據(jù)劃分到不同的Reduce中,所以當數(shù)據(jù)大的時候,Reduce的數(shù)量直接影響著效率的高低。
2. insert數(shù)據(jù)時,可以將動態(tài)分區(qū)&靜態(tài)分區(qū)結(jié)合使用,結(jié)合方式為:主靜從動
3. 一般模型分區(qū)數(shù)量不應該超過2層,否則會因分區(qū)數(shù)過多而導致生成大量小文件(文件小于128M),影響集群效率
3.1 從Hive的角度看,小文件會開很多map,一個map開一個JVM去執(zhí)行,所以這些任務的初始化,啟動,執(zhí)行會浪費大量的資源,嚴重影響性能。
3.2 NameNode會在內(nèi)存中維護著文件系統(tǒng)樹及整棵樹內(nèi)所有的文件和目錄,也記錄著每個文件中各個塊所在的數(shù)據(jù)節(jié)點信息。在HDFS中,每個小文件對象約占150byte,如果小文件過多會占用大量內(nèi)存。這樣NameNode內(nèi)存容量嚴重制約了集群的擴展
模型架構(gòu)分層:
ADM:源數(shù)據(jù)層,與生產(chǎn)系統(tǒng)數(shù)據(jù)及結(jié)構(gòu)完全保持一致
BDM:拉鏈層,以ADM層為基礎,將數(shù)據(jù)轉(zhuǎn)換為拉鏈模型進行極限存儲
CDM:明細層,以BDM層或ADM層為基礎,拉取數(shù)據(jù)加工成星型模型或雪花模型
DDM:公共層,以CDM為基礎,所有的數(shù)據(jù)業(yè)務及技術口徑、TEL方式、數(shù)據(jù)場景聚合在此層實現(xiàn)統(tǒng)一
EDM:應用層,以DDM為基礎,面向不同的系統(tǒng)實現(xiàn)定制化開發(fā)
TMP:臨時數(shù)據(jù)層,基礎臨時模型或者中間模型
OPD:測試層,存儲測試待上線模型
NMV:維度層,為降低數(shù)據(jù)冗余,存儲一些枚舉值映射關系
模型主題域:
不同層的模型會按照特定的業(yè)務主體或者場景劃分出“”主題“”,以便用戶快速在茫茫模型海中找到目標模型,舉例說明
Z01:用戶
X02:搜索
C03:廣告
V04:流量
B05:交易
N06:訂單
M07:商品
L08:房產(chǎn)
K09:二手車
......
模型創(chuàng)建類型:
內(nèi)部模型(管理模型):未被external修飾的是內(nèi)部表,數(shù)據(jù)由hive自身管理。drop表時,hdfs上持久化存儲數(shù)據(jù)會被刪除
外部模型:數(shù)據(jù)由HDFS管理,drop表時,表的元數(shù)據(jù)信息會被刪除,持久化存儲數(shù)據(jù)還會在HDFS中未被刪除
模型存儲類型:
TEXTFILE:存儲方式為行存儲,默認存儲方式
SEQUENCEFILE:二進制文件,以<key,value>的形式序列化到文件中,行存儲,可分割可壓縮?
RCFILE:數(shù)據(jù)按行分塊 每塊按照列存儲,壓縮快,快速列存取
ORCFILE:數(shù)據(jù)按行分塊 每塊按照列存儲,壓縮快,快速列存取
PARQUET:列式存儲,可用于多種數(shù)據(jù)處理系統(tǒng)
模型壓縮算法:
GZIP
BZIP2
LZO
SNAPPY
筆者日常開發(fā)采用ORC格式對數(shù)據(jù)進行存儲,SNAPPY算法對數(shù)據(jù)進行壓縮,后期會分章節(jié)填上本篇挖的所有坑-。-
最后的最后,講講集群中幾個概念:隊列,節(jié)點,計算引擎
隊列:
保證不同等級數(shù)據(jù)計算任務及算法任務互相獨立享受資源,互不干擾互不影響,獨立劃分一片資源,列舉幾個集群中“”隊列“”實際應用場景
core :核心重點任務使用
formal:生產(chǎn)隊列,供生產(chǎn)任務使用
Spark:僅供Spark作業(yè)使用
Machine_learning:僅供算法作業(yè)使用
bu:僅供報表作業(yè)使用
presto:僅供Presto即席查詢使用
Hive:僅供Hive查詢使用
dev:僅供非核心作業(yè)使用
這塊再挖一個大坑,后幾期筆者會重點講一下在實際生產(chǎn)環(huán)境下同一集市不同隊列間資源分配策略
節(jié)點:
負責調(diào)度任務的客戶端,筆者Spark開發(fā)時采用Yarn提交作業(yè),Yarn會選擇集群任意一臺機器作為客戶端以供Driver進行作業(yè)調(diào)度
計算引擎:
Hive
Spark
Pig
Spark Streaming
Storm
MapReduce
這塊再挖一個大坑,筆者日?;径疾捎肧park引擎開發(fā),后續(xù)文章會重點講解每個計算引擎不同,優(yōu)勢與劣勢
回過頭看看自己職業(yè)經(jīng)歷,當初覺得自己太菜,17年剛來北京決定從事數(shù)據(jù)分析師這個崗位,面試了頭條、鏈家、58到家,每一家對數(shù)據(jù)分析側(cè)重點不一樣:
頭條重算法,上來手寫一些算法基本實現(xiàn)
鏈家重實現(xiàn),筆試里有較多題目設計業(yè)務場景具體分析,具體實現(xiàn)
58到家談業(yè)務,可能是由于面試業(yè)務部門導致
后來沒有去師傅推薦的58到家商業(yè)BI部門當一個數(shù)據(jù)分析師,輾轉(zhuǎn)反側(cè)來到沃斯,從事業(yè)務側(cè)數(shù)據(jù)分析師,最后異動至數(shù)據(jù)開發(fā),神奇的經(jīng)歷,因為自己的堅持,最終做到自己想干的事!
*人生苦短,我用Python,CCCCCold的大數(shù)據(jù)之禪*