大數據學習路線

磨拳擦掌!

說數據是一個企業(yè)最核心的東西之一,我想大家應該都能基本認同吧,畢竟連XXX都說過,這是一個數據為王的時代,誰掌握了數據誰就掌握未來!

image

怪不得個個都磨拳擦掌,都嚷嚷著想搞大數據。

注:本文已收錄于Github開源項目:github.com/hansonwang99/JavaCollection ,里面有各大方向編程的詳細自學路線、面試題和面經、編程資料及系列技術文章等,資源持續(xù)更新中


大數據開發(fā)基礎

學習編程語言往往是我們開啟學習之路的第一大步。大數據領域的很多框架都是基于Java語言開發(fā)的,而且各種框架也都提供了Java API來提供使用和操作接口,所以Java語言的學習逃不掉。除此之外Scala在必要時也可以學一下,在大數據開發(fā)領域里用得還是挺多的。Scala語言的表達能力很強,代碼信噪比很高,而且很多大數據框架也都提供了Scala語言的開發(fā)接口,況且Scala也可以運行于Java平臺(JVM),并且兼容Java程序,所以也可以和大數據相關系統(tǒng)進行很好的集成。

除此之外,老生常談的數據結構和算法、計算機網絡、操作系統(tǒng)、數據庫、設計模式也是程序員必備的通用計算機基礎,不光是搞大數據的需要具備,搞后端開發(fā)的也是掌握這些基礎,而且這些東西在求職面試時也是必備的,這部分應該大量花時間給坐實。

最后還要提一下對Linux操作系統(tǒng)的要求,當然我們這里主要還是著眼于Linux系統(tǒng)使用的角度。因為大數據系統(tǒng)的開發(fā)、部署基本都是基于Linux環(huán)境進行的。掌握常用的命令、配置、網絡和系統(tǒng)管理、基本的Shell編程等等,對學習都大有裨益。

image

基本開發(fā)工具

大數據領域的常見開發(fā)工具和軟件和后端開發(fā)基本差不多,比如:選一個常見的Linux操作系統(tǒng),一套好用的SSH工具和FTP/SFTP工具,一個稱手的集成開發(fā)環(huán)境,以及主流的源碼控制工具和構建工具等等。

image

接下來就進入到大數據開發(fā)的具體流程,分幾大塊捋一遍,首先就是數據采集。


數據采集

既然大數據系統(tǒng)是處理海量數據的,那么第一個問題,這個海量數據到底是什么類型從哪里來呢?

可以說,輸入大數據系統(tǒng)的數據類型種類繁多,形式結構也有所不同,有傳統(tǒng)的結構化數據,也有XML、Json等這類的半結構化數據,甚至還有文檔、音視頻這類非結構化數據。

image

數據的來源更是五花八門,有直接來自后端已有數據庫的數據,有來自后端日志系統(tǒng)的數據,有來自第三方服務的各種數據,甚至還有從網上爬取的各種數據。

image

找到了數據源,接下來的數據采集數據傳輸工作就很重要了。

我們就以后臺最常見的日志數據為例,由于現在的服務系統(tǒng)采用集群部署方式的很多,那分布式集群上海量日志數據的采集和傳輸就是一個大問題。Flume是一個較常使用的分布式數據采集和聚合框架,最典型的應用就是日志數據的收集。它可以定制各類數據發(fā)送方并聚合數據,同時提供對數據的簡單處理,并寫到各種數據接受方,完成數據傳輸。

與此同時,還有一個叫做Logstash的開源數據收集引擎可能大家也聽過,也比較常用的。

當然還有一種場景也是數據采集這一步通常需要考慮的,那就是在不同的存儲系統(tǒng)(或數據庫)之間進行數據的遷移(如:導入/導出)。比如我們經常需要在傳統(tǒng)關系型數據庫(如MySQL)和大數據系統(tǒng)的數據倉庫(如Hive)之間進行數據遷移(交換),這時候一個叫Sqoop的數據采集和傳輸工具就非常常用了。除此之外,淘寶開源的DataX也是同類型工具。

image

數據存儲

數據采集完成,接下來需要對其進行存儲,這也是非常清晰的思路和流程。

說到數據存儲,我們首先想到的當然是數據庫存儲。包括MySQL、Sql Server等等這種最常見的關系型數據庫,以及RedisMongoDB、HBase等這類非關系型數據庫。

image

我們這里將ElasticSearch單獨提出來聊,因為雖然它某一程度上也可以視為數據庫,但是它更主要的身份還是一個優(yōu)秀的全文搜索引擎。它的出現,解決了一部分傳統(tǒng)關系型數據庫和NoSQL非關系型數據庫所沒有辦法高效完成的一些工作,比如高效的全文檢索,結構化檢索,甚至是數據分析,所以現在用的公司也越來越多。

image

除了傳統(tǒng)的數據庫,在大數據領域,應用非常廣泛的存儲技術還包括分布式文件系統(tǒng)分布式數據庫。說到分布式文件系統(tǒng),大名鼎鼎的HDFS就是一個使用非常廣泛的大數據分布式文件系統(tǒng),它既是基本的數據存儲平臺,也是大數據系統(tǒng)基礎平臺設施;而后者的代表性技術HBase則是一個構建在HDFS之上的分布式數據庫,適合海量數據的存儲。

image

