如何成為一個合格的數(shù)據(jù)架構師?

1 評論 6485 瀏覽 26 收藏 23 分鐘

數(shù)據(jù)架構師在互聯(lián)網行業(yè)中是個很重要的職位,是企業(yè)數(shù)據(jù)資產最重要的“奠基者”。那么,如何成為一個合格的數(shù)據(jù)架構師呢?本文作者基于自身經歷,從三個方面展開介紹,推薦給對數(shù)據(jù)架構師感興趣的童鞋閱讀。


早在1980年,未來學家阿爾文·托夫勒就在《第三次浪潮》中,將大數(shù)據(jù)比喻為“第三次浪潮的華彩樂章”。

21世紀以來,數(shù)據(jù)量進入每兩年翻一番的增長期,越來越多人意識到了數(shù)據(jù)的價值,數(shù)據(jù)架構師閃亮登場,數(shù)據(jù)成為企業(yè)不可忽視的重要資產,而數(shù)據(jù)架構師則是企業(yè)數(shù)據(jù)資產最重要的“奠基者”。

最早,數(shù)據(jù)架構師在IOE上工作;2009年,阿里云最早提出“去IOE”的口號,初代數(shù)據(jù)架構師革了自己的命;2015年,這一年產生的數(shù)據(jù)量是人類過去歷史上所產生數(shù)據(jù)量的總和,從此進入了指數(shù)級增長階段。

數(shù)據(jù)架構師也演化出了2個大方向(平臺型數(shù)據(jù)架構師、數(shù)倉型數(shù)據(jù)架構師)。

一、你想成為哪種數(shù)據(jù)架構師

目前數(shù)據(jù)架構師有兩個大的方向:

  1. 偏平臺的架構師,對開源技術要求較高,企業(yè)一般會要求讀過開源技術源碼,或者參與過開源項目,偏平臺的構建;
  2. 偏數(shù)倉的架構師,對SQL能力要求較高,企業(yè)一般會要求掌握數(shù)倉理論,有數(shù)倉項目經驗。

平臺型數(shù)據(jù)架構師這個方向也會分類:

  • 開源派,互聯(lián)網公司一般喜歡這個流派;
  • 商用軟件派,如Oracle、IBM等流派,通常解決傳統(tǒng)企業(yè)的數(shù)據(jù)問題,這個流派目前受到了來自阿里、騰訊和華為較大的沖擊。

個人認為目前開源派是比較符合近年潮流趨勢的,平臺型數(shù)據(jù)架構師,是為數(shù)倉型數(shù)據(jù)架構師服務的。直白地說,你開發(fā)能力要很牛逼,你要懂應用。

數(shù)倉型數(shù)據(jù)架構師這個方向要求精通數(shù)據(jù)倉庫原理,通過實時、離線等技術解決企業(yè)的數(shù)據(jù)問題。需要掌握ELT的流程,掌握各種數(shù)據(jù)源的特點,掌握大數(shù)據(jù)工具的使用。

數(shù)倉型數(shù)據(jù)架構師,剛好是平臺型數(shù)據(jù)架構師的用戶。直白地說,你寫SQL的能力要牛逼,你要懂業(yè)務。

二、數(shù)據(jù)架構師的必備知識樹

1. 敲門磚

掌握一門開發(fā)語言。如果你是一位計算機專業(yè)的學生,我推薦使用C語言,強烈建議通過面向對象的編程思想去消化數(shù)據(jù)結構。

數(shù)據(jù)架構中,很多邏輯和原理都來自于數(shù)據(jù)結構這門課程,如鏈表、隊列、堆棧、樹、圖等,掌握數(shù)據(jù)結構對后續(xù)進一步學習非常的重要。如果你是想從其他崗位轉數(shù)據(jù)架構師,那么更建議學習Java,Java的入門會相對簡單。當然最好的方式是通過Java的編程思想領會數(shù)據(jù)結構這本書的知識點。

一定要模擬B/C的整個過程,不要立馬就用Java的高級框架,而是要用Java原生的servlet模擬下前端和后端的交互,后端和數(shù)據(jù)庫的交互。

初學者看文章,常會遇到很多新概念,覺得看不懂,記不住。最好的學習方法是讓自己有興趣、有成就感。所以理論的內容我建議慢慢消化,反而實際操作很重要——實際操作能給自己帶來成就感。

