如何成為一個合格的資料架構師?

StartDT發表於2020-06-24

寫在前面

早在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) 。優點是演算法簡單容易實現,缺點則是可能收斂到區域性最小值,在大規模資料集上收斂較慢。可在影像處理、資料分析以及市場研究等場景應用;
  • 強化學習(深度)演算法:如果不想轉職演算法工程師,目前僅作了解即可。

最後分享演算法開發的簡化版步驟:

  1. 資料準備(資料同步);
  2. 問題明確(明確分類還是迴歸問題);
  3. 資料處理(合併、去重、異常剔除);
  4. 特徵工程(訓練集,測試集、驗證集);
  5. 選擇合適的演算法;
  6. 模型評估(若評估不合格,則考慮:①換演算法;②調引數;③特徵工程再進一步處理)。

三、總結:建立屬於自己的知識索引

其實,無論是什麼崗位,自學能力都很重要。我們可以為自己建立一個知識目錄或知識索引,按照知識索引去查漏補缺,不斷豐富自己。

作為一名資料架構師,我們要懂點硬體、懂點網路、懂點安全,瞭解應用,熟練掌握一門開發語言,深入理解一個資料庫,實操過大資料,精通資料倉儲技術(建模+ELT),有深度,有廣度。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69911376/viewspace-2700503/,如需轉載,請註明出處,否則將追究法律責任。

相關文章