0-大數據開發學習路線

来源:https://www.cnblogs.com/cheng020406/archive/2023/04/07/17294793.html
-Advertisement-
Play Games

# 大數據開發基礎學習編程語言往往是我們開啟學習之路的第一大步。大數據領域的很多框架都是基於Java語言開發的,而且各種框架也都提供了Java API來提供使用和操作介面,所以Java語言的學習逃不掉。除此之外Scala在必要時也可以學一下,在大數據開發領域里用得還是挺多的。Scala語言的表達能力 ...


# 大數據開發基礎
學習編程語言往往是我們開啟學習之路的第一大步。大數據領域的很多框架都是基於Java語言開發的,而且各種框架也都提供了Java API來提供使用和操作介面,所以Java語言的學習逃不掉。除此之外Scala在必要時也可以學一下,在大數據開發領域里用得還是挺多的。Scala語言的表達能力很強,代碼信噪比很高,而且很多大數據框架也都提供了Scala語言的開發介面,況且Scala也可以運行於Java平臺(JVM),並且相容Java程式,所以也可以和大數據相關係統進行很好的集成。
除此之外,老生常談的數據結構和演算法、電腦網路、操作系統、資料庫、設計模式也是程式員必備的通用電腦基礎,不光是搞大數據的需要具備,搞後端開發的也是掌握這些基礎,而且這些東西在求職面試時也是必備的,這部分應該大量花時間給坐實。
最後還要提一下對Linux操作系統的要求,當然我們這裡主要還是著眼於Linux系統使用的角度。因為大數據系統的開發、部署基本都是基於Linux環境進行的。掌握常用的命令、配置、網路和系統管理、基本的Shell編程等等,對學習都大有裨益。
![](https://cdn.nlark.com/yuque/0/2022/png/29611767/1660612390934-46b90cc3-01a2-48f6-bd16-92ec8941af91.png#averageHue=%23f3f3f3&clientId=u1859d306-605d-4&from=paste&id=u5379f90d&originHeight=3830&originWidth=1080&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=none&taskId=u2453cf39-f6bd-4471-998b-e1cb19031ee&title=)

---

# 基本開發工具
大數據領域的常見開發工具和軟體和後端開發基本差不多,比如:選一個常見的Linux操作系統,一套好用的SSH工具和FTP/SFTP工具,一個稱手的集成開發環境,以及主流的源碼控制工具和構建工具等等。
![](https://cdn.nlark.com/yuque/0/2022/png/29611767/1660612390943-8e7e5664-e06d-43c4-b9a8-5c98021ef9b6.png#averageHue=%23f3f3f3&clientId=u1859d306-605d-4&from=paste&id=u52c41110&originHeight=1340&originWidth=1080&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=none&taskId=uab04e85a-fcef-4fa0-ae10-18a178bd5e5&title=)
接下來就進入到大數據開發的具體流程,分幾大塊捋一遍,首先就是數據採集。

---

# 數據採集
既然大數據系統是處理海量數據的,那麼第一個問題,這個海量數據到底是什麼類型?從哪裡來呢?
可以說,輸入大數據系統的數據類型種類繁多,形式結構也有所不同,有傳統的結構化數據,也有XML、Json等這類的半結構化數據,甚至還有文檔、音視頻這類非結構化數據。
![](https://cdn.nlark.com/yuque/0/2022/png/29611767/1660612391005-38519fbf-f98b-4d32-89da-bd447d4d4597.png#averageHue=%23ebebeb&clientId=u1859d306-605d-4&from=paste&id=uaade3494&originHeight=195&originWidth=1080&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=none&taskId=ua5517df6-87b5-4734-b8a8-bfead7027ea&title=)
數據的來源更是五花八門,有直接來自後端已有資料庫的數據,有來自後端日誌系統的數據,有來自第三方服務的各種數據,甚至還有從網上爬取的各種數據。
![](https://cdn.nlark.com/yuque/0/2022/png/29611767/1660612390939-becd6cb7-f3d8-4537-a885-da4d0a089745.png#averageHue=%23f2f0f0&clientId=u1859d306-605d-4&from=paste&id=u253a114d&originHeight=782&originWidth=1080&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=none&taskId=uadd2783d-3991-43d4-8c88-c1c5eb24eed&title=)
找到了數據源,接下來的數據採集和數據傳輸工作就很重要了。
我們就以後臺最常見的日誌數據為例,由於現在的服務系統採用集群部署方式的很多,那分散式集群上海量日誌數據的採集和傳輸就是一個大問題。Flume是一個較常使用的分散式數據採集和聚合框架,最典型的應用就是日誌數據的收集。它可以定製各類數據發送方並聚合數據,同時提供對數據的簡單處理,並寫到各種數據接受方,完成數據傳輸。
與此同時,還有一個叫做Logstash的開源數據收集引擎可能大家也聽過,也比較常用的。
當然還有一種場景也是數據採集這一步通常需要考慮的,那就是在不同的存儲系統(或資料庫)之間進行數據的遷移(如:導入/導出)。比如我們經常需要在傳統關係型資料庫(如MySQL)和大數據系統的數據倉庫(如Hive)之間進行數據遷移(交換),這時候一個叫Sqoop的數據採集和傳輸工具就非常常用了。除此之外,淘寶開源的DataX也是同類型工具。
![](https://cdn.nlark.com/yuque/0/2022/png/29611767/1660612390882-9765f4d8-0adc-4653-a34c-088b29f07c6c.png#averageHue=%23f2f2f2&clientId=u1859d306-605d-4&from=paste&id=u83f8a1e0&originHeight=2079&originWidth=1080&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=none&taskId=u4e3209d0-b40c-424e-8a8b-6c6c9b725bc&title=)

---

# 數據存儲
數據採集完成,接下來需要對其進行存儲,這也是非常清晰的思路和流程。
說到數據存儲,我們首先想到的當然是資料庫存儲。包括MySQL、Sql Server等等這種最常見的關係型資料庫,以及Redis、MongoDB、HBase等這類非關係型資料庫。
![](https://cdn.nlark.com/yuque/0/2022/png/29611767/1660612391847-7bab2565-4412-4479-9a28-bacfe0f8057b.png#averageHue=%23f3f1f1&clientId=u1859d306-605d-4&from=paste&id=u6fbdacb5&originHeight=879&originWidth=1080&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=none&taskId=u267379b3-9d7c-4ed6-99d6-4995692ec02&title=)
我們這裡將ElasticSearch單獨提出來聊,因為雖然它某一程度上也可以視為資料庫,但是它更主要的身份還是一個優秀的全文搜索引擎。它的出現,解決了一部分傳統關係型資料庫和NoSQL非關係型資料庫所沒有辦法高效完成的一些工作,比如高效的全文檢索,結構化檢索,甚至是數據分析,所以現在用的公司也越來越多。
![](https://cdn.nlark.com/yuque/0/2022/png/29611767/1660612391916-526def7b-f531-4931-8faa-26eefd3036a5.png#averageHue=%23f2f2f2&clientId=u1859d306-605d-4&from=paste&id=ud5459eef&originHeight=2252&originWidth=1080&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=none&taskId=u3961e8a4-b6cb-4474-85d0-40babee294d&title=)
除了傳統的資料庫,在大數據領域,應用非常廣泛的存儲技術還包括分散式文件系統和分散式資料庫。說到分散式文件系統,大名鼎鼎的HDFS就是一個使用非常廣泛的大數據分散式文件系統,它既是基本的數據存儲平臺,也是大數據系統基礎平臺設施;而後者的代表性技術HBase則是一個構建在HDFS之上的分散式資料庫,適合海量數據的存儲。
![](https://cdn.nlark.com/yuque/0/2022/png/29611767/1660612392173-08766f01-6c21-4b58-b04f-9beebb91227a.png#averageHue=%23f2f2f2&clientId=u1859d306-605d-4&from=paste&id=ud0e0cf41&originHeight=2221&originWidth=1080&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=none&taskId=u01c6a07d-fca9-4cd3-8b41-80fdcb508b1&title=)
在大數據領域,除了分散式文件系統和分散式資料庫,還有一個經常聽到的就是以Hive為代表的數據倉庫。我們可以將數據倉庫理解為一個邏輯上的概念,其底層往往是基於文件系統打造的。還以Hive為例,它的出現主要就是可以讓開發人員能夠通過SQL的方式來方便地操作和處理HDFS上的數據,適用於離線批量數據的處理,上手友好,使用門檻降低。
![](https://cdn.nlark.com/yuque/0/2022/png/29611767/1660612392337-0d3f3e27-e41f-49de-a349-6e7a44034edc.png#averageHue=%23f3f3f3&clientId=u1859d306-605d-4&from=paste&id=uaaf32717&originHeight=3289&originWidth=1080&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=none&taskId=ubcff2423-babc-4873-9f35-35064c09a29&title=)
所以將這部分內容做一個階段性總結,可以如下所示:
![](https://cdn.nlark.com/yuque/0/2022/png/29611767/1660612392796-79d76588-9205-42d7-a98e-9a1cd747139e.png#clientId=u1859d306-605d-4&from=paste&id=u3f24b365&originHeight=6272&originWidth=1080&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=none&taskId=u22f404c7-cfe6-47e6-be01-55da43bcfe3&title=)

---

# 數據處理
數據有著落了,接下來幹啥?當然是充分挖掘數據所蘊含的價值,更直白一些說就是對其進行各種查詢、分析和計算,這樣才能為數據賦能,產生價值。
最早期的MapReduce就是Hadoop提供的分散式計算框架,可以用來統計和分析HDFS上的海量數據,適合於速度不敏感的離線批處理;後來出現的記憶體計算框架Spark則更加適合做迭代運算,因此也備受青睞。在一些不需要實時計算的場景,這些框架應用得十分廣泛,但是在一些離線數據分析無法滿足需求的場景下,比如金融風控、實時推薦等,這時候線上計算或者說流式計算就變得十分有必要了,這也成了現如今諸如Storm、Flink等一大批優秀的實時計算框架的主陣地,尤其是Flink,這幾年的火熱程度不用多說,基於它構建的處理引擎也鱗次櫛比。
![](https://cdn.nlark.com/yuque/0/2022/png/29611767/1660612392838-fecdce82-6864-41a6-a917-3dffe86b5eb3.png#averageHue=%23f4f4f4&clientId=u1859d306-605d-4&from=paste&id=u0a1fc18c&originHeight=5705&originWidth=1080&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=none&taskId=u7be6b07c-5a06-428b-990f-51c6f174340&title=)

---

# 數據價值和應用
大數據系統最終的任務還是得服務於業務,為生產創造出實際價值。這種價值應用場景包括但不限於提供各種統計報表,商品推薦,數據可視化展現,商業分析,輔助決策等等。
![](https://cdn.nlark.com/yuque/0/2022/png/29611767/1660612393204-23a039cb-5290-4397-a0f6-0d85cd6b62f4.png#averageHue=%23f2f2f2&clientId=u1859d306-605d-4&from=paste&id=u9cf3a560&originHeight=1363&originWidth=1080&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=none&taskId=u0cb2bba9-f1e7-426e-b7d5-1c581b194b6&title=)

---

# 大數據周邊技術
聊到這裡,應該說上面的內容已經基本將一個大數據引擎的主流程走完了,然而實際的大數據系統還需要諸多周邊技術的支持,因此還衍生了很多附加框架和技術。
由於單機性能的局限和瓶頸,所以大數據系統的很多框架組件都是集群部署的,這時候針對集群系統的部署、管理以及監控工具就不可或缺了,比如使用廣泛的Ambari和Cloudera Manager等。
有了集群之後,集群平臺上各種資源的管理以及各種任務的調度就成了一個複雜且棘手的問題,這時候資源管理框架YARN,任務工作流調度框架Azkaban和Oozie等就有了用武之地。
同時為了保證分散式集群的高可用,像ZooKeeper這種分散式協調服務框架簡直幫了大忙,像Master選舉、集群管理、分散式協調通知等任務統統不在話下。
最後,還必須要提的一個大名鼎鼎的中間件框架,那就是Kafka。它不僅僅是一個高吞吐量的消息系統,有了它之後,系統解耦、峰值壓力緩衝、高效流處理等等都使得它成為後端開發和大數據開發人員眼裡那個最靚的崽。
![](https://cdn.nlark.com/yuque/0/2022/png/29611767/1660612393247-a6c6c068-3109-415c-8235-52a11e2f6034.png#averageHue=%23f3f3f3&clientId=u1859d306-605d-4&from=paste&id=uea2528fa&originHeight=3900&originWidth=1080&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=none&taskId=ud79c79c2-fe62-48f0-ad55-835d7c6923e&title=)

---

# 總結
最後我們也將上述所有內容的完整版思維導圖給貼在這裡,由於這個圖實在太大,上傳後可能被壓縮,如需無損版源文件的,可長按或微信掃碼關註下方公眾號CodeSheep二維碼,回覆「大數據」三個字自取吧:
![](https://cdn.nlark.com/yuque/0/2022/jpeg/29611767/1660612393418-da50ba1b-83de-42f9-9f9e-e6e1deaba158.jpeg#averageHue=%239e9e9e&clientId=u1859d306-605d-4&from=paste&id=u9a8123bf&originHeight=344&originWidth=344&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=none&taskId=u740d1f0d-378c-4d78-ab18-cd5ea8dda2a&title=)
(長按或掃碼識別)

![](https://cdn.nlark.com/yuque/0/2022/png/29611767/1660612393610-344ca6bc-f79a-4a51-8b43-f3beaf1307db.png#clientId=u1859d306-605d-4&from=paste&id=u9a624b1e&originHeight=15633&originWidth=1080&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=none&taskId=u6c6de956-9eb1-40d0-a6bb-f7944afd290&title=)

---

# 幾個要討論的話題
## 大數據開發和後端開發關係大嗎?
應該說很多技術點和框架都是有交集的。比如通用編程基礎部分完全一致,再者常用的像Redis、Zookeeper、Kafka、Elasticsearch等等這些主流得不能再主流的框架,在以前咱們梳理Java後端路線時也都有,所以二者的交集很大,甚至很多做大數據的,以前就是從後端轉過來的,非常自然,因為很多技術都相通甚至完全一樣。
## 這麼多框架都得學嗎?
大數據領域框架這麼多,睡不著覺的可以大致數一數,僅剛纔那個腦圖裡面所提及的最起碼就有三四十個,是每個都需要學習嗎?我們在梳理時,同類型的主流框架都列舉了不止一個。一般來說,我們只要學明白其中一個,上手同類型其他技術就都不難了,舉一反三很重要。另外我們儘量學主流經典的框架,一般就沒啥問題,比如分散式文件系統HDFS很經典用得很多,流處理裡面Flink現在火得一腿,自學對應部分時就可以考慮學一下。
## 具體框架(技術)到底怎麼學?
最後還是得落實到具體某一個技術(框架)到底怎麼學的問題。我覺得學習思路倒也清晰,首先第一步,搞清楚這個框架是乾什麼的,解決了什麼問題和痛點,同類“競品”還有哪些,這一步在上面的詳細思維導圖裡,我們已經幫你完成了;第二大步,把這個技術(框架)用起來,獲得成就感很重要,那具體又怎麼用呢,思路也很明瞭,首先是把對應環境安裝部署好,跑起來,然後基於準備好的環境做實驗,跑Demo,自己寫東西拿上去跑,由簡單到複雜,慢慢上手直至熟練,該過程中肯定會踩坑,所以做好記錄、輸出、筆記,寫下自己的踩坑過程和解決思路非常重要,步步為營;最後一大步才是針對裡面的關鍵機制深入研究其原理,學到就是賺到,所以總體也就這三大步。

本文來自博客園,作者:原力星球,轉載請註明原文鏈接:https://www.cnblogs.com/cheng020406/p/17294793.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 切片 ​ Go語言切片是一種建立在數組類型之上的抽象,它構建在數組之上並且提供更強大的能力和便捷。解決了數組長度不可變等缺陷 聲明切片 ​ 切片的數據結構非常小,只有三個欄位:指向底層數組的指針,切片長度,切片容量。切片長度是指切片的真實長度,切片容量是指切片可擴展的最大長度,一般來講切片長度要小於 ...
  • 這節講述網路通訊服務端的實現,其開發思想、原則與客戶端的類似,即組合封裝、線程運行時類,面向介面編程等等。源碼面前,了無秘密,我直接以類代碼給大家展示,包含SNetServer類、SNetServerRunning類、INetServerHandler等類。 ...
  • 數組 ​ 數組是具有相同唯一類型的一組已編號且長度固定的數據項序列(這是一種同構的數據結構);這種類型可以是任意的原始類型例如整形、字元串或者自定義類型(結構體、介面)。數組長度也是數組類型的一部分,所以[5]int和[10]int是屬於不同類型的。 :star::在其他語言中數組大多是引用類型,但 ...
  • 前言 一、人物簡介 第一位閃亮登場,有請今後會一直教我們C語言的老師 —— 自在。 第二位上場的是和我們一起學習的小白程式猿 —— 逍遙。 二、構成和表示方式 關係運算符的作用是判斷符號兩邊大小的關係 C語言中的關係運算符主要有六個,如下表所示 | 運算符 | 名稱 | 示例 | 描述 | | : ...
  • 大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是利用i.MXRT1xxx系列ROM集成的DCD功能可輕鬆配置指定外設。 關於 i.MXRT1xxx 系列晶元 BootROM 中集成的 DCD 功能這個話題,痞子衡早就想寫了,但是一直沒有動筆,畢竟這個話題比較生澀,單獨講會比較枯燥。最 ...
  • 在安裝Mac電腦應用程式的時候,經常會遇到“xxx.app已損壞,打不開。您應該將它移到廢紙簍“或”打不開的xxx.app,因為它來自身份不明的開發者”,如圖: 遇到上述情況是不是真的要移動到廢紙簍呢?下麵小編就為您帶來Mac應用程式無法打開提示不明開發者或文件損壞的處理方法,解答Mac應用程式無法 ...
  • 作者:袁首京 原創文章,轉載時請保留此聲明,並給出原文連接。 技術人員多數又呆板又花心不長久。我知道你可能已經厭倦了 Docker,但是系統還沒有複雜到需要高攀 K8S 的地步。那我建議您,有空的話可以約一下 Podman。 Podman 使用起來是足夠簡單的,直接把它當做改了名字的 Docker ...
  • 1. HAVING子句的用法 1.1. 學習SQL時最大的阻礙就是我們已經習慣了的面向過程語言的思考方式(排序、迴圈、條件分支、賦值等) 1.2. 只有習慣了面向集合的思考方式,才能真正地學好它 1.3. 幫助我們順利地忘掉面向過程語言的思考方式並理解SQL面向集合特性的最為有效的方法 1.4. H ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...