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