零基礎大數據學習路線指南,作個不禿頭的大數據工程師!

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

 

 
 

二,大數據裏面的角色node

角色一:大數據工程python

大數據工程須要解決數據的定義、收集、計算與保存的工做,所以大數據工程師們在設計和部署這樣的系統時首要考慮的是數據高可用的問題,即大數據工程系統須要實時地爲下游業務系統或分析系統提供數據服務;linux

角色二:大數據分析redis

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

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

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

 

三,大數據工程師數據庫

針對角色一:大數據工程說,對應的工做崗位就叫大數據工程師,對於大數據工程師而言,您至少要掌握如下技能:編程

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中的一個。

分佈式存儲框架:

雖然說MapReduce有些過期了,但Hadoop的另外一個基石HDFS依然堅挺,而且是開源社區最受歡迎的分佈式存儲,絕對您花時間去學習。

資源調度框架:

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

分佈式協調框架:

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

列式存儲數據庫:

曾經花了很長的時間學習Oracle,但不得不認可當下關係型數據庫已經慢慢地淡出了人們的視野,有太多的方案能夠替代rdbms了。人們針對行式存儲不適用於大數據ad-hoc查詢這種弊端開發出了列式存儲,典型的列式存儲數據庫就是開源社區的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、Caffe八、Keras九、CNTK十、Torch711等,其中又以TensorFlow領銜。

當前建議你們選取其中的一個框架進行學習,但以我對這些框架的瞭解,這些框架大多很方便地封裝了各類機器學習算法提供給用戶使用,但對於底層算法的瞭解其實並無太多可學習之處。所以仍是建議能夠從機器學習算法的原理來進行學習,好比:

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

 

五,大數據必備技能詳細

由於自己是偏Java應用方向的,因此整理的大數據必備技能詳細,也是偏向於大數據工程師方向。總共分爲五大部分,分別是:

離線計算Hadoop

流式計算Storm

內存計算Spark

機器學習算法

 

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聚類算法–地理位置聚類應用

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

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

相關文章
相關標籤/搜索