一,題記
要說當(dāng)下IT行業(yè)什么最火?ABC無出其右。所謂ABC者,AI + Big Data + Cloud也,即人工智能、大數(shù)據(jù)和云計(jì)算(云平臺(tái))。每個(gè)領(lǐng)域目前都有行業(yè)領(lǐng)袖在引領(lǐng)前行,今天我們來討論下大數(shù)據(jù)Big Data這個(gè)方向。
二,大數(shù)據(jù)里面的角色
角色一:大數(shù)據(jù)工程
大數(shù)據(jù)工程需要解決數(shù)據(jù)的定義、收集、計(jì)算與保存的工作,因此大數(shù)據(jù)工程師們在設(shè)計(jì)和部署這樣的系統(tǒng)時(shí)首要考慮的是數(shù)據(jù)高可用的問題,即大數(shù)據(jù)工程系統(tǒng)需要實(shí)時(shí)地為下游業(yè)務(wù)系統(tǒng)或分析系統(tǒng)提供數(shù)據(jù)服務(wù);
角色二:大數(shù)據(jù)分析
大數(shù)據(jù)分析角色定位于如何利用數(shù)據(jù)——即從大數(shù)據(jù)工程系統(tǒng)中接收到數(shù)據(jù)之后如何為企業(yè)或組織提供有產(chǎn)出的數(shù)據(jù)分析,并且確實(shí)能夠幫助到公司進(jìn)行業(yè)務(wù)改善或提升服務(wù)水平,所以對于大數(shù)據(jù)分析師來說,他們首要解決的問題是發(fā)現(xiàn)并利用數(shù)據(jù)的價(jià)值,具體可能包括:趨勢分析、模型建立以及預(yù)測分析等。
這兩類角色相互依存但又獨(dú)立運(yùn)作,何意?沒有大數(shù)據(jù)工程,大數(shù)據(jù)分析便無從談起;但倘若沒有大數(shù)據(jù)分析,我也實(shí)在想不出大數(shù)據(jù)工程存在的理由。這就類似于結(jié)婚和談戀愛——戀愛的目的是為了結(jié)婚,且不以結(jié)婚為目的的談戀愛都是耍流氓。
簡單總結(jié)一下,大數(shù)據(jù)工程角色需要考慮數(shù)據(jù)的收集、計(jì)算(或是處理)和保存;大數(shù)據(jù)分析角色則是執(zhí)行數(shù)據(jù)的高級計(jì)算。
三,大數(shù)據(jù)工程師
針對角色一:大數(shù)據(jù)工程說,對應(yīng)的工作崗位就叫大數(shù)據(jù)工程師,對于大數(shù)據(jù)工程師而言,您至少要掌握以下技能:
linux基礎(chǔ)
因?yàn)榇髷?shù)據(jù)體系,基本都是開源軟件,這些開源軟件都是在開源的linux系統(tǒng)上運(yùn)行的,所以你必須會(huì)基本的linux操作,比如用戶管理,權(quán)限,shell編程之類的
一門JVM系語言:
當(dāng)前大數(shù)據(jù)生態(tài)JVM系語言類的比重極大,某種程度上說是壟斷也不為過。這里我推薦大家學(xué)習(xí)Java或Scala,至于Clojure這樣的語言上手不易,其實(shí)并不推薦大家使用。另外,如今是“母以子貴”的年代,某個(gè)大數(shù)據(jù)框架會(huì)帶火它的編程語言的流行,比如Docker之于Go、Kafka之于Scala。
因此這里建議您至少要精通一門JVM系的語言。值得一提的,一定要弄懂這門語言的多線程模型和內(nèi)存模型,很多大數(shù)據(jù)框架的處理模式其實(shí)在語言層面和多線程處理模型是類似的,只是大數(shù)據(jù)框架把它們引申到了多機(jī)分布式這個(gè)層面。
建議:學(xué)習(xí)Java或Scala
計(jì)算處理框架:
嚴(yán)格來說,這分為離線批處理和流式處理。流式處理是未來的趨勢,建議大家一定要去學(xué)習(xí);而離線批處理其實(shí)已經(jīng)快過時(shí)了,它的分批處理思想無法處理無窮數(shù)據(jù)集,因此其適用范圍日益縮小。事實(shí)上,Google已經(jīng)在公司內(nèi)部正式廢棄了以MapReduce為代表的離線處理。
因此如果要學(xué)習(xí)大數(shù)據(jù)工程,掌握一門實(shí)時(shí)流式處理框架是必須的。當(dāng)下主流的框架包括:Apache Samza, Apache Storm, Apache Spark Streaming以及最近一年風(fēng)頭正勁的Apache Flink。當(dāng)然Apache Kafka也推出了它自己的流式處理框架:Kafka Streams
建議:學(xué)習(xí)Flink、Spark Streaming或Kafka Streams中的一個(gè)。
分布式存儲(chǔ)框架:
雖說MapReduce有些過時(shí)了,但Hadoop的另一個(gè)基石HDFS依然堅(jiān)挺,并且是開源社區(qū)最受歡迎的分布式存儲(chǔ),絕對您花時(shí)間去學(xué)習(xí)。
資源調(diào)度框架:
Docker可是整整火了最近一兩年。各個(gè)公司都在發(fā)力基于Docker的容器解決方案,最有名的開源容器調(diào)度框架就是K8S了,但同樣著名的還有Hadoop的YARN和Apache Mesos。后兩者不僅可以調(diào)度容器集群,還可以調(diào)度非容器集群,非常值得我們學(xué)習(xí)。
分布式協(xié)調(diào)框架:
有一些通用的功能在所有主流大數(shù)據(jù)分布式框架中都需要實(shí)現(xiàn),比如服務(wù)發(fā)現(xiàn)、領(lǐng)導(dǎo)者選舉、分布式鎖、KV存儲(chǔ)等。這些功能也就催生了分布式協(xié)調(diào)框架的發(fā)展。最古老也是最有名的當(dāng)屬Apache Zookeeper了,新一些的包括Consul,etcd等。學(xué)習(xí)大數(shù)據(jù)工程,分布式協(xié)調(diào)框架是不能不了解的, 某種程度上還要深入了解。
列式存儲(chǔ)數(shù)據(jù)庫:
曾經(jīng)花了很長的時(shí)間學(xué)習(xí)Oracle,但不得不承認(rèn)當(dāng)下關(guān)系型數(shù)據(jù)庫已經(jīng)慢慢地淡出了人們的視野,有太多的方案可以替代rdbms了。人們針對行式存儲(chǔ)不適用于大數(shù)據(jù)ad-hoc查詢這種弊端開發(fā)出了列式存儲(chǔ),典型的列式存儲(chǔ)數(shù)據(jù)庫就是開源社區(qū)的HBASE。
消息隊(duì)列:
大數(shù)據(jù)工程處理中消息隊(duì)列作為“削峰填谷”的主力系統(tǒng)是必不可少的,當(dāng)前該領(lǐng)域內(nèi)的解決方案有很多,包括ActiveMQ,Kafka等。國內(nèi)阿里也開源了RocketMQ。這其中的翹楚當(dāng)屬Apache Kafka了。Kafka的很多設(shè)計(jì)思想都特別契合分布流式數(shù)據(jù)處理的設(shè)計(jì)理念。這也難怪,Kafka的原作者Jay Kreps可是當(dāng)今實(shí)時(shí)流式處理方面的頂級大神。
建議:學(xué)習(xí)Kafka,不僅僅好找工作(幾乎所有大數(shù)據(jù)招聘簡歷都要求會(huì)Kafka:-) ),還能觸類旁通進(jìn)一步理解基于備份日志方式的數(shù)據(jù)處理范型
四,大數(shù)據(jù)分析師Or數(shù)據(jù)科學(xué)家
針對角色二:大數(shù)據(jù)分析,對應(yīng)的工作崗位就叫大數(shù)據(jù)分析師或者數(shù)據(jù)科學(xué)家,作為數(shù)據(jù)科學(xué)家的我們必須要掌握以下技能:
數(shù)學(xué)功底:
微積分是嚴(yán)格要掌握的。不一定要掌握多元微積分,但一元微積分是必須要熟練掌握并使用的。另外線性代數(shù)一定要精通,特別是矩陣的運(yùn)算、向量空間、秩等概念。當(dāng)前機(jī)器學(xué)習(xí)框架中很多計(jì)算都需要用到矩陣的乘法、轉(zhuǎn)置或是求逆。雖然很多框架都直接提供了這樣的工具,但我們至少要了解內(nèi)部的原型原理,比如如何高效判斷一個(gè)矩陣是否存在逆矩陣并如何計(jì)算等。
重溫同濟(jì)版《高等數(shù)學(xué)》,有條件可以去Coursea學(xué)習(xí)賓夕法尼亞大學(xué)的微積分課程
推薦學(xué)習(xí)Strang的線性代數(shù):《Introduction to Linear Algebra》——這是最經(jīng)典的教材,沒有之一!
數(shù)理統(tǒng)計(jì):
概率和各種統(tǒng)計(jì)學(xué)方法要做到基本掌握,比如貝葉斯概率如何計(jì)算?概率分布是怎么回事?雖不要求精通,但對相關(guān)背景和術(shù)語一定要了解
找一本《概率論》重新學(xué)習(xí)下
交互式數(shù)據(jù)分析框架:
這里并不是指SQL或數(shù)據(jù)庫查詢,而是像Apache Hive或Apache Kylin這樣的分析交互框架。開源社區(qū)中有很多這樣類似的框架,可以使用傳統(tǒng)的數(shù)據(jù)分析方式對大數(shù)據(jù)進(jìn)行數(shù)據(jù)分析或數(shù)據(jù)挖掘。
有過使用經(jīng)驗(yàn)的是Hive和Kylin。不過Hive特別是Hive1是基于MapReduce的,性能并非特別出色,而Kylin采用數(shù)據(jù)立方體的概念結(jié)合星型模型,可以做到很低延時(shí)的分析速度,況且Kylin是第一個(gè)研發(fā)團(tuán)隊(duì)主力是中國人的Apache孵化項(xiàng)目,因此日益受到廣泛的關(guān)注。
首先學(xué)習(xí)Hive,有時(shí)間的話了解一下Kylin以及背后的數(shù)據(jù)挖掘思想。
機(jī)器學(xué)習(xí)框架:
機(jī)器學(xué)習(xí)當(dāng)前真是火爆宇宙了,人人都提機(jī)器學(xué)習(xí)和AI,但筆者一直認(rèn)為機(jī)器學(xué)習(xí)恰似幾年前的云計(jì)算一樣,目前雖然火爆,但沒有實(shí)際的落地項(xiàng)目,可能還需要幾年的時(shí)間才能逐漸成熟。
不過在現(xiàn)在就開始儲(chǔ)備機(jī)器學(xué)習(xí)的知識(shí)總是沒有壞處的。說到機(jī)器學(xué)習(xí)的框架,大家耳熟能詳?shù)挠泻芏喾N, 信手拈來的就包括TensorFlow、Caffe8、Keras9、CNTK10、Torch711等,其中又以TensorFlow領(lǐng)銜。
當(dāng)前建議大家選取其中的一個(gè)框架進(jìn)行學(xué)習(xí),但以我對這些框架的了解,這些框架大多很方便地封裝了各種機(jī)器學(xué)習(xí)算法提供給用戶使用,但對于底層算法的了解其實(shí)并沒有太多可學(xué)習(xí)之處。因此還是建議可以從機(jī)器學(xué)習(xí)算法的原理來進(jìn)行學(xué)習(xí),比如:
目前機(jī)器學(xué)習(xí)領(lǐng)域最NB的入門課程:吳恩達(dá)博士的Machine Learning
想學(xué)習(xí)大數(shù)據(jù)或者想學(xué)習(xí)大數(shù)據(jù)的朋友,我整理了一套大數(shù)據(jù)的學(xué)習(xí)視頻這里免費(fèi)分享給大家,從入門到實(shí)戰(zhàn)都有,大家可以加微信:Lxiao_28獲取,還可以拉微信群交流學(xué)習(xí)!(備注領(lǐng)取資料,真實(shí)有效)。
五,大數(shù)據(jù)必備技能詳細(xì)
因?yàn)楸旧硎瞧獼ava應(yīng)用方向的,所以整理的大數(shù)據(jù)必備技能詳細(xì),也是偏向于大數(shù)據(jù)工程師方向。總共分為五大部分,分別是:
離線計(jì)算Hadoop
流式計(jì)算Storm
內(nèi)存計(jì)算Spark
機(jī)器學(xué)習(xí)算法
linux操作基礎(chǔ)
linux系統(tǒng)簡介與安裝
linux常用命令–文件操作
linux常用命令–用戶管理與權(quán)限
linux常用命令–系統(tǒng)管理
linux常用命令–免密登陸配置與網(wǎng)絡(luò)管理
linux上常用軟件安裝
linux本地yum源配置及yum軟件安裝
linux防火墻配置
linux高級文本處理命令cut、sed、awk
linux定時(shí)任務(wù)crontab
shell編程
shell編程–基本語法
shell編程–流程控制
shell編程–函數(shù)
shell編程–綜合案例–自動(dòng)化部署腳本
內(nèi)存數(shù)據(jù)庫redis
redis和nosql簡介
redis客戶端連接
redis的string類型數(shù)據(jù)結(jié)構(gòu)操作及應(yīng)用-對象緩存
redis的list類型數(shù)據(jù)結(jié)構(gòu)操作及應(yīng)用案例-任務(wù)調(diào)度隊(duì)列
redis的hash及set數(shù)據(jù)結(jié)構(gòu)操作及應(yīng)用案例-購物車
redis的sortedset數(shù)據(jù)結(jié)構(gòu)操作及應(yīng)用案例-排行榜
布式協(xié)調(diào)服務(wù)zookeeper
zookeeper簡介及應(yīng)用場景
zookeeper集群安裝部署
zookeeper的數(shù)據(jù)節(jié)點(diǎn)與命令行操作
zookeeper的java客戶端基本操作及事件監(jiān)聽
zookeeper核心機(jī)制及數(shù)據(jù)節(jié)點(diǎn)
zookeeper應(yīng)用案例–分布式共享資源鎖
zookeeper應(yīng)用案例–服務(wù)器上下線動(dòng)態(tài)感知
zookeeper的數(shù)據(jù)一致性原理及l(fā)eader選舉機(jī)制
java高級特性增強(qiáng)
Java多線程基本知識(shí)
Java同步關(guān)鍵詞詳解
java并發(fā)包線程池及在開源軟件中的應(yīng)用
Java并發(fā)包消息隊(duì)里及在開源軟件中的應(yīng)用
Java JMS技術(shù)
Java動(dòng)態(tài)代理反射
輕量級RPC框架開發(fā)
RPC原理學(xué)習(xí)
Nio原理學(xué)習(xí)
Netty常用API學(xué)習(xí)
輕量級RPC框架需求分析及原理分析
輕量級RPC框架開發(fā)
離線計(jì)算Hadoop
hadoop快速入門
hadoop背景介紹
分布式系統(tǒng)概述
離線數(shù)據(jù)分析流程介紹
集群搭建
集群使用初步
HDFS增強(qiáng)
HDFS的概念和特性
HDFS的shell(命令行客戶端)操作
HDFS的工作機(jī)制
NAMENODE的工作機(jī)制
java的api操作
案例1:開發(fā)shell采集腳本
MAPREDUCE詳解
自定義hadoop的RPC框架
Mapreduce編程規(guī)范及示例編寫
Mapreduce程序運(yùn)行模式及debug方法
mapreduce程序運(yùn)行模式的內(nèi)在機(jī)理
mapreduce運(yùn)算框架的主體工作流程
自定義對象的序列化方法
MapReduce編程案例
MAPREDUCE增強(qiáng)
Mapreduce排序
自定義partitioner
Mapreduce的combiner
mapreduce工作機(jī)制詳解
MAPREDUCE實(shí)戰(zhàn)
maptask并行度機(jī)制-文件切片
maptask并行度設(shè)置
倒排索引
共同好友
federation介紹和hive使用
Hadoop的HA機(jī)制
HA集群的安裝部署
集群運(yùn)維測試之Datanode動(dòng)態(tài)上下線
集群運(yùn)維測試之Namenode狀態(tài)切換管理
集群運(yùn)維測試之?dāng)?shù)據(jù)塊的balance
HA下HDFS-API變化
hive簡介
hive架構(gòu)
hive安裝部署
hvie初使用
hive增強(qiáng)和flume介紹
HQL-DDL基本語法
HQL-DML基本語法
HIVE的join
HIVE 參數(shù)配置
HIVE 自定義函數(shù)和Transform
HIVE 執(zhí)行HQL的實(shí)例分析
HIVE最佳實(shí)踐注意點(diǎn)
HIVE優(yōu)化策略
HIVE實(shí)戰(zhàn)案例
Flume介紹
Flume的安裝部署
案例:采集目錄到HDFS
案例:采集文件到HDFS
流式計(jì)算Storm
Storm從入門到精通
Storm是什么
Storm架構(gòu)分析
Storm架構(gòu)分析
Storm編程模型、Tuple源碼、并發(fā)度分析
Storm WordCount案例及常用Api分析
Storm集群部署實(shí)戰(zhàn)
Storm+Kafka+Redis業(yè)務(wù)指標(biāo)計(jì)算
Storm源碼下載編譯
Strom集群啟動(dòng)及源碼分析
Storm任務(wù)提交及源碼分析
Storm數(shù)據(jù)發(fā)送流程分析
Storm通信機(jī)制分析
Storm消息容錯(cuò)機(jī)制及源碼分析
Storm多stream項(xiàng)目分析
編寫自己的流式任務(wù)執(zhí)行框架
Storm上下游及架構(gòu)集成
消息隊(duì)列是什么
Kakfa核心組件
Kafka集群部署實(shí)戰(zhàn)及常用命令
Kafka配置文件梳理
Kakfa JavaApi學(xué)習(xí)
Kafka文件存儲(chǔ)機(jī)制分析
Redis基礎(chǔ)及單機(jī)環(huán)境部署
Redis數(shù)據(jù)結(jié)構(gòu)及典型案例
Flume快速入門
Flume+Kafka+Storm+Redis整合
內(nèi)存計(jì)算Spark
scala編程
scala編程介紹
scala相關(guān)軟件安裝
scala基礎(chǔ)語法
scala方法和函數(shù)
scala函數(shù)式編程特點(diǎn)
scala數(shù)組和集合
scala編程練習(xí)(單機(jī)版WordCount)
scala面向?qū)ο?/p>
scala模式匹配
actor編程介紹
option和偏函數(shù)
實(shí)戰(zhàn):actor的并發(fā)WordCount
柯里化
隱式轉(zhuǎn)換
AKKA與RPC
Akka并發(fā)編程框架
實(shí)戰(zhàn):RPC編程實(shí)戰(zhàn)
Spark快速入門
spark介紹
spark環(huán)境搭建
RDD簡介
RDD的轉(zhuǎn)換和動(dòng)作
實(shí)戰(zhàn):RDD綜合練習(xí)
RDD高級算子
自定義Partitioner
實(shí)戰(zhàn):網(wǎng)站訪問次數(shù)
廣播變量
實(shí)戰(zhàn):根據(jù)IP計(jì)算歸屬地
自定義排序
利用JDBC RDD實(shí)現(xiàn)數(shù)據(jù)導(dǎo)入導(dǎo)出
WorldCount執(zhí)行流程詳解
RDD詳解
RDD依賴關(guān)系
RDD緩存機(jī)制
RDD的Checkpoint檢查點(diǎn)機(jī)制
Spark任務(wù)執(zhí)行過程分析
RDD的Stage劃分
Spark-Sql應(yīng)用
Spark-SQL
Spark結(jié)合Hive
DataFrame
實(shí)戰(zhàn):Spark-SQL和DataFrame案例
SparkStreaming應(yīng)用實(shí)戰(zhàn)
Spark-Streaming簡介
Spark-Streaming編程
實(shí)戰(zhàn):StageFulWordCount
Flume結(jié)合Spark Streaming
Kafka結(jié)合Spark Streaming
窗口函數(shù)
ELK技術(shù)棧介紹
ElasticSearch安裝和使用
Storm架構(gòu)分析
Storm編程模型、Tuple源碼、并發(fā)度分析
Storm WordCount案例及常用Api分析
Spark核心源碼解析
Spark源碼編譯
Spark遠(yuǎn)程debug
Spark任務(wù)提交行流程源碼分析
Spark通信流程源碼分析
SparkContext創(chuàng)建過程源碼分析
DriverActor和ClientActor通信過程源碼分析
Worker啟動(dòng)Executor過程源碼分析
Executor向DriverActor注冊過程源碼分析
Executor向Driver注冊過程源碼分析
DAGScheduler和TaskScheduler源碼分析
Shuffle過程源碼分析
Task執(zhí)行過程源碼分析
機(jī)器學(xué)習(xí)算法
python及numpy庫
機(jī)器學(xué)習(xí)簡介
機(jī)器學(xué)習(xí)與python
python語言–快速入門
python語言–數(shù)據(jù)類型詳解
python語言–流程控制語句
python語言–函數(shù)使用
python語言–模塊和包
phthon語言–面向?qū)ο?/p>
python機(jī)器學(xué)習(xí)算法庫–numpy
機(jī)器學(xué)習(xí)必備數(shù)學(xué)知識(shí)–概率論
常用算法實(shí)現(xiàn)
knn分類算法–算法原理
knn分類算法–代碼實(shí)現(xiàn)
knn分類算法–手寫字識(shí)別案例
lineage回歸分類算法–算法原理
lineage回歸分類算法–算法實(shí)現(xiàn)及demo
樸素貝葉斯分類算法–算法原理
樸素貝葉斯分類算法–算法實(shí)現(xiàn)
樸素貝葉斯分類算法–垃圾郵件識(shí)別應(yīng)用案例
kmeans聚類算法–算法原理
kmeans聚類算法–算法實(shí)現(xiàn)
kmeans聚類算法–地理位置聚類應(yīng)用
決策樹分類算法–算法原理
決策樹分類算法–算法實(shí)現(xiàn)