一继谚,題記
要說當(dāng)下 IT 行業(yè)什么最火?ABC 無出其右阵幸。所謂 ABC 者花履,AI + Big Data + Cloud 也,即人工智能挚赊、大數(shù)據(jù)和云計算 (云平臺)诡壁。每個領(lǐng)域目前都有行業(yè)領(lǐng)袖在引領(lǐng)前行,今天我們來討論下大數(shù)據(jù) Big Data 這個方向荠割。
角色一:大數(shù)據(jù)工程
大數(shù)據(jù)工程需要解決數(shù)據(jù)的定義、收集涨共、計算與保存的工作纽帖,因此大數(shù)據(jù)工程師們在設(shè)計和部署這樣的系統(tǒng)時首要考慮的是數(shù)據(jù)高可用的問題,即大數(shù)據(jù)工程系統(tǒng)需要實(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ù)的價值室囊,具體可能包括:趨勢分析雕崩、模型建立以及預(yù)測分析等。
這兩類角色相互依存但又獨(dú)立運(yùn)作融撞,何意盼铁?沒有大數(shù)據(jù)工程,大數(shù)據(jù)分析便無從談起尝偎;但倘若沒有大數(shù)據(jù)分析饶火,我也實(shí)在想不出大數(shù)據(jù)工程存在的理由。這就類似于結(jié)婚和談戀愛——戀愛的目的是為了結(jié)婚致扯,且不以結(jié)婚為目的的談戀愛都是耍流氓肤寝。
簡單總結(jié)一下,大數(shù)據(jù)工程角色需要考慮數(shù)據(jù)的收集抖僵、計算 (或是處理) 和保存鲤看;大數(shù)據(jù)分析角色則是執(zhí)行數(shù)據(jù)的高級計算。
針對角色一:大數(shù)據(jù)工程說义桂,對應(yīng)的工作崗位就叫大數(shù)據(jù)工程師,對于大數(shù)據(jù)工程師而言蹈垢,您至少要掌握以下技能:
linux 基礎(chǔ)
因?yàn)榇髷?shù)據(jù)體系慷吊,基本都是開源軟件,這些開源軟件都是在開源的 linux 系統(tǒng)上運(yùn)行的耘婚,所以你必須會基本的 linux 操作罢浇,比如用戶管理陆赋,權(quán)限沐祷,shell 編程之類的
一門 JVM 系語言:
當(dāng)前大數(shù)據(jù)生態(tài) JVM 系語言類的比重極大,某種程度上說是壟斷也不為過攒岛。這里我推薦大家學(xué)習(xí) Java 或 Scala赖临,至于 Clojure 這樣的語言上手不易,其實(shí)并不推薦大家使用灾锯。另外兢榨,如今是“母以子貴”的年代,某個大數(shù)據(jù)框架會帶火它的編程語言的流行顺饮,比如 Docker 之于 Go吵聪、Kafka 之于 Scala。
因此筆者這里建議您至少要精通一門 JVM 系的語言兼雄。值得一提的吟逝,一定要弄懂這門語言的多線程模型和內(nèi)存模型,很多大數(shù)據(jù)框架的處理模式其實(shí)在語言層面和多線程處理模型是類似的赦肋,只是大數(shù)據(jù)框架把它們引申到了多機(jī)分布式這個層面块攒。
筆者建議:學(xué)習(xí) Java 或 Scala
計算處理框架:
嚴(yán)格來說励稳,這分為離線批處理和流式處理。流式處理是未來的趨勢囱井,建議大家一定要去學(xué)習(xí)驹尼;而離線批處理其實(shí)已經(jīng)快過時了,它的分批處理思想無法處理無窮數(shù)據(jù)集庞呕,因此其適用范圍日益縮小新翎。事實(shí)上,Google 已經(jīng)在公司內(nèi)部正式廢棄了以 MapReduce 為代表的離線處理住练。
因此如果要學(xué)習(xí)大數(shù)據(jù)工程料祠,掌握一門實(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 中的一個
熟讀 Google 大神的這篇文章:《The world beyond batch: Streaming 101》
分布式存儲框架:
雖說 MapReduce 有些過時了,但 Hadoop 的另一個基石 HDFS 依然堅挺妆绞,并且是開源社區(qū)最受歡迎的分布式存儲顺呕,絕對您花時間去學(xué)習(xí)。如果想深入研究的話括饶,Google 的 GFS 論文也是一定要讀的當(dāng)然開源世界中還有很多的分布式存儲株茶,國內(nèi)阿里巴巴的 OceanBase 也是很優(yōu)秀的一個。
筆者建議:學(xué)習(xí) HDFS
資源調(diào)度框架:
Docker 可是整整火了最近一兩年图焰。各個公司都在發(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 存儲等。這些功能也就催生了分布式協(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è)計和高性能的 TPS 日益得到廣大用戶的青睞憔狞。即使是不學(xué)習(xí)大數(shù)據(jù)蝴悉,學(xué)學(xué) Redis 都是大有裨益的。
筆者建議:學(xué)習(xí) Redis瘾敢,如果 C 語言功底好的拍冠,最好熟讀源碼,反正源碼也不多
列式存儲數(shù)據(jù)庫:
筆者曾經(jīng)花了很長的時間學(xué)習(xí) Oracle簇抵,但不得不承認(rèn)當(dāng)下關(guān)系型數(shù)據(jù)庫已經(jīng)慢慢地淡出了人們的視野庆杜,有太多的方案可以替代 rdbms 了。人們針對行式存儲不適用于大數(shù)據(jù) ad-hoc 查詢這種弊端開發(fā)出了列式存儲碟摆,典型的列式存儲數(shù)據(jù)庫就是開源社區(qū)的 HBASE晃财。實(shí)際上列式存儲的概念也是出自 Google 的一篇論文:Google BigTable,有興趣的話大家最好讀一下
筆者建議:學(xué)習(xí) HBASE典蜕,這是目前應(yīng)用最廣泛的開源列式存儲
消息隊(duì)列:
大數(shù)據(jù)工程處理中消息隊(duì)列作為“削峰填谷”的主力系統(tǒng)是必不可少的断盛,當(dāng)前該領(lǐng)域內(nèi)的解決方案有很多,包括 ActiveMQ愉舔,Kafka 等钢猛。國內(nèi)阿里也開源了 RocketMQ。這其中的翹楚當(dāng)屬 Apache Kafka 了轩缤。Kafka 的很多設(shè)計思想都特別契合分布流式數(shù)據(jù)處理的設(shè)計理念命迈。這也難怪,Kafka 的原作者 Jay Kreps 可是當(dāng)今實(shí)時流式處理方面的頂級大神火的。
筆者建議:學(xué)習(xí) Kafka壶愤,不僅僅好找工作 (幾乎所有大數(shù)據(jù)招聘簡歷都要求會 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í)框架中很多計算都需要用到矩陣的乘法、轉(zhuǎn)置或是求逆溉躲。雖然很多框架都直接提供了這樣的工具榜田,但我們至少要了解內(nèi)部的原型原理益兄,比如如何高效判斷一個矩陣是否存在逆矩陣并如何計算等。
重溫同濟(jì)版《高等數(shù)學(xué)》箭券,有條件可以去 Coursea 學(xué)習(xí)賓夕法尼亞大學(xué)的微積分課程
推薦學(xué)習(xí) Strang 的線性代數(shù):《Introduction to Linear Algebra》——這是最經(jīng)典的教材净捅,沒有之一!
數(shù)理統(tǒng)計:
概率論和各種統(tǒng)計學(xué)方法要做到基本掌握辩块,比如貝葉斯概率如何計算蛔六?概率分布是怎么回事?雖不要求精通废亭,但對相關(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é)合星型模型,可以做到很低延時的分析速度坏匪,況且 Kylin 是第一個研發(fā)團(tuán)隊(duì)主力是中國人的 Apache 孵化項(xiàng)目拟逮,因此日益受到廣泛的關(guān)注。
首先學(xué)習(xí) Hive适滓,有時間的話了解一下 Kylin 以及背后的數(shù)據(jù)挖掘思想敦迄。
機(jī)器學(xué)習(xí)框架:
機(jī)器學(xué)習(xí)當(dāng)前真是火爆宇宙了,人人都提機(jī)器學(xué)習(xí)和 AI凭迹,但筆者一直認(rèn)為機(jī)器學(xué)習(xí)恰似幾年前的云計算一樣罚屋,目前雖然火爆,但沒有實(shí)際的落地項(xiàng)目嗅绸,可能還需要幾年的時間才能逐漸成熟脾猛。
不過在現(xiàn)在就開始儲備機(jī)器學(xué)習(xí)的知識總是沒有壞處的。說到機(jī)器學(xué)習(xí)的框架鱼鸠,大家耳熟能詳?shù)挠泻芏喾N, 信手拈來的就包括 TensorFlow猛拴、Caffe8、Keras9蚀狰、CNTK10愉昆、Torch711 等,其中又以 TensorFlow 領(lǐng)銜麻蹋。
筆者當(dāng)前建議大家選取其中的一個框架進(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
因?yàn)楣P者本身是偏 Java 應(yīng)用方向的堪侯,所以整理的大數(shù)據(jù)必備技能詳細(xì)嚎尤,也是偏向于大數(shù)據(jù)工程師方向《陡瘢總共分為五大部分诺苹,分別是:
大數(shù)據(jù)技術(shù)基礎(chǔ)
離線計算 Hadoop
流式計算 Storm
內(nèi)存計算 Spark
機(jī)器學(xué)習(xí)算法
linux 系統(tǒng)簡介與安裝
linux 常用命令–文件操作
linux 常用命令–用戶管理與權(quán)限
linux 常用命令–系統(tǒng)管理
linux 常用命令–免密登陸配置與網(wǎng)絡(luò)管理
linux 上常用軟件安裝
linux 本地 yum 源配置及 yum 軟件安裝
linux 防火墻配置
linux 高級文本處理命令 cut、sed雹拄、awk
linux 定時任務(wù) crontab
shell 編程–基本語法
shell 編程–流程控制
shell 編程–函數(shù)
shell 編程–綜合案例–自動化部署腳本
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ù)器上下線動態(tài)感知
zookeeper 的數(shù)據(jù)一致性原理及 leader 選舉機(jī)制
Java 多線程基本知識
Java 同步關(guān)鍵詞詳解
java 并發(fā)包線程池及在開源軟件中的應(yīng)用
Java 并發(fā)包消息隊(duì)里及在開源軟件中的應(yīng)用
Java JMS 技術(shù)
Java 動態(tài)代理反射
RPC 原理學(xué)習(xí)
Nio 原理學(xué)習(xí)
Netty 常用 API 學(xué)習(xí)
輕量級 RPC 框架需求分析及原理分析
輕量級 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)算框架的主體工作流程
自定義對象的序列化方法
MapReduce 編程案例
Mapreduce 排序
自定義 partitioner
Mapreduce 的 combiner
mapreduce 工作機(jī)制詳解
maptask 并行度機(jī)制 - 文件切片
maptask 并行度設(shè)置
倒排索引
共同好友
Hadoop 的 HA 機(jī)制
HA 集群的安裝部署
集群運(yùn)維測試之 Datanode 動態(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)計算
Storm 源碼下載編譯
Strom 集群啟動及源碼分析
Storm 任務(wù)提交及源碼分析
Storm 數(shù)據(jù)發(fā)送流程分析
Storm 通信機(jī)制分析
Storm 消息容錯機(jī)制及源碼分析
Storm 多 stream 項(xiàng)目分析
編寫自己的流式任務(wù)執(zhí)行框架
消息隊(duì)列是什么
Kakfa 核心組件
Kafka 集群部署實(shí)戰(zhàn)及常用命令
Kafka 配置文件梳理
Kakfa JavaApi 學(xué)習(xí)
Kafka 文件存儲機(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)換和動作
實(shí)戰(zhàn):RDD 綜合練習(xí)
RDD 高級算子
自定義 Partitioner
實(shí)戰(zhàn):網(wǎng)站訪問次數(shù)
廣播變量
實(shí)戰(zhàn):根據(jù) IP 計算歸屬地
自定義排序
利用 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 啟動 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é)知識–概率論
knn 分類算法–算法原理
knn 分類算法–代碼實(shí)現(xiàn)
knn 分類算法–手寫字識別案例
lineage 回歸分類算法–算法原理
lineage 回歸分類算法–算法實(shí)現(xiàn)及 demo
樸素貝葉斯分類算法–算法原理
樸素貝葉斯分類算法–算法實(shí)現(xiàn)
樸素貝葉斯分類算法–垃圾郵件識別應(yīng)用案例
kmeans 聚類算法–算法原理
kmeans 聚類算法–算法實(shí)現(xiàn)
kmeans 聚類算法–地理位置聚類應(yīng)用
決策樹分類算法–算法原理
決策樹分類算法–算法實(shí)現(xiàn)
來源:架構(gòu)師小秘圈
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)势篡,非商業(yè)轉(zhuǎn)載請注明出處翩肌。