比如你初學java,你第一個目標是要在屏幕上打出“Hello, world! ”。網上會有很多的資料,會教你安裝JDK、IDE工具等等,你可以先不管那么多,找個偏基礎的資料,按部就班地實現(xiàn)一次。

在整個過程中你會遇到很多的問題,JDK在哪里下載,版本選哪一個,環(huán)境變量如何配置等等。最好的方式是邊查邊做,通過親手實踐來驗證整個過程,再去理解。最終成功地打印出“Hello, world! ”,你會有前所未有的成就感!

數(shù)據(jù)結構這門課程確實有些難度,同樣建議采用邊學理論邊實踐的方法,甚至我們可以更“暴力”,直接在網上找?guī)锥蝿e人寫好的代碼,跑一遍,看看效果,讀懂代碼,再回過來理解概念。這時候你會感覺就像近視眼戴上了眼鏡,突然發(fā)現(xiàn)很清晰。

你還需要了解開發(fā)語言的分類:什么是低級語言,什么是高級語言?什么是面向過程的編程,什么是面向對象的編程?什么是編譯型語言,什么是解釋型語言?可以不深入,但是作為一個架構師,你要了解這些東西。最好也要了解設計模型,如單例模式、工廠模式、生產者模式等常用設計模型,對思維方式有很好的提升。

開發(fā)語言是成為一名合格數(shù)據(jù)架構師的敲門磚,你可以選一本不錯的書,結合書籍一步一步走。自學時,知識檢索能力很重要,你要慢慢學會在浩瀚的互聯(lián)網學海中查找自己想要的知識。

有條件的同學也可以報個靠譜的培訓班,這是個不錯的選擇,會少走很多彎路。但是速成后很多人只能做個碼農,最終要成為架構師級別的高手,還是需要扎實的基本功是必須,需要很長的路才能成為架構師級別的編程高手。所以如果想有更高的成就,必須對概念、原理、技術有了解。

2. 基本功:掌握一種數(shù)據(jù)庫

對于數(shù)據(jù)架構師,必須要掌握一種數(shù)據(jù)庫,同時要了解常見的數(shù)據(jù)庫。建議通過Oracle來學習數(shù)據(jù)庫,安裝系統(tǒng)時選擇Linux,也可以選CentOS。

第一步你要模擬操作系統(tǒng),也就會接觸到虛擬機的概念。簡單來說,也就是第一步模擬Linux系統(tǒng),第二步再安裝數(shù)據(jù)庫。為什么推薦Oracle數(shù)據(jù)庫?因為Oracle的安裝過程相對比較復雜,在過程中你會遇到各種各樣的問題,遇到的問題越多,學習的就越多。整個過程中你要學習Linux系統(tǒng)的各種命令、網絡、補丁包、防火墻等一系列問題,最后通過客戶端可以訪問數(shù)據(jù)庫了,可以查看數(shù)據(jù)了,就會很有成就感。

如果領悟能力和動手能力很好,這個步驟一般需要一周左右的時間去消化。但這只是第一步,記得一定要多裝幾次來加深理解。后面就要開始學習SQL語句了,建表、插入、更改、查詢,操作起來吧!理論也要跟上,“事務”的概念一定要看,數(shù)據(jù)庫、實例名、表空間、段、塊等概念要理解,當然也要學習如何優(yōu)化數(shù)據(jù)庫。

數(shù)據(jù)庫底層無非是硬盤、內存、CPU在支撐,所以這些資源怎么分配很重要,在測試時一定要留意這三個重要參數(shù)的變化。操作系統(tǒng)層面的優(yōu)化就是為了讓操作系統(tǒng)和數(shù)據(jù)庫軟件更好地結合,可以去調系統(tǒng)的參數(shù)。

這是統(tǒng)一的優(yōu)化思想,后面的應用系統(tǒng)、大數(shù)據(jù)等技術也適用。數(shù)據(jù)庫層面的優(yōu)化,也是一樣的道理,留意、調整參數(shù),原則就是“集中有限的資源做更多重要的事”?;跀?shù)據(jù)的優(yōu)化,我建議盡可能少消耗計算機的性能:硬盤的讀寫、網絡的傳輸、數(shù)據(jù)的計算。如分表分區(qū),索引等等都是為了用盡可能少的資源,盡可能快地完成盡可能多的事:就是提高效率。

