想做資料科學家/工程師?從零開始系統規劃大資料學習之路

大資料群722680258發表於2018-06-18

大資料的領域非常廣泛,往往使想要開始學習大資料及相關技術的人望而生畏。大資料技術的種類眾多,這同樣使得初學者難以選擇從何處下手。

關注作者:需要大資料學習視訊資料,其他文章可以找到大神組織

這正是我想要撰寫本文的原因。本文將為你開始學習大資料的征程以及在大資料產業領域找到工作指明道路,提供幫助。目前我們面臨的最大挑戰就是根據我們的興趣和技能選定正確的角色。

為了解決這個問題,我在本文詳細闡述了每個與大資料有關的角色,同時考量了工程師以及電腦科學畢業生的不同職位角色。

我儘量詳細地回答了每一項人們在學習大資料過程中遇到或可能會遇到的問題。為幫助你根據興趣選擇發展途徑,我新增了一組樹圖,相信會對你找到正確的途徑有所幫助。


註釋:學習之路樹狀圖

在這個樹狀圖的幫助下,你可以根據你的興趣和目標選擇路徑。 然後,你可以開始學習大資料的旅程了。 後臺回覆“職業路徑”3個字,下載高清版本。

目錄表

1.如何開始?

2.在大資料領域有哪些職位需求?

3.你的領域是什麼,適合什麼方向?

4.勾勒你在大資料領域的角色

5.如何成為一名大資料工程師?

o什麼是大資料行業術語?

o你需要了解的系統和結構

o學習去設計解決方案並且學習相關技術

6.大資料學習路徑

7.資源

1.如何開始?

人們想開始學習大資料的時候,最常問我的問題是,“我應該學Hadoop(hadoop是一款開源軟體,主要用於分散式儲存和計算,他由HDFS和MapReduce計算框架組成的,他們分別是Google的GFS和MapReduce的開源實現。由於hadoop的易用性和可擴充套件性,因此成為最近流行的海量資料處理框架。hadoop這個單詞來源於其發明者的兒子為一個玩具大象起的名字。), 分散式計算,Kafka(Kafka是由LinkedIn開發的一個分散式基於釋出/訂閱的訊息系統),NoSQL(泛指非關係型的資料庫)還是Spark(Spark 是一種與 Hadoop 相似的開源叢集計算環境,但是兩者之間還存在一些不同之處)?”

而我通常只有一個答案:“這取決於你究竟想做什麼。”

因此,讓我們用一種有條理的方式來解決這個問題。我們將一步步地探索這條學習之路。

2. 在大資料行業有哪些職業需求?

在大資料行業中有很多領域。通常來說它們可以被分為兩類:

  • 大資料工程

  • 大資料分析

這些領域互相獨立又互相關聯。

大資料工程涉及大量資料的設計,部署,獲取以及維護(儲存)。大資料工程師需要去設計和部署這樣一個系統,使相關資料能面向不同的消費者及內部應用。

而大資料分析的工作則是利用大資料工程師設計的系統所提供的大量資料。大資料分析包括趨勢、圖樣分析以及開發不同的分類、預測預報系統。

因此,簡而言之,大資料分析是對資料的高階計算。而大資料工程則是進行系統設計、部署以及計算執行平臺的頂層構建。

3.你的領域是什麼,適合什麼方向?

現在我們已經瞭解了行業中可供選擇的職業種類,讓我們想辦法來確定哪個領域適合你。這樣,我們才能確定你在這個行業中的位置。

通常來說,基於你的教育背景和行業經驗我們可以進行如下分類:

  • 教育背景

(包括興趣,而不一定與你的大學教育有關)

  1. 電腦科學

  2. 數學

  • 行業經驗

  • 新人

  • 資料學家

  • 計算機工程師(在資料相關領域工作)

因此,通過上面的分類,你可以把自己的領域定位如下:

例1:“我是一名電腦科學畢業生,不過沒有堅實的數學技巧。”

你對電腦科學或者數學有興趣,但是之前沒有相關經驗,你將被定義為一個新人。

例2:“我是一個電腦科學畢業生,目前正從事資料庫開發工作。”

你的興趣在電腦科學方向,你適合計算機工程師(資料相關工程)的角色。

例3:“我正作為資料科學家從事統計工作。”

你對數學領域有興趣,適合資料科學家的職業角色。

