大數據開發學習路線

2020-11-13 CodeSheep

磨拳擦掌!

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

怪不得咱這裡的小夥伴們個個都磨拳擦掌,都嚷嚷著想從事大數據相關的開發工作,問能不能整一個大數據開發相關的技術學習路線和知識點大梳理。

得嘞,你們就負責衝,學習路線俺來安排!

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


大數據開發基礎

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

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

最後還要提一下對Linux作業系統的要求,當然我們這裡主要還是著眼於Linux系統使用的角度。因為大數據系統的開發、部署基本都是基於Linux環境進行的。掌握常用的命令、配置、網絡和系統管理、基本的Shell編程等等,對學習都大有裨益。


基本開發工具

大數據領域的常見開發工具和軟體和後端開發基本差不多,比如:選一個常見的Linux作業系統,一套好用的SSH工具和FTP/SFTP工具,一個稱手的集成開發環境,以及主流的源碼控制工具和構建工具等等。

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


數據採集

既然大數據系統是處理海量數據的,那麼第一個問題,這個海量數據到底是什麼類型從哪裡來呢?

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

數據的來源更是五花八門,有直接來自後端已有資料庫的數據,有來自後端日誌系統的數據,有來自第三方服務的各種數據,甚至還有從網上爬取的各種數據。

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

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

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

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


數據存儲

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

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

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

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

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

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


數據處理

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

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


數據價值和應用

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


大數據周邊技術

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

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

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

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

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


做個總結

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


幾個要討論的話題

大數據開發和後端開發關係大嗎?

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

這麼多框架都得學嗎?

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

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

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


後記

本期硬核,創作不易,不想被白瞟,也希望能支持一波。

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

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

下篇見。