當然有的時候我們會犧牲時間換空間,也會犧牲空間換時間,所以對于優(yōu)化,我們要綜合考慮成本和效率的問題。

SQL調優(yōu)中,執(zhí)行計劃是必須要會看的,每個數(shù)據(jù)庫或者引擎都有自己的規(guī)則,我們優(yōu)化過程中要了解SQL的執(zhí)行邏輯,這樣我們才知道如何優(yōu)化。

要了解哪些數(shù)據(jù)庫呢?關系型數(shù)據(jù)庫中Oracle、MySQL、SQLServer、DB2、PostgreSQL是要去了解的,同時了解行存儲和列存儲的區(qū)別,當然了解越多越好。Nosql數(shù)據(jù)庫的話,建議了解MongoDB、HBase、Redis。其他數(shù)據(jù)庫還很多,通過項目和ELT過程來熟悉更多的架構吧!

3. 必殺技:大數(shù)據(jù)技術

大數(shù)據(jù)解決了什么問題?其實答案很簡單:分布式存儲和分布式計算。

所以,學習大數(shù)據(jù)最好的方式就是搭建一套開源的Hadoop集群,在上面操作HDFS、hive、spark、HBase等各種組件。搭建的過程和Oracle安裝過程非常類似,我們首先可以通過虛擬機模擬3-5個節(jié)點(服務器),在服務器上進行安裝。

安裝過程不再一一贅述,給大家一個實踐場景:

1)實踐場景

需求描述:從mysql數(shù)據(jù)庫把兩張表導入到hadoop,然后通過hive進行計算,結果數(shù)據(jù)同步回mysql數(shù)據(jù)庫??赡苡龅降膯栴}:同步工具的選擇,數(shù)據(jù)加載方式,轉化方式。

如何把整個流程串聯(lián)起來,怎么啟動這個流程?

  1. 同步工具的選擇待選的同步工具有Sqoop和DataX,Sqoop還是Hadoop開源的工具,DataX是阿里開源的工具,各有各的優(yōu)勢,建議都可以學習了解。
  2. 數(shù)據(jù)加載方式hive的底層是HDFS,簡單說就是個文件,hive只是映射過去,通過類SQL語言實現(xiàn)計算。你可以直接通過hive接口(三種方式)建內部表。Sqoop和DataX都支持直接同步到hive中。
  3. 轉化方式這是模擬過程,hive不支持存儲、不支持update,所以可以進行兩張表數(shù)據(jù)聚合(left join、group by等)后數(shù)據(jù)插入到另一張表中,再把數(shù)據(jù)同步回mysql。
  4. 流程如何串起來建議可以通過Linux的shell腳本進行串聯(lián),數(shù)據(jù)同步-數(shù)據(jù)轉化-數(shù)據(jù)導出。
  5. 如何啟動流程所有任務封裝到sh腳本里,可以利用Linux的crontab進行定時調度。

2)劃下重點

為了更好應對大數(shù)據(jù)面試,最好能系統(tǒng)地學習一下HDFS、MapReduce、Hive、Spark、HBase、Yarn、Kafka、Zookeeper等一系列的大數(shù)據(jù)組件。

大數(shù)據(jù)面試中經常會問到的問題有哪些?問題常常會包括HiveSQL技巧和調優(yōu):Hive技巧:內部表和外部表、分區(qū)、分桶、窗口函數(shù)、UDF(UDAF、UDTF)、行轉列、列轉行等。

優(yōu)化問題:數(shù)據(jù)熱點(數(shù)據(jù)傾斜問題)、參數(shù)優(yōu)化、業(yè)務分表、sql優(yōu)化。因為Hive底層是MapReduce操作HDFS,所以要了解Map和Reduce階段在做什么?

數(shù)據(jù)傾斜問題是數(shù)據(jù)分布不均導致的,和MapReduce原理息息相關,了解了MapReduce,你就會優(yōu)化Hive了。

Spark計算引擎和Hive底層不一樣,Spark學習你會遇到DAG圖,RDD、內存、Scala語言等知識,一樣地學習優(yōu)化思路和技巧。

