一,題記
要說當(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ù)的定義、收集、計(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ù)水平,所以對(duì)于大數(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í)計(jì)算。
針對(duì)角色一:大數(shù)據(jù)工程說,對(duì)應(yīng)的工作崗位就叫大數(shù)據(jù)工程師,對(duì)于大數(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è)
熟讀 Google 大神的這篇文章:《The world beyond batch: Streaming 101》
分布式存儲(chǔ)框架:
雖說 MapReduce 有些過時(shí)了,但 Hadoop 的另一個(gè)基石 HDFS 依然堅(jiān)挺,并且是開源社區(qū)最受歡迎的分布式存儲(chǔ),絕對(duì)您花時(shí)間去學(xué)習(xí)。如果想深入研究的話,Google 的 GFS 論文也是一定要讀的當(dāng)然開源世界中還有很多的分布式存儲(chǔ),國內(nèi)阿里巴巴的 OceanBase 也是很優(yōu)秀的一個(gè)。
筆者建議:學(xué)習(xí) HDFS
資源調(diào)度框架:
Docker 可是整整火了最近一兩年。各個(gè)公司都在發(fā)力基于 Docker 的容器解決方案,最有名的開源容器調(diào)度框架就是 K8S 了,但同樣著名的還有 Hadoop 的 YARN 和 Apache Mesos。后兩者不僅可以調(diào)度容器集群,還可以調(diào)度非容器集群,非常值得我們學(xué)習(xí)。
筆者建議:學(xué)習(xí) YARN
分布式協(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)框架是不能不了解的, 某種程度上還要深入了解。
筆者建議:學(xué)習(xí) Zookeeper——太多大數(shù)據(jù)框架都需要它了,比如 Kafka, Storm, HBase 等
KV 數(shù)據(jù)庫:
典型的就是 memcache 和 Redis 了,特別是 Redis 簡直是發(fā)展神速。其簡潔的 API 設(shè)計(jì)和高性能的 TPS 日益得到廣大用戶的青睞。即使是不學(xué)習(xí)大數(shù)據(jù),學(xué)學(xué) Redis 都是大有裨益的。
筆者建議:學(xué)習(xí) Redis,如果 C 語言功底好的,最好熟讀源碼,反正源碼也不多
列式存儲(chǔ)數(shù)據(jù)庫:
筆者曾經(jīng)花了很長的時(shí)間學(xué)習(xí) Oracle,但不得不承認(rèn)當(dāng)下關(guān)系型數(shù)據(jù)庫已經(jīng)慢慢地淡出了人們的視野,有太多的方案可以替代 rdbms 了。人們針對(duì)行式存儲(chǔ)不適用于大數(shù)據(jù) ad-hoc 查詢這種弊端開發(fā)出了列式存儲(chǔ),典型的列式存儲(chǔ)數(shù)據(jù)庫就是開源社區(qū)的 HBASE。實(shí)際上列式存儲(chǔ)的概念也是出自 Google 的一篇論文:Google BigTable,有興趣的話大家最好讀一下
筆者建議:學(xué)習(xí) HBASE,這是目前應(yīng)用最廣泛的開源列式存儲(chǔ)
消息隊(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í)流式處理方面的頂級(jí)大神。
筆者建議:學(xué)習(xí) Kafka,不僅僅好找工作 (幾乎所有大數(shù)據(jù)招聘簡歷都要求會(huì) Kafka:-)),還能觸類旁通進(jìn)一步理解基于備份日志方式的數(shù)據(jù)處理范型
四,大數(shù)據(jù)分析師 Or 數(shù)據(jù)科學(xué)家
針對(duì)角色二:大數(shù)據(jù)分析,對(duì)應(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ì)算?概率分布是怎么回事?雖不要求精通,但對(duì)相關(guān)背景和術(shù)語一定要了解
找一本《概率論》重新學(xué)習(xí)下
交互式數(shù)據(jù)分析框架:
這里并不是指 SQL 或數(shù)據(jù)庫查詢,而是像 Apache Hive 或 Apache Kylin 這樣的分析交互框架。開源社區(qū)中有很多這樣類似的框架,可以使用傳統(tǒng)的數(shù)據(jù)分析方式對(duì)大數(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í),但以我對(duì)這些框架的了解,這些框架大多很方便地封裝了各種機(jī)器學(xué)習(xí)算法提供給用戶使用,但對(duì)于底層算法的了解其實(shí)并沒有太多可學(xué)習(xí)之處。因此筆者還是建議可以從機(jī)器學(xué)習(xí)算法的原理來進(jìn)行學(xué)習(xí),比如:
目前機(jī)器學(xué)習(xí)領(lǐng)域最 NB 的入門課程:吳恩達(dá)博士的 Machine Learning
因?yàn)楣P者本身是偏 Java 應(yīng)用方向的,所以整理的大數(shù)據(jù)必備技能詳細(xì),也是偏向于大數(shù)據(jù)工程師方向。總共分為五大部分,分別是:
大數(shù)據(jù)技術(shù)基礎(chǔ)
離線計(jì)算 Hadoop
流式計(jì)算 Storm
內(nèi)存計(jì)算 Spark
機(jī)器學(xué)習(xí)算法
linux 系統(tǒng)簡介與安裝
linux 常用命令–文件操作
linux 常用命令–用戶管理與權(quán)限
linux 常用命令–系統(tǒng)管理
linux 常用命令–免密登陸配置與網(wǎng)絡(luò)管理
linux 上常用軟件安裝
linux 本地 yum 源配置及 yum 軟件安裝
linux 防火墻配置
linux 高級(jí)文本處理命令 cut、sed、awk
linux 定時(shí)任務(wù) crontab
shell 編程–基本語法
shell 編程–流程控制
shell 編程–函數(shù)
shell 編程–綜合案例–自動(dòng)化部署腳本
redis 和 nosql 簡介
redis 客戶端連接
redis 的 string 類型數(shù)據(jù)結(jié)構(gòu)操作及應(yīng)用 - 對(duì)象緩存
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ù)一致性原理及 leader 選舉機(jī)制
Java 多線程基本知識(shí)
Java 同步關(guān)鍵詞詳解
java 并發(fā)包線程池及在開源軟件中的應(yīng)用
Java 并發(fā)包消息隊(duì)里及在開源軟件中的應(yīng)用
Java JMS 技術(shù)
Java 動(dòng)態(tài)代理反射
RPC 原理學(xué)習(xí)
Nio 原理學(xué)習(xí)
Netty 常用 API 學(xué)習(xí)
輕量級(jí) RPC 框架需求分析及原理分析
輕量級(jí) RPC 框架開發(fā)
hadoop 背景介紹
分布式系統(tǒng)概述
離線數(shù)據(jù)分析流程介紹
集群搭建
集群使用初步
HDFS 的概念和特性
HDFS 的 shell(命令行客戶端) 操作
HDFS 的工作機(jī)制
NAMENODE 的工作機(jī)制
java 的 api 操作
案例 1:開發(fā) shell 采集腳本
自定義 hadoop 的 RPC 框架
Mapreduce 編程規(guī)范及示例編寫
Mapreduce 程序運(yùn)行模式及 debug 方法
mapreduce 程序運(yùn)行模式的內(nèi)在機(jī)理
mapreduce 運(yùn)算框架的主體工作流程
自定義對(duì)象的序列化方法
MapReduce 編程案例
Mapreduce 排序
自定義 partitioner
Mapreduce 的 combiner
mapreduce 工作機(jī)制詳解
maptask 并行度機(jī)制 - 文件切片
maptask 并行度設(shè)置
倒排索引
共同好友
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 初使用
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
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í)行框架
消息隊(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 整合
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 并發(fā)編程框架
實(shí)戰(zhàn):RPC 編程實(shí)戰(zhàn)
spark 介紹
spark 環(huán)境搭建
RDD 簡介
RDD 的轉(zhuǎn)換和動(dòng)作
實(shí)戰(zhàn):RDD 綜合練習(xí)
RDD 高級(jí)算子
自定義 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 依賴關(guān)系
RDD 緩存機(jī)制
RDD 的 Checkpoint 檢查點(diǎn)機(jī)制
Spark 任務(wù)執(zhí)行過程分析
RDD 的 Stage 劃分
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 遠(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í)簡介
機(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í)–概率論
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)
來源:架構(gòu)師小秘圈
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。