相關焦點

  • 怎麼入門大數據開發行業 相關學習路線是什麼
    怎麼入門大數據開發行業?相關學習路線是什麼?大數據行業人才的巨缺,企業對技術人才的渴求,激發了一批對大數據技術感興趣的人的的學習欲望。對於大數據的學習,千萬不能盲目學習,先要找準方向,判定是不是真正的大數據技術再開始學習。
  • 大數據學習路線
    二、學習路線介紹完大數據框架,接著就可以介紹其對應的學習路線了,主要分為以下幾個方面:2.1 語言基礎1.Java大數據框架大多採用 Java 語言進行開發,並且幾乎全部的框架都會提供 Java API 。Java 是目前比較主流的後臺開發語言,所以網上免費的學習資源也比較多。
  • JavaWeb開發的學習路線
    目前Java語言被廣泛的應用於Web開發、大數據開發、Android開發以及各種後端開發中,所以學習Java語言應該首先選擇一個發展方向,然後再制定詳細的學習計劃。通常來說,學習Java可以從Web開發開始學起,然後再學習其他方向也會比較容易。
  • 如何成為大數據全棧人才 相關學習路線是什麼
    如何成為大數據全棧人才?相關學習路線是什麼?隨著大數據的日益普及,企業對於IT行業的人才已經不僅僅存留在單一科目的需求,更趨向於對大數據全棧技術的人才伸出橄欖枝。想要成為一名大數據全棧人才,下面為大家分享一下。  但想要成為工資高、待遇好的大數據工程師,是需要專業的技能的。
  • 【大數據】最新大數據學習路線(完整詳細版】
    大數據學習路線java(Java se,javaweb)Linux(shell,高並發架構,lucene,solr)Hadoop(Hadoop,HDFS,Mapreduce,yarn,hive,hbase,sqoop,zookeeper,flume)機器學習(R,mahout)Storm(Storm,kafka
  • 關於大數據的學習路線
    關於大數據的學習路線關於大數據的基礎知識,知乎專欄:從頭學習大數據供你參考學習!學習大數據首先我們要學習Java語言和Linux作業系統,這兩個是學習大數據的基礎,學習的順序不分前後。Java:大家都知道Java的方向有JavaSE、JavaEE、JavaME,學習大數據要學習那個方向呢?
  • 大數據核心技術有哪些 大概學習路線是什麼
    大數據核心技術有哪些?大概學習路線是什麼?大數據技術,簡而言之,就是提取大數據價值的技術,是根據特定目標。想要成為炙手可熱的大數據技術人才,這些大數據的核心技術一定要知曉!  1、Linux命令  對於大數據開發通常是在Linux環境下進行的,相比Linux作業系統,Windows作業系統是封閉的作業系統,開源的大數據軟體很受限制,因此,想從事大數據開發相關工作,還需掌握Linux基礎操作命令  2、 Redis  Redis是一個key-value存儲系統,其出現很大程度補償了memcached這類key/value
  • 乾貨:大數據學習路線,如何學好大數據?(精華)
    離線計算系統課程階段HADOOP核心技術框架1、通過對大數據技術產生的背景和行業應用案例了解hadoop的作用;2、掌握hadoop底層分布式文件系統HDFS的原理、操作和應用開發;3、掌握MAPREDUCE分布式運算系統的工作原理和分布式分析應用開發;4、掌握HIVE數據倉庫工具的工作原理及應用開發
  • 如果通過Java來完成大數據開發,需要學習哪些內容
    首先,當前大數據領域的開發崗位確實比較多,近兩年有不少大數據方向的研究生也會從事大數據開發崗位,而Java語言則是大數據開發人員的常用工具,所以如果要從事大數據開發崗位,可以重點學習一下Java語言。大數據開發有兩大類崗位,不同崗位對於Java編程能力的要求也並不相同,大數據平臺開發崗位的要求相對高一些,而大數據應用
  • HarmonyOS應用開發學習路線
    於是,勤勞的小編按捺不住激動到顫抖的手手,迫不及待整理了HarmonyOS應用開發的學習路線,夥伴們速來圍觀啦!的作業系統到底是什麼、能帶來什麼、有什麼特徵,看這裡:HarmonyOS 概述:https://developer.harmonyos.com/cn/docs/documentation/doc-guides/harmonyos-overview-0000000000011903了解HarmonyOS應用開發基礎知識
  • 學習大數據需要哪些條件
    首先,學習大數據要做好三方面的準備,其一是準備好學習的切入點,其二是為自己構建出一個有效的學習和交流渠道,其三是要有一定的場景支撐,主要是實驗場景。當前大數據的技術體系結構已經趨於成熟了,而且由於大數據領域對於人才的需求比較多元化,所以不同知識結構的初學者,都能夠找到自己的學習切入點。
  • 測試開發成長學習路線——實踐篇
    本來題目寫成「如何從一個只會點滑鼠的手工測試變成開發測試」可能更能吸睛。或者,「一個排序算法就讓我順利通過了外企的面試」,這樣的題目更能激勵哪些只會功能測試,想做出改變的朋友。現在,事實是,我現在就幹著一份測試開發或者開發測試的工作,而且是高級崗位。我們的實踐之路或者學習路線不一定都適合每個人,這裡只是我個人的一些分享。
  • Java與大數據相比較,哪個更容易學習
    首先,Java語言雖然可以應用在Web開發、移動網際網路開發和大數據開發領域等多個開發場景下,但是從Java語言本身來看,總體的知識量並沒有大數據龐大,而且在學習難度上也並沒有大數據高。Java語言說到底僅僅是一種開發工具,而大數據則是一個技術體系,從這個角度來看,二者本身並不具有可比性。從大數據的技術體系結構來看,程式語言是學習大數據的一個重要基礎,不論是從事大數據分析崗位,還是大數據開發崗位,都需要先具有一個紮實的編程基礎,而Java語言在大數據領域的應用也是比較普遍的。
  • Java大數據開發怎麼學習比較好?
    學習前需要先明確兩個問題:是什麼?怎麼學?概括說就是:學習目標與學習計劃。首先你應該想一想你學習Java大數據開發的初衷是什麼。學習和掌握大數據相關技術也非一朝一夕之事,不可能一蹴而就,一般的培訓課程只能達到入門級別的介紹和講解,真正要學會並很好地運用大數據技術你還需要後續更深入的學習和大量的實踐。所以需要你一個良好的學習規劃。
  • web前端學習路線是什麼
    好程式設計師web前端培訓web前端學習路線是什麼,很多剛接觸web前端的開發的新手小白,都會有這樣的疑問,「零基礎如何學習web前端?小白學習web前端的學習路線是什麼?」。接下來,就帶大家來了解一下這些問題,助力新手小白快速轉變成為合格的web前端開發工程師。
  • 新科技時代,一切皆數據,大數據的概念、關係與學習路線
    大數據(big data)是指海量的、多樣化的交易數據、交互數據、終端與網絡數據以及傳感數據等,其主要特徵包括:海量的數據規模:大數據一般指在10TB規模以上的數據量,甚至常常是PB(1PB=1024TB)級別的。
  • 2020年想成為前端開發工程師,這個學習路線收藏起來
    如果你需要前端開發完整的學習路線,可以私聊我,回復【前端開發學習路線】前端主流框架現在的前端開發工程師工作,已經走向了工程化開發,開發難度和項目複雜程度都比以前高了,現在企業中月薪過萬的崗位,對框架技術基本都是剛需了,前端3大框架:VUE、Angular、React是成為專業開發工程師的必備標準了。
  • 在校生自學就業,應該選擇大數據開發還是Java開發?
    今天的問題是:在校生自學就業,應該選擇大數據開發還是Java開發?其實這個問題並不難回答,因為這兩者的學習路線是並不衝突的。Java的學習路線與大數據是有重疊的,Java是大數據的基礎,想學好大數據,必須先把JavaSE的基礎打好,之後再學習一下JavaEE的內容,學好JDBC,了解一下框架,之後便可以去學習大數據的知識了。這裡是大數據的學習路線圖。
  • 大數據技術學習
    最新大數據技術學習路線完整教程視頻教程下載。大數據入門,需要學習以下這些知識點:先附上一張自己總結的學習線路圖 網際網路科技發展蓬勃興起,人工智慧時代來臨,抓住下一個風口。為幫助那些往想網際網路方向轉行想學習,卻因為時間不夠,資源不足而放棄的人。
  • 推薦webgis 開發學習路線以及資料,必看!
    對於 gis 專業的來說;如果做 gis 開發開發這塊,前後端是不分家的;也就是說,你既要會後端知識,也要會前端;gis 開發主要注重 gis server 相關。我下面推薦一些 webgis 開發學習的一些路線以及資料。