彭嬌
摘要:隨著時代的發(fā)展,“大數(shù)據(jù)”已經(jīng)成為一個耳熟能詳?shù)脑~匯,與此同時,大數(shù)據(jù)處理框架Hadoop也逐漸成為數(shù)據(jù)處理挖掘行業(yè)廣泛使用的主流技術,而Storm作為“實時的Hadoop”,實現(xiàn)了大規(guī)模實時數(shù)據(jù)流處理的需求,達到實時數(shù)據(jù)監(jiān)控的目的。本文將基于Storm框架,利用手機信令、Logstash、Kafka等技術實時采集人流地理位置坐標數(shù)據(jù),以特殊高亮的形式顯示訪客熱衷的區(qū)域和訪客所在的地理區(qū)域的圖示,能夠準確并及時地分析人流信息,為出行者提供最優(yōu)質的選擇。
關鍵字: Hadoop;Storm;實時處理
引言
隨著城市規(guī)模的擴張和交通的便利,閑暇時間的出游變的日常化。但城市交通可能會因為無法高效地利用路線和實時監(jiān)控,很容易造成交通堵塞。改善城市的出行、提高出行效率成為構建智慧城市的當務之急。如何在海量的交通、出行數(shù)據(jù)中,及時準備分析的當前的人流信息并進行監(jiān)控管理,為出行者提供優(yōu)質的交通引導服務,減少擁堵狀況,成為城市智能規(guī)劃的核心所在。
在大數(shù)據(jù)時代,大數(shù)據(jù)處理的典型工具Hadoop是一個由Apache基金會所開發(fā)的分布式系統(tǒng)基礎架構,主要解決的是海量數(shù)據(jù)的存儲和分析計算問題,作為處理大數(shù)據(jù)的分布式存儲和計算框架,得到了國內(nèi)外大、中、小型企業(yè)的廣泛應用。不過它并不是一套實時系統(tǒng)。為了解決這個問題,計算機工程師們又開發(fā)了Storm和Kafka。 Apache Storm是一套開源的分布式實時計算系統(tǒng)。最早由Nathan Marz開發(fā),在被Twitter收購后開源,并在2014年9月起成為Apache頂級開源項目。Storm被廣泛用于各種商業(yè)網(wǎng)站,包括 Twitter、Yelp、Groupon、百度、淘寶等。Storm的使用場景非常廣泛,例如實時分析、在線機器學習、連續(xù)計算、分部署RPC、ET 等。Storm有著非??斓奶幚硭俣?,單節(jié)點可以達到百萬個元組每秒,此外它還具有高擴展、容錯、保證數(shù)據(jù)處理等特性。
本文以IDEA為開發(fā)工具,利用Hadoop生態(tài)圈中的Storm框架、Zookeeper協(xié)調服務節(jié)點集群、Kafka中間件等運行環(huán)境,對人流信息數(shù)據(jù)進行流式處理和實時分析,并將結果反饋到基于J2EE架構的平臺中,實時顯示人流的熱力分布圖。
1 實時數(shù)據(jù)流處理框架
Storm是一個免費開源、分布式、高容錯的實時計算系統(tǒng)。Storm令持續(xù)不斷的流計算變得容易,彌補了Hadoop批處理所不能滿足的實時要求。Storm經(jīng)常用于在實時分析、在線機器學習、持續(xù)計算、分布式遠程調用和ETL等領域。
Storm 采用主從架構,主要分為兩種組件Nimbus和Supervisor,這兩種組件都是快速失敗的,沒有狀態(tài),使利用 Zookeeper來協(xié)調狀態(tài)和保存集群運行的狀態(tài)信息,如圖1所示。
Nimbus負責在集群里面發(fā)送代碼,分配工作給機器,并且監(jiān)控狀態(tài),全局只有一個。
Supervisor會監(jiān)聽分配給它那臺機器的工作,根據(jù)需要啟動/關閉工作進程Worker。每一個要運行Storm的機器上都要部署一個,并且,按照機器的配置設定上面分配的槽位數(shù)。
Zookeeper是Storm重點依賴的外部資源。Nimbus和Supervisor甚至實際運行的Worker都是把心跳保存在Zookeeper上的。Nimbus也是根據(jù)Zookeeper上的心跳和任務運行狀況,進行調度和任務分配的。
Storm提交運行的程序稱為Topology。Topology處理的最小的消息單位是一個Tuple,也就是一個任意對象的數(shù)組。Topology由Spout和Bolt構成。Spout是發(fā)出Tuple的結點。Bolt可以隨意訂閱某個Spout或者Bolt發(fā)出的Tuple。Spout和Bolt都統(tǒng)稱為component。
2 實驗與分析
2.1 軟硬件環(huán)境參數(shù)設置
硬件環(huán)境:CPU:酷睿i3主頻3.0GHz 內(nèi)存:8G 硬盤空間:1T
軟件環(huán)境:jdk-8u161-linux-x64.tar 、apache-storm-1.1.3.tar、logstash-2.4.1.tar、kafka_2.11-0.9.0.0、zookeeper-3.4.5-cdh5.7.0.tar
操作系統(tǒng):CentOS-6.5-x86_64-bin
2.2 平臺架構及處理流程
本平臺通過Logstash實時的將采集到的數(shù)據(jù)存儲到Kafka得broker集群中,Storm集群中的節(jié)點對Kafka中的數(shù)據(jù)進行處理,將處理后的數(shù)據(jù)輸出的數(shù)據(jù)庫DB中,將DB中的數(shù)據(jù)通過地圖的API上進行展示。其中Kafka集群和Storm集群的運行都依賴于Zookeeper。具體流程如圖2所示。
(1)數(shù)據(jù)采集
本系統(tǒng)可以依靠手機移動網(wǎng)絡信令來獲取用戶所在位置的經(jīng)緯度,從而收集獲取人流信息,通過對信令信息的相應字段進行分析、挖掘,并結合GIS技術實現(xiàn)自定義區(qū)域內(nèi)實時人流量的智能化統(tǒng)計分析。
(2)搭建集群環(huán)境
使用虛擬機VMWare構建有3個節(jié)點的集群環(huán)境,包括一個主節(jié)點master,和兩個從節(jié)點slave1和slave2。在集群環(huán)境搭建的過程中需要完成以下步驟:
完成主機名的修改:編輯/etc/sysconfig/network文件,修改hostname的值為master。
配置hosts文件,要用于確定結點的IP地址,方便后續(xù)對節(jié)點能快速查到并訪問。
關閉防火墻:systemctl stop firewalld
安裝JDK并完成環(huán)境變量的配置:在~/.bash_profile文件中設置JDK的環(huán)境變量 JAVA_HOME和PATH。
搭建集群環(huán)境:對master節(jié)點進行克隆,克隆出slave1、slave2,重復上面的步驟,修改主機名、修改主機名與ip地址的映射的host文件。
下載安裝并設置ntp,用來同步網(wǎng)絡中各個計算機的時間。
配置SSH免密碼登錄,以提高節(jié)點之間的訪問效率。
(3) Storm周邊環(huán)境的搭建
從圖2種我們可以看到,Storm的周邊環(huán)境包括Zookeeper、logstash、Kafka。
Zookeeper的安裝及配置:解壓Zookeeper的安裝包, 在~/.bash_profile文件中配置Zookeeper的環(huán)境變量,編輯zookeeper的配置文件zoo.cfg,添加zookeeper數(shù)據(jù)保存的路徑dataDir的參數(shù)值。
Logstash的配置及使用:Logstash 是一個開源的數(shù)據(jù)收集引擎,它具有備實時數(shù)據(jù)傳輸能力。它可以統(tǒng)一過濾來自不同源的數(shù)據(jù),并按照開發(fā)者的制定的規(guī)范輸出到目的地。解壓Logstash的安裝包, 在~/.bash_profile文件中配置Logstash的環(huán)境變量后即可使用Logstash完成數(shù)據(jù)的輸入和輸出。
Kafka的配置及使用:Kafka主要是為實時數(shù)據(jù)提供一個統(tǒng)一、高吞吐、低延遲的處理平臺。Kafka集群包含一個或多個服務器broker,每條發(fā)布到Kafka集群的消息都有一個類別,稱為Topic,每個Topic包含一個或多個Partition,Producer負責發(fā)布消息到Kafka broker,Consumer消息消費者,向Kafka broker讀取消息的客戶端。所以Kafka安裝配置后首先需要建立一個topic。
(4)搭建Storm架構
使用zkServer.sh start命令啟動Zookeeper集群服務。
搭建storm的集群環(huán)境,首先解壓apache-storm,在~/.bash_profile文件中配置storm環(huán)境變量,然后編寫conf/storm-env.sh和conf/storm.yaml文件,最后就可以啟動集群的storm環(huán)境了。
(5)Storm整合Kafka并存儲展示數(shù)據(jù)
Storm整合對接Kafka,首先需要在maven的pow.xml中加載一個storm-kafka依賴,然后配置一個SpoutConfig的對象,此對象主要是配置kafka相關的環(huán)境、主題、重試策略、消費的初始偏移量等等參數(shù)。最后將處理好的數(shù)據(jù)即Storm的tuple數(shù)據(jù)寫入到MySql中。最后可以SpringBoot構建Web項目將統(tǒng)計的結果進行展示。
3 結束語
Storm 的計算架構處理海量人流位置數(shù)據(jù)的定位,通過與lodstash、Kafka 和mysql 結合對人流信息進行了實時性的分析和處理,通過地圖API實時顯示人流所在地理位置的展示,能夠準確并及時地分析人流信息,為出行者提供最優(yōu)質的交通引導服務,減少擁堵狀況。
參考文獻:
[1] 李團結,從新法,李光明. 日志綜合管理平臺基于Storm框架的實現(xiàn)[J].中國新通信,2017(3):41-46[
[2] 2] 朱群. 基于Storm的交通信息實時處理系統(tǒng)的設計與實現(xiàn)[D]. 西安電子科技大學,2017.6
[3] 蔡正義. 基于大數(shù)據(jù)的城市居民出行分析建模[D]. 浙江大學,2018.7