如何成爲一個合格的數據架構師?

雲棲號資訊:【點擊查看更多行業資訊
在這裏您可以找到不同行業的第一手的上雲資訊,還在等什麼,快來!

寫在前面

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

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

最早,數據架構師在 IOE 上工作;

2009 年,阿里雲最早提出“去 IOE”的口號,初代數據架構師革了自己的命;

2015 年,這一年產生的數據量是人類過去歷史上所產生數據量的總和,從此進入了指數級增長階段。數據架構師也演化出了 2 個大方向(平臺型數據架構師、數倉型數據架構師)。

本文以作者親歷視角,主要分享數倉型數據架構師的“修煉大法”。歡迎辯證看待、留言交流。

你想成爲哪種數據架構師

目前數據架構師有兩個大的方向:一,偏平臺的架構師,對開源技術要求較高,企業一般會要求讀過開源技術源碼,或者參與過開源項目,偏平臺的構建;二,偏數倉的架構師,對 SQL 能力要求較高,企業一般會要求掌握數倉理論,有數倉項目經驗。

(1)平臺型數據架構師

這個方向也會分類:一,開源派,互聯網公司一般喜歡這個流派,二,商用軟件派,如 Oracle、IBM 等流派,通常解決傳統企業的數據問題。這個流派目前受到了來自阿里、騰訊和華爲較大的衝擊。個人認爲目前開源派是比較符合近年潮流趨勢的。

平臺型數據架構師,是爲數倉型數據架構師服務的,直白地說,你開發能力要很牛逼,你要懂應用。

(2)數倉型數據架構師

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

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

數據架構師的必備知識樹

敲門磚:掌握一門開發語言

如果你是一位計算機專業的學生,我推薦使用 C 語言,強烈建議通過面向對象的編程思想去消化數據結構。數據架構中,很多邏輯和原理都來自於數據結構這門課程,如鏈表、隊列、堆棧、樹、圖等,掌握數據結構對後續進一步學習非常的重要。

如果你是想從其他崗位轉數據架構師,那麼更建議學習 Java,Java 的入門會相對簡單。當然最好的方式是通過 Java 的編程思想領會數據結構這本書的知識點。一定要模擬 B/C 的整個過程,不要立馬就用 Java 的高級框架,而是要用 Java 原生的 servlet 模擬下前端和後端的交互,後端和數據庫的交互。

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

比如你初學 Java,你第一個目標是要在屏幕上打出“Hello, world! ”。網上會有很多的資料,會教你安裝 JDK、IDE 工具等等,你可以先不管那麼多,找個偏基礎的資料,按部就班的實現一次。在整個過程中你會遇到很多的問題,JDK 在哪裏下載,版本選哪一個,環境變量如何配置等等。最好的方式是邊查邊做,通過親手實踐來驗證整個過程,再去理解。最終成功地打印出“Hello, world! ”,你會有前所未有的成就感!

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

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

開發語言是成爲一名合格數據架構師的敲門磚。你可以選一本不錯的書,結合書籍一步一步走。自學時,知識檢索能力很重要,你要慢慢學會在浩瀚的互聯網學海中查找自己想要的知識。有條件的同學也可以報個靠譜的培訓班,這是個不錯的選擇,會少走很多彎路。但是速成後很多人只能做個碼農,最終要成爲架構師級別的高手,還是需要紮實的基本功是必須的。需要很長的路才能成爲架構師級別的編程高手。所以如果想有更高的成就,必須對概念、原理、技術。

基本功:掌握一種數據庫

對於數據架構師,必須要掌握一種數據庫,同時要了解常見的數據庫。

建議通過 Oracle 來學習數據庫,安裝系統時選擇 Linux,也可以選 CentOS。第一步你要模擬操作系統,也就會接觸到虛擬機的概念。簡單來說,也就是第一步模擬 Linux 系統,第二步再安裝數據庫。

爲什麼推薦 Oracle 數據庫?因爲 Oracle 的安裝過程相對比較複雜,在過程中你會遇到各種各樣的問題,遇到的問題越多,學習的就越多。整個過程中你要學習 Linux 系統的各種命令、網絡、補丁包、防火牆等一系列問題,最後通過客戶端可以訪問數據庫了,可以查看數據了,就會很有成就感。如果領悟能力和動手能力很好,這個步驟一般需要一週左右的時間去消化。但這只是第一步,記得一定要多裝幾次來加深理解。

後面就要開始學習 SQL 語句了,建表、插入、更改、查詢,操作起來吧!理論也要跟上,“事務”的概念一定要看,數據庫、實例名、表空間、段、塊等概念要理解。