在大數據領域,除了分布式文件系統(tǒng)和分布式數據庫,還有一個經常聽到的就是以Hive為代表的數據倉庫。我們可以將數據倉庫理解為一個邏輯上的概念,其底層往往是基于文件系統(tǒng)打造的。還以Hive為例,它的出現主要就是可以讓開發(fā)人員能夠通過SQL的方式來方便地操作和處理HDFS上的數據,適用于離線批量數據的處理,上手友好,使用門檻降低。

image

所以將這部分內容做一個階段性總結,可以如下所示:

image

數據處理

數據有著落了,接下來干啥?當然是充分挖掘數據所蘊含的價值,更直白一些說就是對其進行各種查詢、分析和計算,這樣才能為數據賦能,產生價值。

最早期的MapReduce就是Hadoop提供的分布式計算框架,可以用來統(tǒng)計和分析HDFS上的海量數據,適合于速度不敏感的離線批處理;后來出現的內存計算框架Spark則更加適合做迭代運算,因此也備受青睞。在一些不需要實時計算的場景,這些框架應用得十分廣泛,但是在一些離線數據分析無法滿足需求的場景下,比如金融風控、實時推薦等,這時候在線計算或者說流式計算就變得十分有必要了,這也成了現如今諸如Storm、Flink等一大批優(yōu)秀的實時計算框架的主陣地,尤其是Flink,這幾年的火熱程度不用多說,基于它構建的處理引擎也鱗次櫛比。

image

數據價值和應用

大數據系統(tǒng)最終的任務還是得服務于業(yè)務,為生產創(chuàng)造出實際價值。這種價值應用場景包括但不限于提供各種統(tǒng)計報表,商品推薦,數據可視化展現,商業(yè)分析,輔助決策等等。

image

大數據周邊技術

聊到這里,應該說上面的內容已經基本將一個大數據引擎的主流程走完了,然而實際的大數據系統(tǒng)還需要諸多周邊技術的支持,因此還衍生了很多附加框架和技術。

由于單機性能的局限和瓶頸,所以大數據系統(tǒng)的很多框架組件都是集群部署的,這時候針對集群系統(tǒng)的部署管理以及監(jiān)控工具就不可或缺了,比如使用廣泛的AmbariCloudera Manager等。

有了集群之后,集群平臺上各種資源的管理以及各種任務的調度就成了一個復雜且棘手的問題,這時候資源管理框架YARN,任務工作流調度框架AzkabanOozie等就有了用武之地。

同時為了保證分布式集群的高可用,像ZooKeeper這種分布式協(xié)調服務框架簡直幫了大忙,像Master選舉、集群管理、分布式協(xié)調通知等任務統(tǒng)統(tǒng)不在話下。

最后,還必須要提的一個大名鼎鼎的中間件框架,那就是Kafka。它不僅僅是一個高吞吐量的消息系統(tǒng),有了它之后,系統(tǒng)解耦、峰值壓力緩沖、高效流處理等等都使得它成為后端開發(fā)和大數據開發(fā)人員眼里那個最靚的崽。

image

做個總結

最后我們也將上述所有內容的完整版思維導圖給貼在這里,由于這個圖是在是太大了,實在不太好弄。

image

幾個要討論的話題

大數據開發(fā)和后端開發(fā)關系大嗎?

應該說很多技術點和框架都是有交集的。比如通用編程基礎部分完全一致,再者常用的像Redis、Zookeeper、Kafka、Elasticsearch等等這些主流得不能再主流的框架,在以前咱們梳理Java后端路線時也都有,所以二者的交集很大,甚至很多做大數據的,以前就是從后端轉過來的,非常自然,因為很多技術都相通甚至完全一樣。

這么多框架都得學嗎?

大數據領域框架這么多,睡不著覺的可以大致數一數,僅剛才那個腦圖里面所提及的最起碼就有三四十個,是每個都需要學習嗎? 我們在梳理時,同類型的主流框架都列舉了不止一個。一般來說,我們只要學明白其中一個,上手同類型其他技術就都不難了,舉一反三很重要。另外我們盡量學主流經典的框架,一般就沒啥問題,比如分布式文件系統(tǒng)HDFS很經典用得很多,流處理里面Flink現在火得一腿,自學對應部分時就可以考慮學一下。

具體框架(技術)到底怎么學?

最后還是得落實到具體某一個技術(框架)到底怎么學的問題。我覺得學習思路倒也清晰,首先第一步,搞清楚這個框架是干什么的,解決了什么問題和痛點,同類“競品”還有哪些,這一步在上面的詳細思維導圖里,我們已經幫你完成了;第二大步,把這個技術(框架)用起來,獲得成就感很重要,那具體又怎么用呢,思路也很明了,首先是把對應環(huán)境安裝部署好,跑起來,然后基于準備好的環(huán)境做實驗,跑Demo,自己寫東西拿上去跑,由簡單到復雜,慢慢上手直至熟練,該過程中肯定會踩坑,所以做好記錄、輸出、筆記,寫下自己的踩坑過程和解決思路非常重要,步步為營;最后一大步才是針對里面的關鍵機制深入研究其原理,學到就是賺到,所以總體也就這三大步。


后記

本期硬核,創(chuàng)作不易,不想被白瞟,也希望能三連支持一波。

image

最后也要特別鳴謝菊花云帶佬,我的學長云哥對于本次路線梳理提供的指導和幫助,我愿稱之為KTV里的周胖倫,大數據界的扛把子。

注:本文已收錄于Github開源項目:github.com/hansonwang99/JavaCollection ,里面有各大方向編程的詳細自學路線、面試題和面經、編程資料及系列技術文章等,資源持續(xù)更新中

下篇見。

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容