寫在前面
早在1980年,未來學家阿爾文·托夫勒就在《第三次浪潮》中,將大數據比喻為“第三次浪潮的華彩樂章”。
21世紀以來,數據量進入每兩年翻一番的增長期,越來越多人意識到了數據的價值,數據架構師閃亮登場。數據成為企業不可忽視的重要資產。而數據架構師則是企業數據資產最重要的“奠基者”。
最早,數據架構師在IOE上工作;2009年,阿里雲最早提出“去IOE”的口號,初代數據架構師革了自己的命;2015年,這一年產生的數據量是人類過去歷史上所產生數據量的總和,從此進入了指數級增長階段。數據架構師也演化出了2個大方向(平台型數據架構師、數倉型數據架構師)。本文以作者親歷視角,主要分享數倉型數據架構師的“修煉大法”。歡迎辯證看待、留言交流~
作者介紹
天啟,奇點雲高級數據架構專家,原海爾集團數據架構師、原阿里巴巴政務團隊數據架構師。精通數據倉庫建模理論及數據開發技術,具備零售、政務、醫葯、制造等多個領域數倉和數據中台建設經驗。
一、你想成為哪種數據架構師
目前數據架構師有兩個大的方向:一,偏平台的架構師,對開源技術要求較高,企業一般會要求讀過開源技術源碼,或者參與過開源項目,偏平台的構建;二,偏數倉的架構師,對SQL能力要求較高,企業一般會要求掌握數倉理論,有數倉項目經驗。
(1)平台型數據架構師
這個方向也會分類:一,開源派,互聯網公司一般喜歡這個流派,二,商用軟件派,如Oracle、IBM等流派,通常解決傳統企業的數據問題。這個流派目前受到了來自阿里、騰訊和華為較大的沖擊。個人認為目前開源派是比較符合近年潮流趨勢的。
平台型數據架構師,是為數倉型數據架構師服務的,直白地說,你開發能力要很牛逼,你要懂應用。
(2)數倉型數據架構師
這個方向要求精通數據倉庫原理,通過實時、離線等技術解決企業的數據問題。需要掌握ELT的流程,掌握各種數據源的特點,掌握大數據工具的使用。
數倉型數據架構師,剛好是平台型數據架構師的用戶。直白地說,你寫SQL的能力要牛逼,你要懂業務。
二、數據架構師的必備知識樹
01、敲門磚:掌握一門開發語言
如果你是一位計算機專業的學生,我推薦使用C語言,強烈建議通過面向對象的編程思想去消化數據結構。數據架構中,很多邏輯和原理都來自於數據結構這門課程,如鏈表、隊列、堆棧、樹、圖等,掌握數據結構對后續進一步學習非常的重要。
如果你是想從其他崗位轉數據架構師,那么更建議學習Java,Java的入門會相對簡單。當然最好的方式是通過Java的編程思想領會數據結構這本書的知識點。一定要模擬B/C的整個過程,不要立馬就用Java的高級框架,而是要用Java原生的servlet模擬下前端和后端的交互,后端和數據庫的交互。
初學者看文章,常會遇到很多新概念,覺得看不懂,記不住。最好的學習方法是讓自己有興趣、有成就感。所以理論的內容我建議慢慢消化,反而實際操作很重要——實際操作能給自己帶來成就感。
比如你初學java,你第一個目標是要在屏幕上打出“Hello, world! ”。網上會有很多的資料,會教你安裝JDK、IDE工具等等,你可以先不管那么多,找個偏基礎的資料,按部就班的實現一次。在整個過程中你會遇到很多的問題,JDK在哪里下載,版本選哪一個,環境變量如何配置等等。最好的方式是邊查邊做,通過親手實踐來驗證整個過程,再去理解。最終成功地打印出“Hello, world! ”,你會有前所未有的成就感!
數據結構這門課程確實有些難度,同樣建議采用邊學理論邊實踐的方法,甚至我們可以更“暴力”,直接在網上找幾段別人寫好的代碼,跑一遍,看看效果,讀懂代碼,再回過來理解概念。這時候你會感覺就像近視眼戴上了眼鏡,突然發現很清晰。
你還需要了解開發語言的分類:什么是低級語言,什么是高級語言?什么是面向過程的編程,什么是面向對象的編程?什么是編譯型語言,什么是解釋型語言?可以不深入,但是作為一個架構師,你要了解這些東西。最好也要了解設計模型,如單例模式、工廠模式、生產者模式等常用設計模型,對思維方式有很好的提升。
開發語言是成為一名合格數據架構師的敲門磚。你可以選一本不錯的書,結合書籍一步一步走。自學時,知識檢索能力很重要,你要慢慢學會在浩瀚的互聯網學海中查找自己想要的知識。有條件的同學也可以報個靠譜的培訓班,這是個不錯的選擇,會少走很多彎路。但是速成后很多人只能做個碼農,最終要成為架構師級別的高手,還是需要扎實的基本功是必須的。需要很長的路才能成為架構師級別的編程高手。所以如果想有更高的成就,必須對概念、原理、技術。
02、基本功:掌握一種數據庫
對於數據架構師,必須要掌握一種數據庫,同時要了解常見的數據庫。
建議通過Oracle來學習數據庫,安裝系統時選擇Linux,也可以選CentOS。第一步你要模擬操作系統,也就會接觸到虛擬機的概念。簡單來說,也就是第一步模擬Linux系統,第二步再安裝數據庫。
為什么推薦Oracle數據庫?因為Oracle的安裝過程相對比較復雜,在過程中你會遇到各種各樣的問題,遇到的問題越多,學習的就越多。整個過程中你要學習Linux系統的各種命令、網絡、補丁包、防火牆等一系列問題,最后通過客戶端可以訪問數據庫了,可以查看數據了,就會很有成就感。如果領悟能力和動手能力很好,這個步驟一般需要一周左右的時間去消化。但這只是第一步,記得一定要多裝幾次來加深理解。
后面就要開始學習SQL語句了,建表、插入、更改、查詢,操作起來吧!理論也要跟上,“事務”的概念一定要看,數據庫、實例名、表空間、段、塊等概念要理解。
當然也要學習如何優化數據庫。數據庫底層無非是硬盤、內存、CPU在支撐,所以這些資源怎么分配很重要,在測試時一定要留意這三個重要參數的變化。操作系統層面的優化就是為了讓操作系統和數據庫軟件更好地結合,可以去調系統的參數。這是統一的優化思想,后面的應用系統、大數據等技術也適用。
數據庫層面的優化,也是一樣的道理,留意、調整參數,原則就是“集中有限的資源做更多重要的事”。
基於數據的優化,我建議盡可能少消耗計算機的性能:硬盤的讀寫、網絡的傳輸、數據的計算。如分表分區,索引等等都是為了用盡可能少的資源,盡可能快地完成盡可能多的事:就是提高效率。當然有的時候我們會犧牲時間換空間,也會犧牲空間換時間,所以對於優化,我們要綜合考慮成本和效率的問題。
SQL調優中,執行計划是必須要會看的,每個數據庫或者引擎都有自己的規則,我們優化過程中要了解SQL的執行邏輯,這樣我們才知道如何優化。
要了解哪些數據庫呢?關系型數據庫中Oracle、MySQL、SQLServer、DB2、PostgreSQL是要去了解的,同時了解行存儲和列存儲的區別,當然了解越多越好。Nosql數據庫的話,建議了解MongoDB、HBase、Redis。
其他數據庫還很多,通過項目和ELT過程來熟悉更多的架構吧!
03、必殺技:大數據技術
大數據解決了什么問題?其實答案很簡單:分布式存儲和分布式計算。
所以,學習大數據最好的方式就是搭建一套開源的Hadoop集群,在上面操作HDFS、hive、spark、HBase等各種組件。
搭建的過程和Oracle安裝過程非常類似,我們首先可以通過虛擬機模擬3-5個節點(服務器),在服務器上進行安裝。
安裝過程不再一一贅述,給大家一個實踐場景:
1、實踐場景
需求描述:從mysql數據庫把兩張表導入到hadoop,然后通過hive進行計算,結果數據同步回mysql數據庫。
可能遇到的問題:同步工具的選擇,數據加載方式,轉化方式,如何把整個流程串聯起來,怎么啟動這個流程。
(1)同步工具的選擇
待選的同步工具有Sqoop和DataX,Sqoop還是Hadoop開源的工具,DataX是阿里開源的工具,各有各的優勢,建議都可以學習了解。
(2)數據加載方式
hive的底層是HDFS,簡單說就是個文件,hive只是映射過去,通過類SQL語言實現計算。你可以直接通過hive接口(三種方式)建內部表。Sqoop和DataX都支持直接同步到hive中。
(3)轉化方式
這是模擬過程,hive不支持存儲、不支持update,所以可以進行兩張表數據聚合(left join、group by等)后數據插入到另一張表中,再把數據同步回mysql。
(4)流程如何串起來
建議可以通過Linux的shell腳本進行串聯,數據同步-數據轉化-數據導出。
(5)如何啟動流程
所有任務封裝到sh腳本里,可以利用Linux的crontab進行定時調度。
2、划下重點
為了更好應對大數據面試,最好能系統地學習一下HDFS、MapReduce、Hive、Spark、HBase、Yarn、Kafka、Zookeeper等一系列的大數據組件。
大數據面試中經常會問到的問題有哪些?
問題常常會包括HiveSQL技巧和調優:
Hive技巧:內部表和外部表、分區、分桶、窗口函數、UDF(UDAF、UDTF)、行轉列、列轉行等。
優化問題:數據熱點(數據傾斜問題)、參數優化、業務分表、sql優化。因為Hive底層是MapReduce操作HDFS,所以要了解Map和Reduce階段在做什么?數據傾斜問題是數據分布不均導致的,和MapReduce原理息息相關,了解了MapReduce,你就會優化Hive了。
Spark計算引擎和Hive底層不一樣,Spark學習你會遇到DAG圖,RDD、內存、Scala語言等知識,一樣地學習優化思路和技巧。
HBase是個列族數據庫,通過Key-value方式進行數據存儲,學習方式同上。
Yarn是資源管理器,CPU、內存資源都是它來管理的,平台架構師要深入學習,數倉架構師可以稍作了解。
Kafka是消息隊列,主要用於數據通道,進行數據緩沖和技術解耦使用。
Zookeeper是管理所有大數據組件的,因為hadoop生態圈組件都是動物名字命名的,所以Zookeeper就是動物管理員,依此進行命名的。
3、深入看看
其實大數據技術主要解決分布式計算和分布式存儲,簡單的說就是可以進行彈性擴展,存儲資源無限擴展,計算資源無限擴展。這樣就可以解決小型機和一體機無法解決的計算和存儲問題。
解決這兩個問題,我們需要一個操作系統來支持,這就是分布式操作系統。(這個核心思想最早是Google為了解決自己的問題提出來,后續apache 進行開源提出了HDFS。)
資源怎么協調引出了Yarn,消息隊列提出Kafka,離線計算Hive,內存計算Spark(不完全靠內存)、交互式查詢impala、多維分析kylin等等,因篇幅有限,每個類型只列舉一個。
04、必殺技2:數據倉庫
1、初步學習
初步接觸數據倉庫時,建議先看維度模型,了解什么是事實表,什么是維度表。做一張事實表,定義哪些是維度、哪些是度量,然后通過SQL進行查詢。
有了基本概念后,可以再學習深一些的內容,例如星型模型、雪花模型。
再進階,則可以學習維度建模:選擇業務過程-聲明粒度-確定維度-確定事實,如果能親身參與一個項目就更好了。
2、步入設計
首先要了解數據倉庫的分層、每一層做什么,為什么要分層?
然后,了解事實表的類型(事務、周期快照、累計快照)、維度表的類型(普通維度、緩慢變化維度)、總線矩陣、數據立方體(cube)等。
3、高階學習
維度建模實踐后,發現維度建模的不足,那么是時候可以開始研究其他建模了。建議通讀並理解Inmon大師的范式建模(數據倉庫之父Bill Inmon, Building the Data Warehouse)和Kimball大師的維度建模,兩者的建模各有優劣,可以取長補短。
4、解決業務問題
數據模型最終解決的是業務問題,目前常見的建模以維度建模為主,但是維度建模不停的在變化, Bill Inmon提出了datavault的建模思想,數據倉庫、數據平台、數據中台、數據湖等概念層出不窮。本質不變,目標還是解決實際的業務問題。
我個人建議,我們數據倉庫的規划可以自頂向下,采用Inmon的思想,開發和建模規范也要考慮全局,而在實施中可以采用維度建模,自底向上,采用Kimbal思想,落地快,迭代快。實際解決問題時不拘泥於一個模型,什么模型合適就用什么模型。
5、阿里的創新
阿里基於維度建模提出了公共模型層概念,一定程度上能解決數據共享和重復建設的問題,OneData的理念非常有研究價值。但在應用中我們需要注意,不要一味的用相同的場景做法去套不同行業,在實踐中需要辯證看待,按需去用。
6、模型標准
數據模型沒有好壞,只有用得對錯。判斷的標准也很簡單,有沒有解決業務問題?更高的要求是有沒有驅動業務的變革或者創新。大白話來說就是兩個問題:掙到錢了嗎?省下錢了嗎?
05、必殺技3:ELT技術
1、ELT概念
傳統的ETL (Extract-Transform-Load)是把T的部分放在中間的,在大數據環境下我們更願意把T放在后面,從ETL向ELT進行演變。原因也很簡單,這樣我們可以充分利用大數據環境T的能力。數據開發也平台化了,例如阿里的DataWorks、Dataphin,將數據同步、清洗轉化、任務調度集成在一起。
2、ELT技術注意哪些
E(Extract,抽取)和L(Load,裝載)的優化需要懂源頭和目標數據庫(數據倉庫)的特點,需要根據情況進行優化。T(Transform,轉化)部分要理解底層技術原理,進行優化。
ELT的注意點總結如下:(1)時效性必須在規定時間內跑完數據,跑出結果;(2)准確性數據計算結果必須准確;(3)容錯性ELT可以支持重跑、補數等功能;(4)前瞻性及時告警和預警功能,提前處理問題。
06、加分項:應用系統
一個應用系統是怎么誕生的?可以通過軟件工程這門課程學習,需求分析、概要設計、詳細設計、軟件開發、軟件測試、試運行、上線、運維、下線等整個過程。
一個應用系統一般會有前端、后端和數據庫,對於我們數據架構師,我們至少要知道,怎么開發一個系統,怎么保證一個系統的穩定。特別是“穩定”,我們要對高可用、負載均衡、安全有深刻的認識,需要考慮到應用(Tomat)、數據庫(MySQL)、其他中間件(緩存服務、文件服務等)。
- 高可用:系統一個節點發生故障后能進行無感切換,這個很重要。
- 負載均衡:使壓力均衡進行,它決定了系統的擴展性。
- 安全:磁盤陣列(raid0、raid1、raid5、raid10)、防火牆、授權、認證,及數據安全,防泄防篡、脫敏加密、防丟失等。
在做架構決策時,知道哪些操作可能會影響業務系統,才能設計更好的數據架構。
07、錦上添花:算法
DT時代已至,未來一定是“數據+AI”的天下。所以作為數據架構師,我們可以不會寫算法,但我們要了解且會使用算法。
這里的算法主要指機器學習算法,初學者可以理解下預測、分類(聚類)的概念(其實很多圖像和語音識別的算法也可以歸為預測和聚類算法中)。
可以用Python模擬最簡單的線性回歸,進階則研究邏輯回歸。
- 監督學習算法:支持向量機(Support Vector Machine,SVM)、決策樹、朴素貝葉斯分類、K-臨近算法(KNN);
- 非監督學習算法:K-均值聚類(K-Means) 。優點是算法簡單容易實現,缺點則是可能收斂到局部最小值,在大規模數據集上收斂較慢。可在圖像處理、數據分析以及市場研究等場景應用;
- 強化學習(深度)算法:如果不想轉職算法工程師,目前僅作了解即可。
最后分享算法開發的簡化版步驟:
- 數據准備(數據同步);
- 問題明確(明確分類還是回歸問題);
- 數據處理(合並、去重、異常剔除);
- 特征工程(訓練集,測試集、驗證集);
- 選擇合適的算法;
- 模型評估(若評估不合格,則考慮:①換算法;②調參數;③特征工程再進一步處理)。
三、總結:建立屬於自己的知識索引
其實,無論是什么崗位,自學能力都很重要。我們可以為自己建立一個知識目錄或知識索引,按照知識索引去查漏補缺,不斷豐富自己。
作為一名數據架構師,我們要懂點硬件、懂點網絡、懂點安全,了解應用,熟練掌握一門開發語言,深入理解一個數據庫,實操過大數據,精通數據倉庫技術(建模+ELT),有深度,有廣度。