大資料最佳學習路線

擱淺記憶發表於2018-05-17
一,題記


要說當下IT行業什麼最火?ABC無出其右。所謂ABC者,AI + Big Data + Cloud也,即人工智慧、大資料和雲端計算(雲平臺)。每個領域目前都有行業領袖在引領前行,今天我們來討論下大資料Big Data這個方向。如果您感覺閱讀文字太累,可以點選下面音訊!

二,大資料裡面的角色


角色一:大資料工程


大資料工程需要解決資料的定義、收集、計算與儲存的工作,因此大資料工程師們在設計和部署這樣的系統時首要考慮的是資料高可用的問題,即大資料工程系統需要實時地為下游業務系統或分析系統提供資料服務;


角色二:大資料分析


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


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


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


三,大資料工程師


針對角色一:大資料工程說,對應的工作崗位就叫大資料工程師,對於大資料工程師而言,您至少要掌握以下技能:


linux基礎

因為大資料體系,基本都是開源軟體,這些開源軟體都是在開源的linux系統上執行的,所以你必須會基本的linux操作,比如使用者管理,許可權,shell程式設計之類的


一門JVM系語言

當前大資料生態JVM系語言類的比重極大,某種程度上說是壟斷也不為過。這裡我推薦大家學習Java或Scala,至於Clojure這樣的語言上手不易,其實並不推薦大家使用。另外,如今是“母以子貴”的年代,某個大資料框架會帶火它的程式語言的流行,比如Docker之於Go、Kafka之於Scala。


因此筆者這裡建議您至少要精通一門JVM系的語言。值得一提的,一定要弄懂這門語言的多執行緒模型和記憶體模型,很多大資料框架的處理模式其實在語言層面和多執行緒處理模型是類似的,只是大資料框架把它們引申到了多機分散式這個層面。


筆者建議:學習Java或Scala


計算處理框架:

嚴格來說,這分為離線批處理和流式處理。流式處理是未來的趨勢,建議大家一定要去學習;而離線批處理其實已經快過時了,它的分批處理思想無法處理無窮資料集,因此其適用範圍日益縮小。事實上,Google已經在公司內部正式廢棄了以MapReduce為代表的離線處理。


因此如果要學習大資料工程,掌握一門實時流式處理框架是必須的。當下主流的框架包括:Apache Samza, Apache Storm, Apache Spark Streaming以及最近一年風頭正勁的Apache Flink。當然Apache Kafka也推出了它自己的流式處理框架:Kafka Streams


筆者建議:學習Flink、Spark Streaming或Kafka Streams中的一個

熟讀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也是很優秀的一個。


筆者建議:學習HDFS


資源排程框架:

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


筆者建議:學習YARN


分散式協調框架:

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


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


KV資料庫:

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


筆者建議:學習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]


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


訊息佇列:

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


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


四,大資料分析師Or資料科學家


針對角色二:大資料分析,對應的工作崗位就叫大資料分析師或者資料科學家,作為資料科學家的我們必須要掌握以下技能:


數學功底:


微積分是嚴格要掌握的。不一定要掌握多元微積分,但一元微積分是必須要熟練掌握並使用的。另外線性代數一定要精通,特別是矩陣的運算、向量空間、秩等概念。當前機器學習框架中很多計算都需要用到矩陣的乘法、轉置或是求逆。雖然很多框架都直接提供了這樣的工具,但我們至少要了解內部的原型原理,比如如何高效判斷一個矩陣是否存在逆矩陣並如何計算等。


重溫同濟版《高等數學》,有條件可以去Coursea學習賓夕法尼亞大學的微積分課程

推薦學習Strang的線性代數:《Introduction to Linear Algebra》——這是最經典的教材,沒有之一!


數理統計:


概率論和各種統計學方法要做到基本掌握,比如貝葉斯概率如何計算?概率分佈是怎麼回事?雖不要求精通,但對相關背景和術語一定要了解


找一本《概率論》重新學習下


互動式資料分析框架:


這裡並不是指SQL或資料庫查詢,而是像Apache Hive或Apache Kylin這樣的分析互動框架。開源社群中有很多這樣類似的框架,可以使用傳統的資料分析方式對大資料進行資料分析或資料探勘。


筆者有過使用經驗的是Hive和Kylin。不過Hive特別是Hive1是基於MapReduce的,效能並非特別出色,而Kylin採用資料立方體的概念結合星型模型,可以做到很低延時的分析速度,況且Kylin是第一個研發團隊主力是中國人的Apache孵化專案,因此日益受到廣泛的關注。


首先學習Hive,有時間的話瞭解一下Kylin以及背後的資料探勘思想。


機器學習框架:


