新手入門大數據,這有一條最完整的學習路徑!

新手入門大數據,這有一條最完整的學習路徑

最近有很多人問我如何學習大數據?我也是思考了很多時日才動筆寫下此文。

本文的目的是希望給所有大數據初學者規劃一條比較清晰的學習路線,幫助它們開啟大數據學習之旅。鑑於大數據領域內的技術絢麗繁複,每位大數據初學者都應該根據自己的實際情況制定專屬的學習路徑。

要說當下IT行業什麼最火?ABC無出其右。所謂ABC者,AI + Big Data + Cloud也,即人工智能、大數據和雲計算(雲平臺)。每個領域目前都有行業領袖在引領前行,今天我們來討論下大數據這個方向。

新手入門大數據,這有一條最完整的學習路徑

大數據概念

角色

以我的愚見,當下大數據行業有兩類角色:

大數據工程

大數據分析

這兩類角色相互依存但又獨立運作,何意?沒有大數據工程,大數據分析便無從談起;但倘若沒有大數據分析,我也實在想不出大數據工程存在的理由。這就類似於結婚和談戀愛——戀愛的目的是為了結婚,且不以結婚為目的的談戀愛都是耍流氓。

新手入門大數據,這有一條最完整的學習路徑

而大數據分析角色定位於如何利用數據——即從大數據工程系統中接收到數據之後如何為企業或組織提供有產出的數據分析,並且確實能夠幫助到公司進行業務改善或提升服務水平,所以對於大數據分析師來說,他們首要解決的問題是發現並利用數據的價值,具體可能包括:趨勢分析、模型建立以及預測分析等。

簡單總結一下,大數據工程角色需要考慮數據的收集、計算(或是處理)和保存;大數據分析角色則是執行數據的高級計算。

我們屬於哪種角色?

大數據工程師定位

既然我們瞭解了大數據領域內的角色分類,下面自然就需要“對號入座”確定自己的定位,這樣才能有的放矢地開始大數據學習。在考慮這個問題時,我們需要參考兩方面的因素:

專業知識背景

行業經驗

新手入門大數據,這有一條最完整的學習路徑

計算機專業知識,比如操作系統,編程語言,計算機運行原理等

數學知識,這裡指代的是高等數學,比如微積分、概率統計、線性代數和離散數學等, 不是x * x + y * y = 1畫出來是什麼圖形這樣的數學

而行業經驗指的是你相關領域內的工作經驗,具體可以分為三檔:

菜鳥

有一定經驗的工程師

資深專家——現在在大數據領域有個更cool的名字:數據科學家,比如前百度首席數據科學家:吳恩達博士

新手入門大數據,這有一條最完整的學習路徑

確定自己的定位後,我們需要對應到特定的大數據角色,以下是一些基本法則:

如果您具有良好的編程基礎且深入瞭解計算機的交互方式以及互聯網底層技術原理,但數學和統計學掌握不深,那麼大數據工程可能是您今後學習的方向

•如果你有一定的編程基礎(掌握一些高級語言,如Python等)同時又很強的數學功底,那麼大數據分析是您今天努力的方向。

大數據學習路線

不管您屬於以上哪種角色,有一些大數據理論知識是您必須要掌握的,他們包括但不限於:

