地表最強大數據系統學習法:想變成數據科學家、工程師就看這篇!

【我們為什麼挑這篇文章】

大數據很夯,但不是說「我想學大數據」,然後埋頭苦幹就好了。首先問問自己,「為了什麼而學?」「對大數據的哪個領域有興趣?」確認目標以後,才不會白走了冤枉路,也能找出更有效的學方法。其實不管哪一個領域的學習都是這樣,做事情也可以運用這個邏輯,才能事半功倍。

(責任編輯:謝秉芸)

引言

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

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

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

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

學習之路樹狀圖

在這個樹狀圖的幫助下,你可以根據你的興趣和目標選擇路徑。然後,你可以開始學習大數據的旅程了。

目錄表

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:「我是一個計算機科學畢業生,目前正從事數據庫開發工作。」

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

例 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。只學習其中之一就足夠了。

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

  • 從根節點開始,並執行深度優先的通過方式。
  • 在每個節點停止查驗鏈接中給出的資源。
  • 如果你有充足的知識,並且在使用該技術方面有相當的信心,那麼請轉到下一個節點。
  • 在每個節點嘗試完成至少 3 個編程問題。
  • 移動到下一個節點。
  • 到達樹葉節點。
  • 從替代路徑開始。

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

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

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

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

根據你在上述樹狀圖中使用的數據類型,添加選擇的 NoSQL 數據庫。

該表格表示數據存儲類型要求及相應的軟體選擇

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

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

7. 資源

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

1. Python

2. Java 的

3. 雲

4. HDFS

5. 阿帕奇動物園管理員

6. Apache 的卡夫卡

7. SQL

8. 蜂巢

9. 豬

10. 阿帕奇風暴

11. 阿帕奇室壁運動

12. Apache 的火花

13. 阿帕奇星火流

後註

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

原文連結

(本文經 大數據文摘微信公眾平台(ID:BigDataDigest) 授權轉載,並同意 TechOrange 編寫導讀與修訂標題,原文標題為 〈想做數據科學家、工程師?從零開始系統規劃大數據學習之路〉,首圖來源:Wikipedia。)

 

延伸閱讀

犯罪能精準被預測?洛杉磯警局用大數據分析降低 36%犯罪率
【2016 年工程師必備】10 大數據科學家最常使用的演算法都在這!
【336 億美元 IPO 大騙局?】離職員工爆料:SnapChat 誇大數據誤導投資人
【祖宗保佑我】大數據統計,台北市成未來 10 年內全球風險最高城市


我們正在找夥伴!

2019 年我們的團隊正在大舉擴張,需要你的加入跟我們一起找出台灣創新原動力! 我們正在徵 《採訪社群編輯》、《助理編輯》,詳細職缺與應徵辦法 請點我

點關鍵字看更多相關文章: