基於大數據平台的畢業設計


前言

最近有很多人問我,大數據專業有什么好的畢設項目,我就簡單的回復了一下。也有直接問我要源碼的....

所以就抽空寫一寫自己畢業設計的一個思路,大數據是我實習自學的,這個思路是我當初自己想的,就當做一份參考吧。

在我畢業那年,同學們畢業設計大多都是以Java語言開發的各種管理系統、xx商城為主,包括我剛開始的想法也是這樣的。這也是計算機專業很常見的畢業設計選題。

這種選擇的好處就是簡單,網上模板多。動手能力強的同學,直接去github上拉下來源碼,稍微修改一下,一個畢業設計項目就完成了。動手能力弱的同學,也可以使用鈔能力低成本完成。

至於缺點嘛,就是這類畢設太常見了,除非UI設計和思路特別出彩,讓老師眼前一亮。要不然見多識廣的老師,就會帶着一顆毫無波瀾的內心,用空洞的眼神看完你的演示,機械般的給你打下一個及格分。

當然,對於大部分同學的內心想法就是:能過就行。也有的同學擔心,自己的畢設項目和其他同學的重合度很高,老師可能會問一些細節(稀奇古怪)的問題。所以,畢設最好還是自己做,就算找的模板,也要把技術和架構搞清楚

同時,想要做一個與眾不同的畢設,在技術上也一定要“花里胡哨”。

大數據畢設思路

大數據方向的畢設,歸根結底還是基於大數據平台進行構思。對於管理系統、商城這種項目畢設來說,我們面向的是編程語言,而大數據主要還是還是面向平台。就像你一說大數據,別人接着就說,大數據...就是那個Hadoop嗎?

是的。雖然這個回答很片面,但是對於大數據畢設來說,就是基於Hadoop來發散延伸。

我學的不是大數據專業,也曾有成為一名優(C)秀(V)的Java開發的夢想。后來,17年實習陰差陽錯就接觸到大數據,並開始自學大數據,所以在18年畢業的時候,就基於大數據完成了畢業設計。這里就簡單說一下當初我的畢業設計流程。

  1. 在虛擬機搭建Hadoop、Hive、Kafka、Spark集群
  2. 使用Java(建議Python)采集了163w數據放入MySQL
  3. 用Flume將mysql中的數據實時寫入到了Kafka中
  4. Scala開發sparkstreaming程序,讀取kafka數據進行處理,然后寫入Kafka
  5. 使用Flume將kafka數據寫入到了HDFS,然后加載到hive進行hsql分析
  6. 使用Springboot和Vue,開發數據管理系統,對數據進行查詢和圖形化展示,對接了echarts和百度地圖。

就很簡單,很簡單。大家可以在上面的思路上進行擴展。下面就展開說一下具體步驟。

大數據畢設實踐

關於下文中提到的一些大數據概念,可以參考之前寫的一篇大數據的文章。

0. 數據准備

大數據,大數據,數據肯定是大的無邊無際。那多大才算大?自從18年負責一天1w億條數據的接入、存儲、處理工作之后,我就飄了~ 經常同事告訴我說,要接入一個大數據量的文件接口,我問他多少,他說一天一百億條,我一般會輕飄飄地說一句,一百億,算多嗎 ~~~

其實,對於畢業設計來說,數據量並不需要那么大,數據在大數據平台中的流轉,以此來模擬大數據中的ETL和實時處理,從而體現數據的價值。 那么,數據從哪里獲取呢?

方法1,我們可以寫一個程序來生成一些測試數據,但是這樣的話,數據重合度太高,很難體現出數據分析價值。那么就采用方法二,開發爬蟲進行采集網上的數據

當時我用Java開發了一個爬蟲,采集了163w條POI位置數據,存到了MySQL中,完成了數據的准備工作。爬蟲的開發還是推薦用Python,17年我還不會Python,后來18年開始學習Python,后來又做了很多爬蟲開發工作,再后來寫了爬蟲系列由淺入深的學習文章,大家也可以參考一下。

1. 大數據平台搭建

欲抬手摘星望月,必先平地起高樓。

上面也說了,大數據還是圍繞着平台來搞。當時我在筆記本上搭建了三台centos系統的虛擬機,主要用來搭建下面的集群。

在集群搭建之前,需要完成下列操作系統和環境的配置。

  1. 安裝JDK、Scala
  2. 三台虛擬機之間進行互信操作
  3. 安裝mysql數據,作為hive的元數據庫

Hadoop - 基礎核心

Hadoop集群作為大數據基礎建設,同時也是大數據核心。其HDFS提供了分布式存儲,Yarn提供了計算資源。

如果是畢設的話,可以選擇一主兩從的架構,即一個NameNode和兩個DataNode的架構。如果想要玩的花一點,就選擇HA高可用架構,即兩主兩從,這里就需要四台虛擬機。

關於HA,就是兩個NameNode,但是一個NN處於工作狀態(active),一個NN處於待命狀態(standby)。你可以kill掉active的NN,然后讓standby的NN接管集群。

關於HA,在大數據是隨處可見的。在Hadoop生態中,集群中的多NN和多DN是HA,HDFS的副本機制也是HA,這一塊在論文中還是能體現不少東西的。

下面就是Hadoop集群的NN和DN的基本信息。

NameNode

DataNode

Hive - 離線分析

Hive在我的畢設中的角色就是一個數據分析的工具,主要表述的是大數據ETL中L階段,以及大數據平台的離線分析部分。

Hive是一個數據倉庫,關於它的作用就是對HDFS上的數據進行離線分析,雖然它不是數據庫,但是大家可以把它當做數據庫來用。這里其他基礎的概念就不多介紹了。

時至今日,也有很多hive的平替產品,例如號稱比hive快800倍的clickhouse,以及druid,但是在應用場景方面和hive還是有一定出入的,有興趣的可以去了解一下。

大數據在數倉方面,有很多值得玩的平台架構和一些基本概念,ETL描述的就是基於數據倉庫進行的數據處理過程。

Spark、Kafka - 實時計算

現在提到實時計算,可能大家首先會想到flink。的確,flink在開源實時領域方面絕對算是TOP了。18年的時候,實時處理還是SparkStreaming應用的比較廣泛。所以當時我安裝的是Spark集群,來模擬的實時計算。

其實Spark/flink集群都是可以不搭建的,在Spark集群上運行程序屬於standlone模式,如果使用yarn模式只需要有客戶端就可以了。Spark程序運行在yarn上,能對cpu和內存進行資源隔離,而且不需要要單獨維護一個Spark集群。

而作為實時處理配套,Kafka和Rabbitmq之間我還是傾向於Kafka。在Kafka搭建之前,先搭建zookeeper集群,zk是kafka的依賴組件,用來記錄一些元數據。

下圖命令操作就是消費寫入Kafka的數據。

Kafka

我們要做的就是將數據庫/數據倉庫中的離線數據,轉換為數據流(Data Stream),作為生產者實時寫入到Kafka中。

我們開發的Spark/flink程序作為消費者實時讀取Kafka中的數據,實時處理並數據計算結果。如下圖,為SparkStreaming的程序監控頁面。

SparkStreming程序,可以使用Java、Scala、Python開發,但是選擇Scala比較好一些。一是Scala的語法結構更貼合流式處理,二是源碼都是Scala寫的。

Flume - 數據交換神器

當初剛接觸Flume的時候,真的沒玩明白,雲里霧里的。后來深入研究了一下之后,數據在oracle、MySQL、Kafka、HDFS以及其他存儲平台上,就可以進行同步。不過MySQL和oracle需要自己定義Source和Sink。

Flume的簡單之處在於配置化。當初我將數據從MySql抽取到Kafka,部分配置如下。

Flume

順帶一提,在大數據量的情況下,Flume很多參數還是需要調的。當初我將1W億/天的數據從Kafka落地到HDFS的時候,寫了幾千行的配置,調了很多參數。

3. 數據展示

最后就是前台的數據展示了,使用了Springboot和Vue做了一個POI數據管理系統。主要實現分類查詢和POI搜索標點地圖展示功能。

但是這個系統,我只找到了登錄頁面和地圖搜索標點的截圖了....

登錄頁面

地圖

數據管理系統發揮的空間還是挺多的,比如頁面樣式的優化,再比如前台可以使用Node + Vue,后端使用Springboot來實現前后端分離架構。

結語

主要是給大家提供一個大數據平台畢業設計的基本思路,很多細節的地方還可以優化。我們也不難發現,這里的大數據集群都是獨立安裝的,我們同樣可以使用Ambari進行統一的安裝、管理、啟動、狀態監控。

最近也是在研究Ambari,前幾周剛花了一個星期,完成了Ambari2.7.5的編譯安裝工作。后期的目標是配合docker在一台機器上完成大數據集群的搭建工作,當然這里主要是玩,構建測試環境,性能啥的就不要考慮了哈。

忙完這一陣,完成Scrapy系列文章,就開始着手准備大數據平台系列文章的編寫。期待下一次相遇。

感謝每一次相遇


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM