大數(shù)據(jù)處理流程是怎樣的?大數(shù)據(jù)學(xué)習(xí)路線是什么?
大數(shù)據(jù)處理流程

上圖是一個(gè)簡(jiǎn)化的大數(shù)據(jù)處理流程圖,大數(shù)據(jù)處理的主要流程包括數(shù)據(jù)收集、數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)處理、數(shù)據(jù)應(yīng)用等主要環(huán)節(jié)。下面我們逐一對(duì)各個(gè)環(huán)節(jié)所需要的技術(shù)棧進(jìn)行講解:
1.1 數(shù)據(jù)收集
大數(shù)據(jù)處理的第一步是數(shù)據(jù)的收集?,F(xiàn)在的中大型項(xiàng)目通常采用微服務(wù)架構(gòu)進(jìn)行分布式部署,所以數(shù)據(jù)的采集需要在多臺(tái)服務(wù)器上進(jìn)行,且采集過程不能影響正常業(yè)務(wù)的開展。基于這種需求,就衍生了多種日志收集工具,如 Flume 、Logstash、Kibana 等,它們都能通過簡(jiǎn)單的配置完成復(fù)雜的數(shù)據(jù)收集和數(shù)據(jù)聚合。
1.2 數(shù)據(jù)存儲(chǔ)
收集到數(shù)據(jù)后,下一個(gè)問題就是:數(shù)據(jù)該如何進(jìn)行存儲(chǔ)?通常大家最為熟知是 MySQL、Oracle 等傳統(tǒng)的關(guān)系型數(shù)據(jù)庫,它們的優(yōu)點(diǎn)是能夠快速存儲(chǔ)結(jié)構(gòu)化的數(shù)據(jù),并支持隨機(jī)訪問。但大數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)通常是半結(jié)構(gòu)化(如日志數(shù)據(jù))、甚至是非結(jié)構(gòu)化的(如視頻、音頻數(shù)據(jù)),為了解決海量半結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)的存儲(chǔ),衍生了 Hadoop HDFS 、KFS、GFS 等分布式文件系統(tǒng),它們都能夠支持結(jié)構(gòu)化、半結(jié)構(gòu)和非結(jié)構(gòu)化數(shù)據(jù)的存儲(chǔ),并可以通過增加機(jī)器進(jìn)行橫向擴(kuò)展。
分布式文件系統(tǒng)完美地解決了海量數(shù)據(jù)存儲(chǔ)的問題,但是一個(gè)優(yōu)秀的數(shù)據(jù)存儲(chǔ)系統(tǒng)需要同時(shí)考慮數(shù)據(jù)存儲(chǔ)和訪問兩方面的問題,比如你希望能夠?qū)?shù)據(jù)進(jìn)行隨機(jī)訪問,這是傳統(tǒng)的關(guān)系型數(shù)據(jù)庫所擅長的,但卻不是分布式文件系統(tǒng)所擅長的,那么有沒有一種存儲(chǔ)方案能夠同時(shí)兼具分布式文件系統(tǒng)和關(guān)系型數(shù)據(jù)庫的優(yōu)點(diǎn),基于這種需求,就產(chǎn)生了 HBase、MongoDB。
1.3 數(shù)據(jù)分析
大數(shù)據(jù)處理最重要的環(huán)節(jié)就是數(shù)據(jù)分析,數(shù)據(jù)分析通常分為兩種:批處理和流處理。
批處理:對(duì)一段時(shí)間內(nèi)海量的離線數(shù)據(jù)進(jìn)行統(tǒng)一的處理,對(duì)應(yīng)的處理框架有 Hadoop MapReduce、Spark、Flink 等;
流處理:對(duì)運(yùn)動(dòng)中的數(shù)據(jù)進(jìn)行處理,即在接收數(shù)據(jù)的同時(shí)就對(duì)其進(jìn)行處理,對(duì)應(yīng)的處理框架有 Storm、Spark Streaming、Flink Streaming 等。
批處理和流處理各有其適用的場(chǎng)景,時(shí)間不敏感或者硬件資源有限,可以采用批處理;時(shí)間敏感和及時(shí)性要求高就可以采用流處理。隨著服務(wù)器硬件的價(jià)格越來越低和大家對(duì)及時(shí)性的要求越來越高,流處理越來越普遍,如股票價(jià)格預(yù)測(cè)和電商運(yùn)營數(shù)據(jù)分析等。
上面的框架都是需要通過編程來進(jìn)行數(shù)據(jù)分析,那么如果你不是一個(gè)后臺(tái)工程師,是不是就不能進(jìn)行數(shù)據(jù)的分析了?當(dāng)然不是,大數(shù)據(jù)是一個(gè)非常完善的生態(tài)圈,有需求就有解決方案。為了能夠讓熟悉 SQL 的人員也能夠進(jìn)行數(shù)據(jù)的分析,查詢分析框架應(yīng)運(yùn)而生,常用的有 Hive 、Spark SQL 、Flink SQL、 Pig、Phoenix 等。這些框架都能夠使用標(biāo)準(zhǔn)的 SQL 或者 類 SQL 語法靈活地進(jìn)行數(shù)據(jù)的查詢分析。這些 SQL 經(jīng)過解析優(yōu)化后轉(zhuǎn)換為對(duì)應(yīng)的作業(yè)程序來運(yùn)行,如 Hive 本質(zhì)上就是將 SQL 轉(zhuǎn)換為 MapReduce 作業(yè),Spark SQL 將 SQL 轉(zhuǎn)換為一系列的 RDDs 和轉(zhuǎn)換關(guān)系(transformations),Phoenix 將 SQL 查詢轉(zhuǎn)換為一個(gè)或多個(gè) HBase Scan。
1.4 數(shù)據(jù)應(yīng)用
數(shù)據(jù)分析完成后,接下來就是數(shù)據(jù)應(yīng)用的范疇,這取決于你實(shí)際的業(yè)務(wù)需求。比如你可以將數(shù)據(jù)進(jìn)行可視化展現(xiàn),或者將數(shù)據(jù)用于優(yōu)化你的推薦算法,這種運(yùn)用現(xiàn)在很普遍,比如短視頻個(gè)性化推薦、電商商品推薦、頭條新聞推薦等。當(dāng)然你也可以將數(shù)據(jù)用于訓(xùn)練你的機(jī)器學(xué)習(xí)模型,這些都屬于其他領(lǐng)域的范疇,都有著對(duì)應(yīng)的框架和技術(shù)棧進(jìn)行處理,這里就不一一贅述。
1.5 其他框架
上面是一個(gè)標(biāo)準(zhǔn)的大數(shù)據(jù)處理流程所用到的技術(shù)框架。但是實(shí)際的大數(shù)據(jù)處理流程比上面復(fù)雜很多,針對(duì)大數(shù)據(jù)處理中的各種復(fù)雜問題分別衍生了各類框架:
單機(jī)的處理能力都是存在瓶頸的,所以大數(shù)據(jù)框架都是采用集群模式進(jìn)行部署,為了更方便的進(jìn)行集群的部署、監(jiān)控和管理,衍生了 Ambari、Cloudera Manager 等集群管理工具;
想要保證集群高可用,需要用到 ZooKeeper ,ZooKeeper 是最常用的分布式協(xié)調(diào)服務(wù),它能夠解決大多數(shù)集群?jiǎn)栴},包括首領(lǐng)選舉、失敗恢復(fù)、元數(shù)據(jù)存儲(chǔ)及其一致性保證。同時(shí)針對(duì)集群資源管理的需求,又衍生了 Hadoop YARN ;
復(fù)雜大數(shù)據(jù)處理的另外一個(gè)顯著的問題是,如何調(diào)度多個(gè)復(fù)雜的并且彼此之間存在依賴關(guān)系的作業(yè)?基于這種需求,產(chǎn)生了 Azkaban 和 Oozie 等工作流調(diào)度框架;
大數(shù)據(jù)流處理中使用的比較多的另外一個(gè)框架是 Kafka,它可以用于消峰,避免在秒殺等場(chǎng)景下并發(fā)數(shù)據(jù)對(duì)流處理程序造成沖擊;
另一個(gè)常用的框架是 Sqoop ,主要是解決了數(shù)據(jù)遷移的問題,它能夠通過簡(jiǎn)單的命令將關(guān)系型數(shù)據(jù)庫中的數(shù)據(jù)導(dǎo)入到 HDFS 、Hive 或 HBase 中,或者從 HDFS 、Hive 導(dǎo)出到關(guān)系型數(shù)據(jù)庫上。
學(xué)習(xí)路線
介紹完大數(shù)據(jù)框架,接著就可以介紹其對(duì)應(yīng)的學(xué)習(xí)路線了,主要分為以下幾個(gè)方面:
2.1 語言基礎(chǔ)
1. Java
大數(shù)據(jù)框架大多采用 Java 語言進(jìn)行開發(fā),并且?guī)缀跞康目蚣芏紩?huì)提供 Java API 。Java 是目前比較主流的后臺(tái)開發(fā)語言,所以網(wǎng)上免費(fèi)的學(xué)習(xí)資源也比較多。如果你習(xí)慣通過書本進(jìn)行學(xué)習(xí),這里推薦以下入門書籍:
《Java 編程的邏輯》:這里一本國人編寫的系統(tǒng)入門 Java 的書籍,深入淺出,內(nèi)容全面;
《Java 核心技術(shù)》:目前最新的是第 10 版,有卷一 和卷二 兩冊(cè),卷二可以選擇性閱讀,因?yàn)槠渲泻芏嗾鹿?jié)的內(nèi)容在實(shí)際開發(fā)中很少用到。
目前大多數(shù)框架要求 Java 版本至少是 1.8,這是由于 Java 1.8 提供了函數(shù)式編程,使得可以用更精簡(jiǎn)的代碼來實(shí)現(xiàn)之前同樣的功能,比如你調(diào)用 Spark API,使用 1.8 可能比 1.7 少數(shù)倍的代碼,所以這里額外推薦閱讀 《Java 8 實(shí)戰(zhàn)》 這本書籍。
2. Scala
Scala 是一門綜合了面向?qū)ο蠛秃瘮?shù)式編程概念的靜態(tài)類型的編程語言,它運(yùn)行在 Java 虛擬機(jī)上,可以與所有的 Java 類庫無縫協(xié)作,著名的 Kafka 就是采用 Scala 語言進(jìn)行開發(fā)的。
為什么需要學(xué)習(xí) Scala 語言 ?這是因?yàn)楫?dāng)前最火的計(jì)算框架 Flink 和 Spark 都提供了 Scala 語言的接口,使用它進(jìn)行開發(fā),比使用 Java 8 所需要的代碼更少,且 Spark 就是使用 Scala 語言進(jìn)行編寫的,學(xué)習(xí) Scala 可以幫助你更深入的理解 Spark。同樣的,對(duì)于習(xí)慣書本學(xué)習(xí)的小伙伴,這里推薦兩本入門書籍:
《快學(xué) Scala(第 2 版)》
《Scala 編程 (第 3 版)》
這里說明一下,如果你的時(shí)間有限,不一定要學(xué)完 Scala 才去學(xué)習(xí)大數(shù)據(jù)框架。Scala 確實(shí)足夠的精簡(jiǎn)和靈活,但其在語言復(fù)雜度上略大于 Java,例如隱式轉(zhuǎn)換和隱式參數(shù)等概念在初次涉及時(shí)會(huì)比較難以理解,所以你可以在了解 Spark 后再去學(xué)習(xí) Scala,因?yàn)轭愃齐[式轉(zhuǎn)換等概念在 Spark 源碼中有大量的運(yùn)用。
2.2 Linux 基礎(chǔ)
通常大數(shù)據(jù)框架都部署在 Linux 服務(wù)器上,所以需要具備一定的 Linux 知識(shí)。Linux 書籍當(dāng)中比較著名的是 《鳥哥私房菜》系列,這個(gè)系列很全面也很經(jīng)典。但如果你希望能夠快速地入門,這里推薦《Linux 就該這么學(xué)》,其網(wǎng)站上有免費(fèi)的電子書版本。
2.3 構(gòu)建工具
這里需要掌握的自動(dòng)化構(gòu)建工具主要是 Maven。Maven 在大數(shù)據(jù)場(chǎng)景中使用比較普遍,主要在以下三個(gè)方面:
管理項(xiàng)目 JAR 包,幫助你快速構(gòu)建大數(shù)據(jù)應(yīng)用程序;
不論你的項(xiàng)目是使用 Java 語言還是 Scala 語言進(jìn)行開發(fā),提交到集群環(huán)境運(yùn)行時(shí),都需要使用 Maven 進(jìn)行編譯打包;
大部分大數(shù)據(jù)框架使用 Maven 進(jìn)行源碼管理,當(dāng)你需要從其源碼編譯出安裝包時(shí),就需要使用到 Maven。
2.4 框架學(xué)習(xí)
1. 框架分類
上面我們介紹了很多大數(shù)據(jù)框架,這里進(jìn)行一下分類總結(jié):
日志收集框架:Flume 、Logstash、Kibana
分布式文件存儲(chǔ)系統(tǒng):Hadoop HDFS
數(shù)據(jù)庫系統(tǒng):Mongodb、HBase
分布式計(jì)算框架:
批處理框架:Hadoop MapReduce
流處理框架:Storm
混合處理框架:Spark、Flink
查詢分析框架:Hive 、Spark SQL 、Flink SQL、 Pig、Phoenix
集群資源管理器:Hadoop YARN
分布式協(xié)調(diào)服務(wù):Zookeeper
數(shù)據(jù)遷移工具:Sqoop
任務(wù)調(diào)度框架:Azkaban、Oozie
集群部署和監(jiān)控:Ambari、Cloudera Manager
上面列出的都是比較主流的大數(shù)據(jù)框架,社區(qū)都很活躍,學(xué)習(xí)資源也比較豐富。建議從 Hadoop 開始入門學(xué)習(xí),因?yàn)樗钦麄€(gè)大數(shù)據(jù)生態(tài)圈的基石,其它框架都直接或者間接依賴于 Hadoop 。接著就可以學(xué)習(xí)計(jì)算框架,Spark 和 Flink 都是比較主流的混合處理框架,Spark 出現(xiàn)得較早,所以其應(yīng)用也比較廣泛。Flink 是當(dāng)下最火熱的新一代的混合處理框架,其憑借眾多優(yōu)異的特性得到了眾多公司的青睞。兩者可以按照你個(gè)人喜好或者實(shí)際工作需要進(jìn)行學(xué)習(xí)。