因此,參照著定位你的領域吧。

(此處定義的領域對你確定在大資料行業的學習路徑至關重要。)

4.根據領域規劃你的角色

現在你已經確定了你的領域,下一步,讓我們規劃出你要努力的目標職位吧。

如果你有卓越的程式設計技巧並理解計算機如何在網路(基礎)上運作,而你對數學和統計學毫無興趣,在這種情況下,你應該朝著大資料工程職位努力。

如果你擅長程式設計同時有數學或者統計學的教育背景或興趣,你應該朝著大資料分析師職位努力。

5.如何成為一名大資料工程師

讓我們先定義一下,一名受到行業承認的大資料工程師都需要學習和了解什麼。首先以及最重要的一步是確認你的需求。你不能在不清楚個人需求的情況下直接開始學習大資料。否則,你將一直盲人摸象。

為了明確你的需求,你必須瞭解常用的大資料術語。所以讓我們來看一下大資料到底意味著什麼?

5.1 大資料術語

大資料工程通常包括兩個方面 – 資料需求以及處理需求。

5.1.1 資料需求術語

結構:你應該知道資料可以儲存在表中或者檔案中。儲存在一個預定義的資料模型(即擁有架構)中的資料稱為結構化資料。如果資料儲存在檔案中且沒有預定義模型,則稱為非結構化資料。(種類:結構化/非結構化)。

容量:我們用容量來定義資料的數量。(種類:S/M/L/XL/XXL/流)

Sink吞吐量:用系統所能接受的資料率來定義Sink吞吐量。(種類:H/M/L)

源吞吐量:定義為資料更新和轉化進入系統的速度。(種類:H/M/L)

5.1.2 處理需求術語

查詢時間:系統查詢所需時間。(種類:長/中/短)

處理時間:處理資料所需時間。(種類:長/中/短)

精度:資料處理的精確度。(種類:準確/大約)

5.2 你需要知道的系統和架構

情景1:

為分析一個公司的銷售表現需要設計一個系統,即建立一個資料池,資料池來自於多重資料來源,比如客戶資料、領導資料、客服中心資料、銷售資料、產品資料、部落格等。

5.3 學習設計解決方案和技術

情節1的解決方案:銷售資料池

(這是我的個人解決方案,如果你想到一個更高明的解決方案請在下面分享一下)

那麼,一個資料工程師會怎樣解決這個問題呢?

需要記住的一點是,大資料系統的目的不僅僅是無縫整合各種來源的資料,而使其可用,同時它必須能使得,用於開發應用系統的資料的分析和利用變得簡單迅速和易得(在這個案例中是智慧控制皮膚)。

定義最後的目標:

1. 通過整合各種來源的資料建立一個資料池。

2. 每隔一定時間自動更新資料(在這個案例中可能是一週一次)。

3. 可用於分析的資料(在記錄時間內,甚至可能是每天)

4. 易得的架構和無縫部署的分析控制皮膚。

既然我們知道了我們最後的目標,讓我們儘量用正式術語制定我們的要求吧。

5.3.1 資料相關要求

結構:大部分資料是結構化的,並具有一個定義了的資料模型。但資料來源如網路日誌,客戶互動/呼叫中心資料,銷售目錄中的影象資料,產品廣告資料等是非結構化的。 影象和多媒體廣告資料的可用性和要求可能取決於各個公司。

結論:結構化和非結構化資料

大小:L或XL(選擇Hadoop)

Sink 吞吐量:

質量:中等(Hadoop&Kafka)

完整性:不完整

5.3.2 處理相關要求

查詢時間:中至長

處理時間:中至短

精度:準確

隨著多個資料來源的整合,重要的是要注意不同的資料將以不同的速率進入系統。 例如,網路日誌可用高顆粒度連續流進入系統。

基於上述我們對系統要求的分析,我們可以推薦以下大資料體系。


6.大資料學習路徑

現在,你已經對大資料行業,大資料從業人員的不同角色和要求有所瞭解。 我們來看看你應該遵循哪條路來成為一名大資料工程師。

我們知道大資料領域充斥著多種技術。 因此,你學習與你的大資料工作角色相關的技術非常重要。這與任何常規領域有點不同,如資料科學和機器學習中,你可以從某些地方開始並努力完成這一領域內的所有工作。

