1. 程式人生 > >做為一名大資料新手,如何成為大資料工程師?附上學習路線

做為一名大資料新手,如何成為大資料工程師?附上學習路線

這幾年來大資料非常的熱門,到處都有大資料分析的演講。 演講內容通常是宣傳各種大資料分析成功的案例。 但實際上大資料該怎麼做呢? 大部份的討論似乎都僅止於怎麼蒐集大量的資料, 然後用個工具(hadoop/spark)後就會馬上變出商機和錢來。

什麼是大資料?如何成為大資料工程師?

 大資料技術最重要的核心在於如何設計可以高效能處理大量資料的程式 (highly scalable programs.)

目前大資料相關工作可以粗分幾類。有資料系統串接者, 設計大資料演演算法實做的人,以及管理大型叢集 (cluster) 的工程師。 很多人對大資料工程師的理解還停留在資料系統串接者的程度, 以為只要將資料匯入某個神奇系統,就能將自己想要的結果生出來。 但實際上資料量變得很大時,我們往往需要自己客製化自己的資料系統,並且撰寫特殊的演演算法處理之。 以臺灣和美國業界而言,第二種工程師是最稀少也需求量最高的。 這本書的目的就是由淺入深的介紹如何成為此型別的工程師。

 

不知道在學習大資料的讀者們有沒有想過,超級電腦的發明是1960年代的事, 為什麼直到近年大資料才紅起來?任何科技及技術都有其歷史脈絡, 學習一點相關歷史會讓自己在追逐新科技時更清楚自己要解決的問題的定位在哪邊。

在這裡還是要推薦下我自己建的大資料學習交流群:199427210,群裡都是學大資料開發的,如果你正在學習大資料 ,小編歡迎你加入,大家都是軟體開發黨,不定期分享乾貨(只有大資料軟體開發相關的),包括我自己整理的一份2018最新的大資料進階資料和高階開發教程,歡迎進階中和進想深入大資料的小夥伴加入。

一、大資料是什麼?

大資料,big data,《大資料》一書對大資料這麼定義,大資料是指不能用隨機分析法(抽樣調查)這樣捷徑,而採用所有資料進行分析處理。

這句話至少傳遞兩種資訊:

1、大資料是海量的資料

2、大資料處理無捷徑,對分析處理技術提出了更高的要求

二、大資料的處理流程

下圖是資料處理流程:

做為一名大資料新手,應該通過這篇文章瞭解大資料

 

1、底層是數以千億計的資料來源,資料來源可以是SCM(供應鏈資料),4PL(物流資料),CRM(客戶資料),網站日誌以及其他的資料

2、第二層是資料加工層,資料工程師對資料來源按照標準的統計口徑和指標對資料進行抽取、清洗、轉化、裝載(整個過程簡稱ELT)

3、第三層是資料倉庫,加工後的資料流入資料倉庫,進行整合和儲存,形成一個又一個數據集市。

資料集市,指分類儲存資料的集合,即按照不同部門或使用者的需求儲存資料。

4、第四層是BI(商業智慧),按照業務需求,對資料進行分析建模、挖掘、運算,輸出統一的資料分析平臺

5、第五層是資料訪問層,對不同的需求方開放不同的資料角色和許可權,以資料驅動業務。

大資料的量級,決定了大資料處理及應用的難度,需要利用特定的技術工具去處理大資料。

三、大資料處理技術

以最常使用的Hadoop為例:

Hadoop是Apache公司開發的一個開源框架,它允許在整個叢集使用簡單程式設計模型計算機的分散式環境儲存並處理大資料。

叢集是指,2臺或2臺以上伺服器構建節點,提供資料服務。單臺伺服器,無法處理海量的大資料。伺服器越多,叢集的威力越大。

Hadoop類似於一個數據生態圈,不同的模組各司其職。下圖是Hadoop官網的生態圖。

做為一名大資料新手,應該通過這篇文章瞭解大資料

 

Hadoop的LOGO是一隻靈活的大象。關於LOGO的來源,網上眾說紛紜,有人說,是因為大象象徵龐然大物,指代大資料,Hadoop讓大資料變得靈活。而官方蓋章,LOGO來源於創始人Doug Cutting的孩子曾為一個大象玩具取名hadoop。

從上圖可以看出,Hadoop的核心是HDFS,YARN和Map Reduce,下面和大家講一講,幾個主要模組的含義和功能。

1、HDFS(分散式檔案儲存系統)

資料以塊的形式,分佈在叢集的不同節點。在使用HDFS時,無需關心資料是儲存在哪個節點上、或者是從哪個節點從獲取的,只需像使用本地檔案系統一樣管理和儲存檔案系統中的資料。