機器學習當前真是火爆宇宙了,人人都提機器學習和AI,但筆者一直認為機器學習恰似幾年前的雲端計算一樣,目前雖然火爆,但沒有實際的落地專案,可能還需要幾年的時間才能逐漸成熟。


不過在現在就開始儲備機器學習的知識總是沒有壞處的。說到機器學習的框架,大家耳熟能詳的有很多種, 信手拈來的就包括TensorFlow、Caffe8、Keras9、CNTK10、Torch711等,其中又以TensorFlow領銜。


筆者當前建議大家選取其中的一個框架進行學習,但以我對這些框架的瞭解,這些框架大多很方便地封裝了各種機器學習演算法提供給使用者使用,但對於底層演算法的瞭解其實並沒有太多可學習之處。因此筆者還是建議可以從機器學習演算法的原理來進行學習,比如:


目前機器學習領域最NB的入門課程:吳恩達博士的Machine Learning


五,大資料必備技能詳細


因為筆者本身是偏Java應用方向的,所以整理的大資料必備技能詳細,也是偏向於大資料工程師方向。總共分為五大部分,分別是:

  • 大資料技術基礎

  • 離線計算Hadoop

  • 流式計算Storm

  • 記憶體計算Spark

  • 機器學習演算法

大資料技術基礎

linux操作基礎

  • linux系統簡介與安裝

  • linux常用命令–檔案操作

  • linux常用命令–使用者管理與許可權

  • linux常用命令–系統管理

  • linux常用命令–免密登陸配置與網路管理

  • linux上常用軟體安裝

  • linux本地yum源配置及yum軟體安裝

  • linux防火牆配置

  • linux高階文字處理命令cut、sed、awk

  • linux定時任務crontab

shell程式設計

  • shell程式設計–基本語法

  • shell程式設計–流程控制

  • shell程式設計–函式

  • shell程式設計–綜合案例–自動化部署指令碼

記憶體資料庫redis

  • redis和nosql簡介

  • redis客戶端連線

  • redis的string型別資料結構操作及應用-物件快取

  • redis的list型別資料結構操作及應用案例-任務排程佇列

  • redis的hash及set資料結構操作及應用案例-購物車

  • redis的sortedset資料結構操作及應用案例-排行榜

布式協調服務zookeeper

  • zookeeper簡介及應用場景

  • zookeeper叢集安裝部署

  • zookeeper的資料節點與命令列操作

  • zookeeper的java客戶端基本操作及事件監聽

  • zookeeper核心機制及資料節點

  • zookeeper應用案例–分散式共享資源鎖

  • zookeeper應用案例–伺服器上下線動態感知

  • zookeeper的資料一致性原理及leader選舉機制

java高階特性增強

  • Java多執行緒基本知識

  • Java同步關鍵詞詳解

  • java併發包執行緒池及在開源軟體中的應用

  • Java併發包訊息隊裡及在開源軟體中的應用

  • Java JMS技術

  • Java動態代理反射

輕量級RPC框架開發

  • RPC原理學習

  • Nio原理學習

  • Netty常用API學習

  • 輕量級RPC框架需求分析及原理分析

  • 輕量級RPC框架開發

離線計算Hadoop

hadoop快速入門

  • hadoop背景介紹

  • 分散式系統概述

  • 離線資料分析流程介紹

  • 叢集搭建

  • 叢集使用初步

HDFS增強

  • HDFS的概念和特性

  • HDFS的shell(命令列客戶端)操作

  • HDFS的工作機制

  • NAMENODE的工作機制

  • java的api操作

  • 案例1:開發shell採集指令碼

MAPREDUCE詳解

  • 自定義hadoop的RPC框架

  • Mapreduce程式設計規範及示例編寫

  • Mapreduce程式執行模式及debug方法

  • mapreduce程式執行模式的內在機理

  • mapreduce運算框架的主體工作流程

  • 自定義物件的序列化方法

  • MapReduce程式設計案例

MAPREDUCE增強

  • Mapreduce排序

  • 自定義partitioner

  • Mapreduce的combiner

  • mapreduce工作機制詳解

MAPREDUCE實戰

  • maptask並行度機制-檔案切片

  • maptask並行度設定

  • 倒排索引

  • 共同好友

federation介紹和hive使用

  • Hadoop的HA機制

  • HA叢集的安裝部署

  • 叢集運維測試之Datanode動態上下線

  • 叢集運維測試之Namenode狀態切換管理

  • 叢集運維測試之資料塊的balance

  • HA下HDFS-API變化

  • hive簡介

  • hive架構

  • hive安裝部署

  • hvie初使用

hive增強和flume介紹

  • HQL-DDL基本語法

  • HQL-DML基本語法

  • HIVE的join

  • HIVE 引數配置

  • HIVE 自定義函式和Transform

  • HIVE 執行HQL的例項分析

  • HIVE最佳實踐注意點

  • HIVE優化策略

  • HIVE實戰案例

  • Flume介紹

  • Flume的安裝部署

  • 案例:採集目錄到HDFS

  • 案例:採集檔案到HDFS