下面你會發現一個你應該通過的樹狀圖,以找到你自己的路。即使樹狀圖中的一些技術被指向是資料科學家的強項,但是如果你走上一條路,知道所有的技術直到“樹葉節點”總是很好的。 該樹狀圖源自lambda架構範例。


註釋:學習之路樹狀圖

任何想要調配應用程式的工程師必須知道的基本概念之一是Bash 指令碼程式設計。你必須對linux和bash 指令碼程式設計感到舒適。這是處理大資料的基本要求。

核心是,大部分大資料技術都是用Java或Scala編寫的。但是別擔心,如果你不想用這些語言編寫程式碼,那麼你可以選擇Python或者R,因為大部分的大資料技術現在都支援Python和R。

因此,你可以從上述任何一種語言開始。 我建議選擇Python或Java。

接下來,你需要熟悉雲端工作。 這是因為如果你沒有在雲端處理大資料,沒有人會認真對待。 請嘗試在AWS,softlayer或任何其他雲端供應商上練習小型資料集。 他們大多數都有一個免費的層次,讓學生練習。如果你想的話,你可以暫時跳過此步驟,但請務必在進行任何面試之前在雲端工作。

接下來,你需要了解一個分散式檔案系統。最流行的分散式檔案系統就是Hadoop分散式檔案系統。在這個階段你還可以學習一些你發現與你所在領域相關的NoSQL資料庫。下圖可以幫助你選擇一個NoSQL資料庫,以便根據你感興趣的領域進行學習。

到目前為止的路徑是每個大資料工程師必須知道的硬性基礎知識。

現在,你決定是否要處理資料流或靜止的大量資料。 這是用於定義大資料(Volume,Velocity,Variety和Veracity)的四個V中的兩個之間的選擇。

那麼讓我們假設你已經決定使用資料流來開發實時或近實時分析系統。 之後你應該採取卡夫卡(kafka)之路,或者還可以採取Mapreduce的路徑。然後你按照你自己建立的路徑。 請注意,在Mapreduce路徑中,你不需要同時學習pig和hive。 只學習其中之一就足夠了。

總結:通過樹狀圖的方式。

  1. 從根節點開始,並執行深度優先的通過方式。

  2. 在每個節點停止查驗連結中給出的資源。

  3. 如果你有充足的知識,並且在使用該技術方面有相當的信心,那麼請轉到下一個節點。

  4. 在每個節點嘗試完成至少3個程式設計問題。

  5. 移動到下一個節點。

  6. 到達樹葉節點。

  7. 從替代路徑開始。