當然也要學習如何優化數據庫。數據庫底層無非是硬盤、內存、CPU 在支撐,所以這些資源怎麼分配很重要,在測試時一定要留意這三個重要參數的變化。操作系統層面的優化就是爲了讓操作系統和數據庫軟件更好地結合,可以去調系統的參數。這是統一的優化思想,後面的應用系統、大數據等技術也適用。

數據庫層面的優化,也是一樣的道理,留意、調整參數,原則就是“集中有限的資源做更多重要的事”。

基於數據的優化,我建議儘可能少消耗計算機的性能:硬盤的讀寫、網絡的傳輸、數據的計算。如分表分區,索引等等都是爲了用盡可能少的資源,儘可能快地完成儘可能多的事:就是提高效率。當然有的時候我們會犧牲時間換空間,也會犧牲空間換時間,所以對於優化,我們要綜合考慮成本和效率的問題。

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

要了解哪些數據庫呢?關係型數據庫中 Oracle、MySQL、SQLServer、DB2、PostgreSQL 是要去了解的,同時瞭解行存儲和列存儲的區別,當然瞭解越多越好。NoSQL 數據庫的話,建議瞭解 MongoDB、HBase、Redis。

其他數據庫還很多,通過項目和 ELT 過程來熟悉更多的架構吧!

必殺技:大數據技術

大數據解決了什麼問題?其實答案很簡單:分佈式存儲和分佈式計算。

所以,學習大數據最好的方式就是搭建一套開源的 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 等等,因篇幅有限,每個類型只列舉一個。

必殺技 2:數據倉庫

1、初步學習

初步接觸數據倉庫時,建議先看維度模型,瞭解什麼是事實表,什麼是維度表。做一張事實表,定義哪些是維度、哪些是度量,然後通過 SQL 進行查詢。

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

image

戳上圖看天啓關於數據模型的詳解

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

2、步入設計

首先要了解數據倉庫的分層、每一層做什麼,爲什麼要分層?

然後,瞭解事實表的類型(事務、週期快照、累計快照)、維度表的類型(普通維度、緩慢變化維度)、總線矩陣、數據立方體(cube)等。

3、高階學習

維度建模實踐後,發現維度建模的不足,那麼是時候可以開始研究其他建模了。建議通讀並理解 Inmon 大師的範式建模(數據倉庫之父 Bill Inmon, Building the Data Warehouse)和 Kimball 大師的維度建模,兩者的建模各有優劣,可以取長補短。

4、解決業務問題

數據模型最終解決的是業務問題,目前常見的建模以維度建模爲主,但是維度建模不停的在變化, Bill Inmon 提出了 datavault 的建模思想,數據倉庫、數據平臺、數據中臺、數據湖等概念層出不窮。本質不變,目標還是解決實際的業務問題。

我個人建議,我們數據倉庫的規劃可以自頂向下,採用 Inmon 的思想,開發和建模規範也要考慮全局,而在實施中可以採用維度建模,自底向上,採用 Kimbal 思想,落地快,迭代快。實際解決問題時不拘泥於一個模型,什麼模型合適就用什麼模型。

5、阿里的創新

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

6、模型標準

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

必殺技 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)前瞻性

及時告警和預警功能,提前處理問題。

加分項:應用系統
一個應用系統是怎麼誕生的?可以通過軟件工程這門課程學習,需求分析、概要設計、詳細設計、軟件開發、軟件測試、試運行、上線、運維、下線等整個過程。

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

  • 高可用:系統一個節點發生故障後能進行無感切換,這個很重要。
  • 負載均衡:使壓力均衡進行,它決定了系統的擴展性。
  • 安全:磁盤陣列(raid0、raid1、raid5、raid10)、防火牆、授權、認證,及數據安全,防泄防篡、脫敏加密、防丟失等。

在做架構決策時,知道哪些操作可能會影響業務系統,才能設計更好的數據架構。

錦上添花:算法

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

這裏的算法主要指機器學習算法,初學者可以理解下預測、分類(聚類)的概念(其實很多圖像和語音識別的算法也可以歸爲預測和聚類算法中)。

可以用 Python 模擬最簡單的線性迴歸,進階則研究邏輯迴歸。

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

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

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

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

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

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

【雲棲號在線課堂】每天都有產品技術專家分享!
課程地址:https://yqh.aliyun.com/live

立即加入社羣,與專家面對面,及時瞭解課程最新動態!
【雲棲號在線課堂 社羣】https://c.tb.cn/F3.Z8gvnK

原文發佈時間:2020-06-17
本文作者:奇點雲
本文來自:“infoq”,瞭解相關信息可以關注“infoq

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章