流式計算Storm

Storm從入門到精通

  • Storm是什麼

  • Storm架構分析

  • Storm架構分析

  • Storm程式設計模型、Tuple原始碼、併發度分析

  • Storm WordCount案例及常用Api分析

  • Storm叢集部署實戰

  • Storm+Kafka+Redis業務指標計算

  • Storm原始碼下載編譯

  • Strom叢集啟動及原始碼分析

  • Storm任務提交及原始碼分析

  • Storm資料傳送流程分析

  • Storm通訊機制分析

  • Storm訊息容錯機制及原始碼分析

  • Storm多stream專案分析

  • 編寫自己的流式任務執行框架

Storm上下游及架構整合

  • 訊息佇列是什麼

  • Kakfa核心元件

  • Kafka叢集部署實戰及常用命令

  • Kafka配置檔案梳理

  • Kakfa JavaApi學習

  • Kafka檔案儲存機制分析

  • Redis基礎及單機環境部署

  • Redis資料結構及典型案例

  • Flume快速入門

  • Flume+Kafka+Storm+Redis整合

記憶體計算Spark

scala程式設計

  • scala程式設計介紹

  • scala相關軟體安裝

  • scala基礎語法

  • scala方法和函式

  • scala函數語言程式設計特點

  • scala陣列和集合

  • scala程式設計練習(單機版WordCount)

  • scala物件導向

  • scala模式匹配

  • actor程式設計介紹

  • option和偏函式

  • 實戰:actor的併發WordCount

  • 柯里化

  • 隱式轉換

AKKA與RPC

  • Akka併發程式設計框架

  • 實戰:RPC程式設計實戰

Spark快速入門

  • spark介紹

  • spark環境搭建

  • RDD簡介

  • RDD的轉換和動作

  • 實戰:RDD綜合練習

  • RDD高階運算元

  • 自定義Partitioner

  • 實戰:網站訪問次數

  • 廣播變數

  • 實戰:根據IP計算歸屬地

  • 自定義排序

  • 利用JDBC RDD實現資料匯入匯出

  • WorldCount執行流程詳解

RDD詳解

  • RDD依賴關係

  • RDD快取機制

  • RDD的Checkpoint檢查點機制

  • Spark任務執行過程分析

  • RDD的Stage劃分

Spark-Sql應用

  • Spark-SQL

  • Spark結合Hive

  • DataFrame

  • 實戰:Spark-SQL和DataFrame案例

SparkStreaming應用實戰

  • Spark-Streaming簡介

  • Spark-Streaming程式設計

  • 實戰:StageFulWordCount

  • Flume結合Spark Streaming

  • Kafka結合Spark Streaming

  • 視窗函式

  • ELK技術棧介紹

  • ElasticSearch安裝和使用

  • Storm架構分析

  • Storm程式設計模型、Tuple原始碼、併發度分析

  • Storm WordCount案例及常用Api分析

Spark核心原始碼解析

  • Spark原始碼編譯

  • Spark遠端debug

  • Spark任務提交行流程原始碼分析

  • Spark通訊流程原始碼分析

  • SparkContext建立過程原始碼分析

  • DriverActor和ClientActor通訊過程原始碼分析

  • Worker啟動Executor過程原始碼分析

  • Executor向DriverActor註冊過程原始碼分析

  • Executor向Driver註冊過程原始碼分析

  • DAGScheduler和TaskScheduler原始碼分析

  • Shuffle過程原始碼分析

  • Task執行過程原始碼分析

機器學習演算法

python及numpy庫

  • 機器學習簡介

  • 機器學習與python

  • python語言–快速入門

  • python語言–資料型別詳解

  • python語言–流程控制語句

  • python語言–函式使用

  • python語言–模組和包

  • phthon語言–物件導向

  • python機器學習演算法庫–numpy

  • 機器學習必備數學知識–概率論

常用演算法實現

  • knn分類演算法–演算法原理

  • knn分類演算法–程式碼實現

  • knn分類演算法–手寫字識別案例

  • lineage迴歸分類演算法–演算法原理

  • lineage迴歸分類演算法–演算法實現及demo

  • 樸素貝葉斯分類演算法–演算法原理

  • 樸素貝葉斯分類演算法–演算法實現

  • 樸素貝葉斯分類演算法–垃圾郵件識別應用案例

  • kmeans聚類演算法–演算法原理

  • kmeans聚類演算法–演算法實現

  • kmeans聚類演算法–地理位置聚類應用

  • 決策樹分類演算法–演算法原理

  • 決策樹分類演算法–演算法實現

相關文章