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