2、Map Reduce(分散式計算框架)

分散式計算框架將複雜的資料集分發給不同的節點去操作,每個節點會週期性的返回它所完成的工作和最新的狀態。大家可以結合下圖理解Map Reduce原理:

做為一名大資料新手,應該通過這篇文章瞭解大資料

 

計算機要對輸入的單詞進行計數:

如果採用集中式計算方式,我們要先算出一個單詞如Deer出現了多少次,再算另一個單詞出現了多少次,直到所有單詞統計完畢,將浪費大量的時間和資源。

如果採用分散式計算方式,計算將變得高效。我們將資料隨機分配給三個節點,由節點去分別統計各自處理的資料中單詞出現的次數,再將相同的單詞進行聚合,輸出最後的結果。

3、YARN(資源排程器)

相當於電腦的工作管理員,對資源進行管理和排程。

4、HBASE(分散式資料庫)

HBase是非關係型資料庫(Nosql),在某些業務場景下,資料儲存查詢在Hbase的使用效率更高。

關於關係型資料庫和菲關係型資料庫的區別,會在以後的文章進行詳述。

5、HIVE(資料倉庫)

HIVE是基於Hadoop的一個數據倉庫工具,可以用SQL的語言轉化成Map Reduce任務對hdfs資料的查詢分析。HIVE的好處在於,使用者無需寫Map Reduce任務,只需要掌握SQL即可完成查詢分析工作。

6、 Spark(大資料計算引擎)

Spark是專為大規模資料處理而設計的快速通用的計算引擎

7、Mahout(機器學習挖掘庫)

Mahout是一個可擴充套件的機器學習和資料探勘庫

8、Sqoop

Sqoop可以將關係型資料庫匯入Hadoop的HDFS中,也可以將HDFS的資料導進到關係型資料庫中

除上述模組外,Hadoop還有Zookeeper、Chukwa等多種模組,因為是開源的,所以未來還有出現更多更高效的模組,大家感興趣可以上網瞭解。

通過Hadoop強大的生態圈,完成大資料處理流程。

 

其實 Hadoop 其中一個很有價值的應用是做 BI (Business Intelligence)。 但它的設計架構一開始並不是針對BI起家的,而是更貼近於搜尋引擎建立索引這樣的工作。 在 BI 中最關鍵的事是處理時間序列的資料,資料清理,以及資料整合 (data join)。 以筆者個公司來說,就必須客制非常多的架構來讓它變得更適合 BI。 儘管 pig/hive 等上層工具一部分目的也是使其更容易操作 BI 。

大資料工程師的核心技能指標

看完前一章大資料的歷史,讀者有沒有對產業的發展脈絡稍微有概念一點了呢? 筆者目前在美國工作,就筆者觀察其實現在臺灣美國都還有非常多大資料工程師的就業機會。 即使大資料這名詞稍微退燒(或許是太多招搖撞騙的人吧), 但隨著軟體業近年來負載量愈來愈大,對後端處理資料的需求其實也是變得愈來愈高。 無奈資料工程這技能學校不會教,因為沒有學術價值。 在業界內除非進入資料團隊,不然也不會接觸到。 最糟的是,各家公司內部的資料團隊素質也良莠不齊,要學到好的資料工程技術真的只能靠運氣。 筆者的公司算得上是資料工程做得還不錯的,以下為筆者認定的大資料核心技能

分析及設計高延展性 (highly scalable) 程式

能寫出常見的 data operation 如 join, de-duplicate, group-by

能處理 data skew (資料過度集中在少數的 key)的問題

知道如何選擇 map output key, 以及 secondary key sort 的排序設計

能驗證資料正確性

設計 regression test system. 每次資料系統更新都能檢驗前後處理的差別

可以撰寫工具檢驗大量的資料正確性

從一開始規劃系統就讓它具有高度的可驗證性,以及嚴格的驗證它

將資料工程自動化的能力

可以處理資料相依性問題

自動處理錯誤的策略

要能 revert & reprocess

使用 control table 去控制及追蹤不同工做的 state

系統維護

透過 log & stacktrace 來 debug

知道基本的系統平臺管理。JobTracker, HDFS 等指令要熟悉

瞭解各種 Map Reduce 引數,可以調校效能引數

實事求是的精神

做資料工程或分析,最忌諱的就是騙自己。永遠不要用猜的,要用資料來驗證自己的想法是否正確。

各種資料系統設計都有隱藏的代價,不要對這些代價視而不見。

挖掘問題先於尋找解決方案。只有完全瞭解自己的需求後,才能在多種方案中選擇最適合自己的一個。

