一,題記
要說當下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聚類算法–地理位置聚類應用
- 決策樹分類算法–算法原理
- 決策樹分類算法–算法實現
學習路線能看懂的話,那就來看看java和大數據的視頻教程如何? 符不符合你的口味!
小編覺得應該都比較符合大眾口味,大家可以私信“資料”來進行獲取吧!
閱讀更多 IT小松鼠 的文章