最後一步(#7)阻礙你! 說實話,沒有應用程式只有流處理或慢速延遲資料處理。 因此,你在技術上需要成為執行完整的lambda架構的高手。

另外,請注意,這不是學習大資料技術的唯一方法。 你可以隨時建立自己的路徑。 但這是一個可以被任何人使用的路徑。

如果你想進入大資料分析世界,你可以遵循相同的路徑,但不要嘗試讓所有東西都變得完美。

對於能夠處理大資料的資料科學家,你需要在下面的樹狀圖中新增一些機器學習渠道,並將重點放在機器學習渠道上,而不是下面提供的樹狀圖。 但我們可以稍後討論機器學習渠道。

根據你在上述樹狀圖中使用的資料型別,新增選擇的NoSQL資料庫。


該表格表示資料儲存型別要求及相應的軟體選擇

如你所見,有大量的NoSQL資料庫可供選擇。 所以它常常取決於你將要使用的資料型別。

而且為了給採用什麼型別的NoSQL資料庫提供一個明確的答案,你需要考慮到你的系統需求,如延遲,可用性,彈性,準確性當然還有你當前處理的資料型別。

7.資源

初學者的Bash指南,來自Machtelt Garrels

1.Python

  • 讓每個人變成python專家,來自Coursera(https://www.coursera.org/specializations/python)

  • 用Python學資料科學之路,來自Coursera(https://www.analyticsvidhya.com/learning-paths-data-science-business-analytics-business-intelligence-big-data/)

2. Java

  • Java程式設計簡介1:開始使用Java編碼,來自 Udemy(https://www.edx.org/course/introduction-programming-java-1-starting-uc3mx-it-1-1x)

  • 中級和高階Java程式設計,來自Udemy(https://www.udemy.com/intermediate-advanced-java-programming/)

  • Java 程式設計介紹2,來自 Udemy(https://www.edx.org/course/introduction-programming-java-2-writing-uc3mx-it-1-2x)

  • 物件導向Java程式設計:資料結構和超越專業化,來自Coursera(https://www.coursera.org/specializations/java-object-oriented)

3. 雲

  • 大資料技術基礎,來自亞馬遜網路服務(https://www.edx.org/course/introduction-programming-java-starting-uc3mx-it-1-1x)

  • AWS上的大資料,來自亞馬遜網路服務(https://aws.amazon.com/training/course-descriptions/bigdata/)

4. HDFS

  • 大資料和Hadoop 要點,來自 Udemy(https://www.udemy.com/big-data-and-hadoop-essentials-free-tutorial/)

  • 大資料基礎,來自大資料大學(https://bigdatauniversity.com/learn/big-data/)

  • Hadoop入門工具包(https://www.udemy.com/hadoopstarterkit/)

  • Apache Hadoop文件(https://hadoop.apache.org/docs/r2.7.2/)

  • 書--Hadoop叢集部署(http://shop.oreilly.com/product/0636920033448.do)

5. Apache Zookeeper

  • Apache Zookeeper文件(http://shop.oreilly.com/product/0636920028901.do)

  • 書 - Zookeeper(https://zookeeper.apache.org/doc/r3.4.6/)

  • 6. Apache Kafka

  • 完整初學者Apache Kafka課程(http://shop.oreilly.com/product/0636920028901.do)

  • 學習Apache Kafka基礎和高階主題(https://www.udemy.com/learn-apache-kafka-basics-and-advanced-topics/)

  • Apache Kafka文件(https://kafka.apache.org/documentation/)

  • 書 - 學習Apache Kafka(https://www.amazon.in/Learning-Apache-Kafka-Nishant-Garg-ebook/dp/B00U2MI8MI/256-7260357-1334049?_encoding=UTF8&tag=googinhydr18418-21)

7. SQL

  • 用MySQL管理大資料(https://www.udemy.com/beginners-guide-to-postgresql/)

  • SQL課程(http://www.sqlcourse.com)

  • PostgreSQL初學者指南(https://www.udemy.com/beginners-guide-to-postgresql/)

  • 高效能MySQL(http://shop.oreilly.com/product/0636920022343.do)

8. Hive

  • 使用Hive訪問Hadoop資料(https://cognitiveclass.ai/learn/big-data/0

  • 學習Apache Hadoop生態系統 Hive(https://cognitiveclass.ai/learn/big-data/)

  • Apache Hive文件(https://hive.apache.org)

  • Hive程式設計(https://hive.apache.org)

9. Pig

  • Apache Pig 101,來自大資料大學(https://cognitiveclass.ai/courses/introduction-to-pig/)

  • 用Hadoop與Apache Pig程式設計(https://bigdatauniversity.com/courses/introduction-to-pig/)

  • Apache Pig文件(http://shop.oreilly.com/product/0636920044383.do)

  • 書 - Pig程式設計(https://pig.apache.org/docs/r0.12.0/)

10. Apache Storm

  • 使用Apache Storm實時分析(https://www.udacity.com/course/real-time-analytics-with-apache-storm--ud381)

  • Apache Storm文件(https://www.udacity.com/course/real-time-analytics-with-apache-storm--ud381)

  • 11. Apache Kinesis

  • Apache Kinesis文件(https://aws.amazon.com/cn/documentation/kinesis/)

  • Amazon Kinesis通過Amazon Web Services流式瀏覽開發人員資源(https://aws.amazon.com/cn/documentation/kinesis/)

  • 亞馬遜Kinesis Streams開發人員資源,來自亞馬遜網路服務(https://aws.amazon.com/documentation/kinesis/)

12. Apache Spark

  • 資料科學、工程與Apache(https://www.edx.org/xseries/data-science-engineering-apache-spark)

  • Apache Spark文件(https://www.edx.org/xseries/data-science-engineering-apache-spark)

  • 書 - 學習Spark(https://www.edx.org/xseries/data-science-engineering-apacher-sparktm)

13. Apache Spark Streaming

  • Apache Spark Streaming文件(http://spark.apache.org/streaming/)

尾註

我希望你們喜歡閱讀這篇文章。 藉助這種學習途徑,你將能夠踏上你在大資料行業的旅程。 我已經敘述了大部分你找工作會要求的主要概念。

相關文章