• 數據分片與路由:挑一個典型的分區算法去學習,比如一致性哈希算法([url=]https://en.wikipedia.org/wiki/Consistent_hashing[/url])

• 備份機制與一致性:

學習國內被奉為“聖經”但在國外也就一般的CAP理論([url=]https://en.wikipedia.org/wiki/CAP_theorem[/url])

冪等性(Idempotent):很多分佈式系統狀態管理的基石 [url=]https://mortoray.com/2014/09/05/what-is-an-idempotent-function/[/url]

各種一致性模型:強一致性、弱一致性、最終一致性

備份機制:主從的叫法已經不怎麼流行了,當前更cool的叫法是Leader-Follower模式

共識協議:國內通常翻譯成一致性協議(consensus protocol)。學習常見的幾種:Paxos和Raft

算法和數據結構

LSM:學習和B+樹的區別以及優勢是什麼

壓縮算法:找一個主流的壓縮算法進行了解,比如Snappy, LZ4。另外Facebook最近開源了新一代的壓縮算法:ZStandard,據說完爆一切主流壓縮算法

Bloom Filter過濾器:大數據下O(1)的過濾器

無論是學習大數據工程還是大數據分析,這些理論知識都是必要的,因為它們是設計很多分佈式系統必備的技能。下面我們就針對不同的角色設計不同的學習路線。

大數據工程師技能

對於大數據工程師而言,您至少要掌握以下技能:

一門JVM系語言:

新手入門大數據,這有一條最完整的學習路徑

因此筆者這裡建議您至少要精通一門JVM系的語言。值得一提的,一定要弄懂這門語言的多線程模型和內存模型,很多大數據框架的處理模式其實在語言層面和多線程處理模型是類似的,只是大數據框架把它們引申到了多機分佈式這個層面。

筆者建議:學習Java或Scala

計算處理框架:

新手入門大數據,這有一條最完整的學習路徑

事實上,Google已經在公司內部正式廢棄了以MapReduce為代表的離線處理。因此如果要學習大數據工程,掌握一門實時流式處理框架是必須的。當下主流的框架包括:Apache Samza, Apache Storm, Apache Spark Streaming以及最近一年風頭正勁的Apache Flink。當然Apache Kafka也推出了它自己的流式處理框架:Kafka Streams

筆者建議:

學習Flink、Spark Streaming或Kafka Streams中的一個

o熟讀Google大神的這篇文章:《The world beyond batch: Streaming 101》,地址是https://www.oreilly.com/ideas/th ... batch-streaming-101

分佈式存儲框架:

雖說MapReduce有些過時了,但Hadoop的另一個基石HDFS依然堅挺,並且是開源社區最受歡迎的分佈式存儲,絕對您花時間去學習。如果想深入研究的話,Google的GFS論文也是一定要讀的([url=]https://static.googleusercontent.com/media/research.google.com/en//archive/gfs-sosp2003.pdf[/url])。當然開源世界中還有很多的分佈式存儲,國內阿里巴巴的OceanBase也是很優秀的一個。

o 筆者建議:學習HDFS

資源調度框架:

Docker可是整整火了最近一兩年。各個公司都在發力基於Docker的容器解決方案,最有名的開源容器調度框架就是K8S了,但同樣著名的還有Hadoop的YARN和Apache Mesos。後兩者不僅可以調度容器集群,還可以調度非容器集群,非常值得我們學習。

o筆者建議:學習YARN

新手入門大數據,這有一條最完整的學習路徑

有一些通用的功能在所有主流大數據分佈式框架中都需要實現,比如服務發現、領導者選舉、分佈式鎖、KV存儲等。這些功能也就催生了分佈式協調框架的發展。最古老也是最有名的當屬Apache Zookeeper了,新一些的包括Consul,etcd等。學習大數據工程,分佈式協調框架是不能不瞭解的, 某種程度上還要深入瞭解。

o筆者建議:學習Zookeeper——太多大數據框架都需要它了,比如Kafka, Storm, HBase等

KV數據庫:

典型的就是memcache和Redis了,特別是Redis簡直是發展神速。其簡潔的API設計和高性能的TPS日益得到廣大用戶的青睞。即使是不學習大數據,學學Redis都是大有裨益的。

o筆者建議:學習Redis,如果C語言功底好的,最好熟讀源碼,反正源碼也不多

列式存儲數據庫:

筆者曾經花了很長的時間學習Oracle,但不得不承認當下關係型數據庫已經慢慢地淡出了人們的視野,有太多的方案可以替代rdbms了。人們針對行式存儲不適用於大數據ad-hoc查詢這種弊端開發出了列式存儲,典型的列式存儲數據庫就是開源社區的HBASE。實際上列式存儲的概念也是出自Google的一篇論文:Google BigTable,有興趣的話大家最好讀一下:[url=]https://static.googleusercontent.com/media/research.google.com/en//archive/bigtable-osdi06.pdf[/url]

o 筆者建議:學習HBASE,這是目前應用最廣泛的開源列式存儲

消息隊列:

大數據工程處理中消息隊列作為“削峰填谷”的主力系統是必不可少的,當前該領域內的解決方案有很多,包括ActiveMQ,Kafka等。國內阿里也開源了RocketMQ。這其中的翹楚當屬Apache Kafka了。Kafka的很多設計思想都特別契合分佈流式數據處理的設計理念。這也難怪,Kafka的原作者Jay Kreps可是當今實時流式處理方面的頂級大神。

o 筆者建議:學習Kafka,不僅僅好找工作(幾乎所有大數據招聘簡歷都要求會Kafka:-) ),還能觸類旁通進一步理解基於備份日誌方式的數據處理範型

新手入門大數據,這有一條最完整的學習路徑
新手入門大數據,這有一條最完整的學習路徑

後臺 回覆 01 麵肥拿走,記得 轉發或評論 一下 就好,謝謝支持95碼農

相關推薦

推薦中...