以上的技能集中在如何成為大資料工程師。資料科學的訓練不記入其中,因為光是達到以上的技能就已經很花時間啦。 當這些技能都練得相當不錯時,再跨足資料科學,其實也不太難。 不過通常是分工合作更簡單一些,因為學資料科學的人遠比資料工程多很多。

大資料工程技能樹該如何點?

初級

學習目標:能獨立開發 highly scalable 的程式及演演算法。更高階的資料系統設計不包含在內。

學習架構

建立開發環境

寫最簡易的 SQL operation

寫中階的 SQL operation

寫 SQL 難以辦到的功能

淺論資料工程架構 (dedup, join, aggregation)

開始有能力分析資料演演算法的複雜度,以及瞭解 data skew 的處理策略

能透過 log & stack trace 找出自己程式哪裡寫錯

高階

學習目標:學會許多更深入的技能,並且能規劃高階的資料系統設計。

serialization & data collection strategy

End to end trace data design

control table & automation design

lower level API (inputformat, outputformat, etc.)

advanced java tricks

analyze performance factor

MR network cost calculation, advanced MapReduce

初級的學習大概五六個月內可以精通。筆者當年就是花差不多的時間無師自通的。

 

大資料基礎路線:

 

第一階段:Linux理論

(1)Linux基礎;(2)Linux-shell程式設計;(3)高併發:lvs負載均衡;(4)高可用&反向代理

第二階段:Hadoop理論

(1)hadoop-hdfs理論;(2)hadoop-hdfs叢集搭建;(3)hadoop-hdfs 2.x & api ;(4)hadoop-MR理論 ;

(5)hadoop-MR開發分析;(6)hadoop-MR原始碼分析 ;(7)hadoop-MR開發案例

第三階段:Hive理論

(1)Hive介紹以及安裝 ;(2)Hive實戰

第四階段:HBase

(1)HBase介紹以及安裝 ;(2)HBase調優

第五階段: redis理論

(1)redis型別 ; (2) redis高階

第六階段:Zookeeper理論

(1)Zookeeper介紹 ;(2) Zookeeper使用

第七階段: Scala語法

(1)Scala語法介紹;(2)scala語法實戰

第八階段: Spark理論

(1)Spark介紹;(2)Spark程式碼開發流程 ; (3)Spark叢集搭建;(4) Spark資源排程原理;

(5)Spark任務排程;(6)Spark案例;(7)Spark中兩種最重要shuffle;

(8)Spark高可用叢集的搭建;(9)SparkSQL介紹;(10) SparkSQL實戰 ;

(11)SparkStreaming介紹;(12)SparkStreaming實戰

2018最新大資料學習路線從入門到精通

 

第九階段:機器學習介紹

(1) 線性迴歸詳解; (2)邏輯迴歸分類演算法; (3)Kmeans聚類演算法; (4)KNN分類演算法; (5)決策樹 隨機森林演算法

 

從零基礎到專案實戰,實時交易監控系統,推薦系統理論,資料庫搭建等等。需要以下大資料學習資料的小夥伴可以加群 :199427210免費獲取,和行業大牛一起學習大資料。

 

 

 

 

 

第十階段:Elasticsearch理論

(1)Elasticsearch搜尋原理; (2) Elasticsearch實戰

第十一階段:Storm理論

(1)Storm介紹以及程式碼實戰;(2)Storm偽分散式搭建以及任務部署; (3)Storm架構詳解以及DRCP原理;

(4) 虛擬化理論kvm虛擬化 ; (5) docker

1,_推薦系統理論與實戰專案 Part2

2,推薦系統理論與實戰 專案Part1

2018最新大資料學習路線從入門到精通

 

3.實時交易監控系統專案(下)

4,實時交易監控系統專案(上)

5,使用者行為分析系統專案1

6,使用者行為分析系統專案2

7,大資料批處理之HIVE詳解

8,ES公開課 part1

9,spark_streaming_

10,資料倉庫搭建詳解

2018最新大資料學習路線從入門到精通

 

11,大資料任務排程

12,流資料整合神器Kafka

13,Spark 公開課

14,海量日誌收集利器:Flume

15,Impala簡介

16,Hive簡介

17,MapReduce簡介

18海量資料高速存取資料庫 HBase

19,淺談Hadoop管理器yarn原理

20,,分散式全文搜尋引擎ElasticSearch Part2

2018最新大資料學習路線從入門到精通

 

結語:以上就是大資料從入門到精通的學習路線了,並且有許多專案實戰供大家實踐。祝大家工作順利,步步高昇!