許大宏
摘 ?;要: 為了提升車牌識別系統中海量識別數據與涉案車輛、交通違法等信息的實時分析、計算與檢索性能,在對傳統技術分析的基礎上,針對現有系統中無法實現大數據分析與檢索的問題,提出了利用Elasticsearch大數據實時檢索技術構建交通大數據處理平臺,在此架構上對交通識別數據進行實際測試。實驗結果表明,所用技術能夠有效解決目前的交通大數據檢索和分析等關鍵問題,各項指標都滿足了用戶需求。
關鍵詞: 大數據; Elasticsearch; 車牌識別; 檢索
中圖分類號:TP3 ?; ?; ?; ?; ?;文獻標志碼:A ?; ?; 文章編號:1006-8228(2014)12-12-03
Application research on Elasticsearch in license plate recognition system
Xu Dahong
(Zhenjiang Branch, Jiangsu Union Technical Institute, Zhenjiang, Jiangsu 212016, China)
Abstract: In order to enhance the functions including massive data identification, the real time analysis on the information of the involved vehicle, traffic violations, computing and retrieval performance of license plate recognition system, based on the traditional technical analysis, since the existing systems can't analyze and retrieve for big data, a large real-time data retrieval using Elasticsearch technology is proposed. The traffic identification data is tested on this platform. The experimental results show that the technology can effectively address key issues such as the current traffic large data retrieval and analysis. The indicators all meet the need of users.
Key words: big data; Elasticsearch; license plate recognition; retrieval
0 引言
大數據開啟了一次重大的時代轉型[1],面對海量的車牌識別數據,如何高效分析與處理,提取出用戶需要的信息是一個巨大的挑戰。又如車流量統計分析、車輛軌跡分析、方向分析、智能跟蹤、涉案車輛和交通違法車輛的實時計算與報警、案件線索信息檢索等常規業務均需要對大數據的海量檢索。
HBase[2-4]是一個分布式的、面向列的、可靠的和可伸縮的存儲系統,但在數據同步、監控和查詢復雜度等方面無法滿足以上應用場景;Hive[2,5]是基于Hadoop[2]的一個數據倉庫工具,可以將結構化的數據文件映射為一張數據庫表,并提供完整的SQL查詢功能,可以將SQL語句轉換為MapReduce任務進行運行,但無法滿足實時性的要求。傳統關系型數據庫在寫入速度、大數據查詢方面無法滿足需求,因此,本文采用基于Lucene[6]的Elasticsearch[7-9]搜索引擎作為海量數據的分析工具。
Elasticsearch是一個基于Lucene構建的開源,分布式,RESTful架構的搜索引擎,具有穩定、可靠、快速、安裝簡單等特點;支持多客戶端調用、結構化與非結構化數據源,可實現PB級數據量實時檢索,復雜查詢模式和多維統計等。
1 Elasticsearch設計架構
Elasticsearch部署結構圖如圖1所示,底層支持本地文件系統或者Hadoop文件系統等文件系統,通過Elasticsearch提供的API(Application Programming Interface,應用程序編程接口),可以獲取集群的狀態信息,節點負載信息、建立客戶端與集群交互,實現索引的CRUD(Create、Retrieve、Update、Delete)操作。
圖1 ?;Elasticsearch 部署結構圖
分布式索引與快速檢索作為Elasticsearch獨有優勢,在實現算法上具有它的獨特之處,在此僅對Elasticsearch的索引算法作出如下分析。
step1:創建索引內容相關的mapping信息(類似于關系型數據庫的表結構)。
step2:創建與集群交互的客戶端,構建JSON(JavaScript Object Notation)串。
step3:指定索引文檔要索引的目標索引庫(index),索引類型(type)和文檔ID,如果沒有指定文檔ID,Elasticsearch會通過UUID工具自動生成一個22位字符的UUID作為文檔ID。索引庫、索引類型和id組合作為一個文檔的索引庫中的惟一性標識。
step4:通過tcp協議(rest的話就是通過http協議)發送請求到Elasticsearch集群任意節點,接收請求的節點把請求轉接到主節點。
step5:主節點接收到請求后,開始進行分片操作,先讀取集群狀態,把目標索引及其分片信息提取出來,根據索引數據的id、類型以及索引分片信息進行哈希取模,確定把該條數據分配到哪個分片,分片公式如下:
shard=hash(routing)%number_of_primary_shards
shard為索引要存儲到的分片,number_of_primary_shards為集群設置的索引分片數,routing為文檔id。shard函數最后產生一個0至 number_of_primary_shards-1之間的數。
step6:找到索引分片的主分片,先把索引請求提交到主分片處理,判斷索引操作的類型,索引操作有兩種。一種是INDEX,當要索引的文檔id已經存在時,不會覆蓋原來的文檔,只是更新原來文檔;另一種是CREATE,當索引文檔id存在時,會拋出該文檔已存在的異常信息。
通過(InternalIndexShard)查找與請求索引數據類型(type)相符的mapping。對要索引的JSON字符串進行解析,根據mapping轉換為對應的解析結果。
step7:最后調用RobinEngine中的相關方法(添加或修改)對底層lucene進行索引操作,這里是寫入到lucene的內存索引中(RobinEngine.innerIndex)。
step8:主分片索引請求完就把請求發給副本進行索引操作,根據集群設置的action.write_consistency參數值,默認是使用quorum,即quorum值必須大于(副本數/2+1),如副本數為2,2/2+1=2也就是說要要至少插入到兩份索引中,索引操作才算操作完成。操作完成后把成功信息返回給客戶端。
2 測試實例
車牌識別系統常用功能包括:過車軌跡信息與圖片檢索、多點碰撞分析、車輛伴隨分析、盜搶車輛分析、車輛頻繁出現點分析、布控車輛實時跟蹤等。下面的測試實例將以過車信息檢索對Elasticsearch進行壓力、性能、穩定性等常規測試。
2.1 測試環境
作者使用10臺HP ProLiant BL460c G7 刀片服務器和最新版本的軟件發行版本進行集群測試,測試軟硬件配置如表1所示。
表1 ?;測試機器軟硬件配置信息表
2.2 索引與檢索測試
采用2013年至2014年7月的某市車牌識別數據共計47億條作測試數據,索引字段主要有車牌號、車牌顏色、過車地點ID、車道ID、通過時間、圖片ID。在識別數據導入創建索引過程中,對索引速度的記錄顯示:平均速度能在每秒8千至1萬之間(需求最大值為400條/秒);1億條索引數據大約占用100G的存儲空間(所有數據共計4700G);采用Jmeter-2.5做壓力測試,測試過程中CPU使用率平均4%;內存占用率在60-80%之間;I/O由于采用光纖存儲,基本上沒有等待時間。由用戶給定測試用例,100為用戶最大并發數,對用例分別測試1-100之間幾個并發數,測試結果見表2。測試過程中的系統和JVM資源消耗情況如圖2和圖3所示。測試結果表明,索引和搜索速度均超過用戶設定的最大值,在未來幾年內基本上不會存在使用性能上的問題。
表2 ?;用例測試響應時間表(單位:s)
2.3 穩定性測試
Elasticsearch是去中心化的,集群中的任何節點都有可能成為主節點,節點之間通過zen Discovery來發現其他節點(相當于Hadoop中的zookeeper),當主節點宕機時,其他節點自動選舉主節點并加入,這個過程是自動完成且是實時的;當其他節點宕機時,會自動恢復該節點上的分片數據(其他節點備份)進行重新平衡操作。在本文中,分別對主節點和從節點分別逐個關閉,直至只存在一個節點時集群還能正常運行,只是性能會下降。當重啟節點,或者集群滿足不了需求時,需要添加新的節點,只要啟動節點,節點就會立即加入集群中,集群會對所有的分片數據再次平衡(平均分配數據到每個節點上)。經過測試,集群的穩定性和擴展性均能滿足用戶需求。
3 結束語
本文在對流行的分布式存儲與檢索框架和傳統關系型數據庫進行分析測試的基礎上,提出了利用基于lucene內核的分布式搜索引擎Elasticsearch作為車牌識別系統的分布式存儲與檢索服務。通過對該框架的穩定性、擴展性、實用性和統計與檢索性能的測試,結果顯示,在大數據量的情況下該識別系統能滿足用戶的實時性要求,表明技術上是可行的。Elasticsearch同時還提供多種方式來對集群進行監控與操作。希望本文可以對類似需求的用戶提供有效的借鑒與參考,真正實現對大數量的實時檢索與訪問。
參考文獻:
[1] (英)維克托·邁爾-舍恩伯格,(英)肯尼思·庫克耶.大數據時代[M].浙
江人民出版社,2013.
[2] White T.Hadoop權威指南(中文版)[M].清華大學出版社,2010.
[3] 卓海藝.基于HBase的海量數據實時查詢系統設計與實現[D].北京
郵電大學,2013.
[4] Himanshu Vashishtha, Eleni Stroulia. Enhancing Query Support in
HBase via an Extended Coprocessors Framework[J]. Service Wave''11 Proceedings of the European conference on Towards a service-based internet,2011.
[5] 趙龍,江榮安.基于Hive的海量搜索日志分析系統研究[J].計算機應
用研究,2013.11:3343-3345
[6] (美)高斯帕那,(美)哈特赫.Lucene IN ACTION中文版[M]. 電子工業
出版社,2007.
[7] http://www.Elasticsearch.org/.
[8] Clinton Gormley,Zachary Tong. Elasticsearch:The Definitive Guide[M].
O'Reilly Media,2014.
[9] 白俊,郭賀彬.基于Elasticsearch的大日志實時搜索的軟件集成方案
研究[J].吉林師范大學學報(自然科學版),2014.1:85-87