圖片引用自?:https://www.edureka.co/blog/hadoop-ecosystem
至于其它框架,在學(xué)習(xí)上并沒有特定的先后順序,如果你的學(xué)習(xí)時(shí)間有限,建議初次學(xué)習(xí)時(shí)候,同一類型的框架掌握一種即可,比如日志收集框架就有很多種,初次學(xué)習(xí)時(shí)候只需要掌握一種,能夠完成日志收集的任務(wù)即可,之后工作上有需要可以再進(jìn)行針對(duì)性地學(xué)習(xí)。
2. 學(xué)習(xí)資料
大數(shù)據(jù)最權(quán)威和最全面的學(xué)習(xí)資料就是官方文檔。熱門的大數(shù)據(jù)框架社區(qū)都比較活躍、版本更新迭代也比較快,所以其出版物都明顯滯后于其實(shí)際版本,基于這個(gè)原因采用書本學(xué)習(xí)不是一個(gè)最好的方案。比較慶幸的是,大數(shù)據(jù)框架的官方文檔都寫的比較好,內(nèi)容完善,重點(diǎn)突出,同時(shí)都采用了大量配圖進(jìn)行輔助講解。當(dāng)然也有一些優(yōu)秀的書籍歷經(jīng)時(shí)間的檢驗(yàn),至今依然很經(jīng)典,這里列出部分個(gè)人閱讀過的經(jīng)典書籍:
《hadoop 權(quán)威指南 (第四版)》 2017 年
《Kafka 權(quán)威指南》 2017 年
《從 Paxos 到 Zookeeper 分布式一致性原理與實(shí)踐》 2015 年
《Spark 技術(shù)內(nèi)幕 深入解析 Spark 內(nèi)核架構(gòu)設(shè)計(jì)與實(shí)現(xiàn)原理》 2015 年
《Spark.The.Definitive.Guide》 2018 年
《HBase 權(quán)威指南》 2012 年
《Hive 編程指南》 2013 年
3. 視頻學(xué)習(xí)資料
上面我推薦的都是書籍學(xué)習(xí)資料,很少推薦視頻學(xué)習(xí)資料,這里說明一下原因:因?yàn)闀畾v經(jīng)時(shí)間的考驗(yàn),能夠再版的或者豆瓣等平臺(tái)評(píng)價(jià)高的證明都是被大眾所認(rèn)可的,從概率的角度上來說,其必然更加優(yōu)秀,不容易浪費(fèi)大家的學(xué)習(xí)時(shí)間和精力,所以我個(gè)人更傾向于官方文檔或者書本的學(xué)習(xí)方式,而不是視頻。因?yàn)橐曨l學(xué)習(xí)資料,缺少一個(gè)公共的評(píng)價(jià)平臺(tái)和完善的評(píng)價(jià)機(jī)制,所以其質(zhì)量良莠不齊。但是視頻任然有其不可替代的好處,學(xué)習(xí)起來更直觀、印象也更深刻,所以對(duì)于習(xí)慣視頻學(xué)習(xí)的小伙伴,這里我各推薦一個(gè)免費(fèi)的視頻學(xué)習(xí)資源,大家按需選擇:
免費(fèi)學(xué)習(xí)資源:尚學(xué)堂大數(shù)據(jù)學(xué)習(xí)路線 —— 在線觀看鏈接
開發(fā)工具
這里推薦一些大數(shù)據(jù)常用的開發(fā)工具:
Java IDE:IDEA 和 Eclipse 都可以。從個(gè)人使用習(xí)慣而言,更傾向于 IDEA ;
VirtualBox:在學(xué)習(xí)過程中,你可能經(jīng)常要在虛擬機(jī)上搭建服務(wù)和集群。VirtualBox 是一款開源、免費(fèi)的虛擬機(jī)管理軟件,雖然是輕量級(jí)軟件,但功能很豐富,基本能夠滿足日常的使用需求;
MobaXterm:大數(shù)據(jù)的框架通常都部署在服務(wù)器上,這里推薦使用 MobaXterm 進(jìn)行連接。同樣是免費(fèi)開源的,支持多種連接協(xié)議,支持拖拽上傳文件,支持使用插件擴(kuò)展;
Translate Man:一款瀏覽器上免費(fèi)的翻譯插件 (谷歌和火狐均支持)。它采用谷歌的翻譯接口,準(zhǔn)確性非常高,支持劃詞翻譯,可以輔助進(jìn)行官方文檔的閱讀。
結(jié)語
以上就是個(gè)人關(guān)于大數(shù)據(jù)的學(xué)習(xí)心得和路線推薦。本片文章對(duì)大數(shù)據(jù)技術(shù)棧做了比較狹義的限定,隨著學(xué)習(xí)的深入,大家也可以把 Python 語言、推薦系統(tǒng)、機(jī)器學(xué)習(xí)等逐步加入到自己的大數(shù)據(jù)技術(shù)棧中。