HBase是個列族數(shù)據(jù)庫,通過Key-value方式進行數(shù)據(jù)存儲,學習方式同上。

Yarn是資源管理器,CPU、內存資源都是它來管理的,平臺架構師要深入學習,數(shù)倉架構師可以稍作了解。

Kafka是消息隊列,主要用于數(shù)據(jù)通道,進行數(shù)據(jù)緩沖和技術解耦使用。

Zookeeper是管理所有大數(shù)據(jù)組件的,因為hadoop生態(tài)圈組件都是動物名字命名的,所以Zookeeper就是動物管理員,依此進行命名的。

3)深入看看

其實大數(shù)據(jù)技術主要解決分布式計算和分布式存儲,簡單的說就是可以進行彈性擴展,存儲資源無限擴展,計算資源無限擴展。

這樣就可以解決小型機和一體機無法解決的計算和存儲問題。解決這兩個問題,我們需要一個操作系統(tǒng)來支持,這就是分布式操作系統(tǒng)(這個核心思想最早是Google為了解決自己的問題提出來,后續(xù)apache 進行開源提出了HDFS)。

資源怎么協(xié)調引出了Yarn,消息隊列提出Kafka,離線計算Hive,內存計算Spark(不完全靠內存)、交互式查詢impala、多維分析kylin等等。因篇幅有限,每個類型只列舉一個。

4. 必殺技2:數(shù)據(jù)倉庫

1)初步學習

初步接觸數(shù)據(jù)倉庫時,建議先看維度模型,了解什么是事實表,什么是維度表。做一張事實表,定義哪些是維度、哪些是度量,然后通過SQL進行查詢。

有了基本概念后,可以再學習深一些的內容,例如星型模型、雪花模型。

再進階,則可以學習維度建模:選擇業(yè)務過程-聲明粒度-確定維度-確定事實,如果能親身參與一個項目就更好了。

2)步入設計

首先要了解數(shù)據(jù)倉庫的分層、每一層做什么,為什么要分層?然后,了解事實表的類型(事務、周期快照、累計快照)、維度表的類型(普通維度、緩慢變化維度)、總線矩陣、數(shù)據(jù)立方體(cube)等。

3)高階學習

維度建模實踐后,發(fā)現(xiàn)維度建模的不足,那么是時候可以開始研究其他建模了。建議通讀并理解Inmon大師的范式建模(數(shù)據(jù)倉庫之父Bill Inmon, Building the Data Warehouse)和Kimball大師的維度建模,兩者的建模各有優(yōu)劣,可以取長補短。

4)解決業(yè)務問題

數(shù)據(jù)模型最終解決的是業(yè)務問題,目前常見的建模以維度建模為主。但是維度建模不停的在變化, Bill Inmon提出了datavault的建模思想,數(shù)據(jù)倉庫、數(shù)據(jù)平臺、數(shù)據(jù)中臺、數(shù)據(jù)湖等概念層出不窮。

本質不變,目標還是解決實際的業(yè)務問題。

我個人建議,我們數(shù)據(jù)倉庫的規(guī)劃可以自頂向下,采用Inmon的思想,開發(fā)和建模規(guī)范也要考慮全局,而在實施中可以采用維度建模,自底向上,采用Kimbal思想,落地快,迭代快。

實際解決問題時不拘泥于一個模型,什么模型合適就用什么模型。

5)阿里的創(chuàng)新

阿里基于維度建模提出了公共模型層概念,一定程度上能解決數(shù)據(jù)共享和重復建設的問題,OneData的理念非常有研究價值。但在應用中我們需要注意,不要一味的用相同的場景做法去套不同行業(yè),在實踐中需要辯證看待,按需去用。

6)模型標準

數(shù)據(jù)模型沒有好壞,只有用得對錯。判斷的標準也很簡單,有沒有解決業(yè)務問題?更高的要求是有沒有驅動業(yè)務的變革或者創(chuàng)新。大白話來說就是兩個問題:掙到錢了嗎?省下錢了嗎?

5. 必殺技3:ELT技術1、ELT概念

傳統(tǒng)的ETL (Extract-Transform-Load)是把T的部分放在中間的,在大數(shù)據(jù)環(huán)境下我們更愿意把T放在后面,從ETL向ELT進行演變。原因也很簡單,這樣我們可以充分利用大數(shù)據(jù)環(huán)境T的能力。數(shù)據(jù)開發(fā)也平臺化了,例如阿里的DataWorks、Dataphin,將數(shù)據(jù)同步、清洗轉化、任務調度集成在一起。

ELT技術注意哪些?

E(Extract,抽?。┖蚅(Load,裝載)的優(yōu)化需要懂源頭和目標數(shù)據(jù)庫(數(shù)據(jù)倉庫)的特點,需要根據(jù)情況進行優(yōu)化。

T(Transform,轉化)部分要理解底層技術原理,進行優(yōu)化。

ELT的注意點總結如下:

  • 時效性必須在規(guī)定時間內跑完數(shù)據(jù),跑出結果;
  • 準確性數(shù)據(jù)計算結果必須準確;
  • 容錯性ELT可以支持重跑、補數(shù)等功能;
  • 前瞻性及時告警和預警功能,提前處理問題。

6. 加分項:應用系統(tǒng)

一個應用系統(tǒng)是怎么誕生的?

可以通過軟件工程這門課程學習,需求分析、概要設計、詳細設計、軟件開發(fā)、軟件測試、試運行、上線、運維、下線等整個過程。

一個應用系統(tǒng)一般會有前端、后端和數(shù)據(jù)庫,對于我們數(shù)據(jù)架構師,我們至少要知道,怎么開發(fā)一個系統(tǒng),怎么保證一個系統(tǒng)的穩(wěn)定。特別是“穩(wěn)定”,我們要對高可用、負載均衡、安全有深刻的認識,需要考慮到應用(Tomat)、數(shù)據(jù)庫(MySQL)、其他中間件(緩存服務、文件服務等)。

高可用:系統(tǒng)一個節(jié)點發(fā)生故障后能進行無感切換,這個很重要。

負載均衡:使壓力均衡進行,它決定了系統(tǒng)的擴展性。

安全:磁盤陣列(raid0、raid1、raid5、raid10)、防火墻、授權、認證,及數(shù)據(jù)安全,防泄防篡、脫敏加密、防丟失等。在做架構決策時,知道哪些操作可能會影響業(yè)務系統(tǒng),才能設計更好的數(shù)據(jù)架構。

7. 錦上添花:算法

DT時代已至,未來一定是“數(shù)據(jù)+AI”的天下。所以作為數(shù)據(jù)架構師,我們可以不會寫算法,但我們要了解且會使用算法。

這里的算法主要指機器學習算法,初學者可以理解下預測、分類(聚類)的概念(其實很多圖像和語音識別的算法也可以歸為預測和聚類算法中)。可以用Python模擬最簡單的線性回歸,進階則研究邏輯回歸。

  • 監(jiān)督學習算法:支持向量機(Support Vector Machine,SVM)、決策樹、樸素貝葉斯分類、K-臨近算法(KNN);
  • 非監(jiān)督學習算法:K-均值聚類(K-Means)?。優(yōu)點是算法簡單容易實現(xiàn),缺點則是可能收斂到局部最小值,在大規(guī)模數(shù)據(jù)集上收斂較慢??稍趫D像處理、數(shù)據(jù)分析以及市場研究等場景應用;
  • 強化學習(深度)算法:如果不想轉職算法工程師,目前僅作了解即可。

最后分享算法開發(fā)的簡化版步驟:

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

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

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

作為一名數(shù)據(jù)架構師,我們要懂點硬件、懂點網絡、懂點安全,了解應用,熟練掌握一門開發(fā)語言,深入理解一個數(shù)據(jù)庫,實操過大數(shù)據(jù),精通數(shù)據(jù)倉庫技術(建模+ELT),有深度,有廣度。

 

本文由 @奇點云 原創(chuàng)發(fā)布于人人都是產品經理。未經許可,禁止轉載。

題圖來自Unsplash,基于CC0協(xié)議

更多精彩內容,請關注人人都是產品經理微信公眾號或下載App
評論
評論請登錄
  1. 數(shù)據(jù)產品經理對技術要掌握到什么程度?

    來自上海 回復