路况大数据分析平台的设计与实现
2020-02-03康耀龙冯丽露张景安
康耀龙 冯丽露 张景安
(1.山西大同大学 计算机与网络工程学院 山西省大同市 037009)
(2.山西大同大学 教育科学与技术学院 山西省大同市 037009 3.山西大同大学网络信息中心 山西省大同市 037009)
1 引言
我国道路基础设施可以说是世界上最完善的国家,道路的复杂情况也可以说是世界上最复杂的国家之一。在大量的车流量数据中分析和找出超速、事故逃逸等情况,一般的技术是难以解决的,而且每天车流量不是固定的,车量行驶路线也极其复杂,所以必须使用大数据技术。本系统使用了现在主流的Apache Spark 分布式计算引擎对以上问题予以解决。
2 系统分析
现实中道路卡口收集的数据是杂乱的、非结构化的,使用传统模式来存储数据需要对这些数据进行大量的转换,而且要分离出大量的表,表与表之间存在大量的联系,这样会使本来简单的描述数据变的复杂,由于表和表的联系增多,表查询的复杂度会急剧增加;而且数据的收集是每分每秒,所以这会是一个海量的数据,传统数据库来存储如此大量的数据会使硬件激增,而且总有一天会达到存储的阈值,到时需要做数据迁移也会是一个巨大的难题。
本系统采用的是分布式文件存储系统HDFS(Hadoop Distributed File System)。HDFS 具有高容错的特点,而且它部署在大量的普通的计算机硬件上,可以说是非常的廉价,但是它又具有超大的存储量,而且是可以动态扩容,在根本上解决了存储容量和成本的问题。HDFS 还可以结合HBase 使用,而HBase 是非结构化数据库,所以非结构化数据存储也迎刃而解。
3 系统详细设计
3.1 系统总体结构设计
整个平台由应用层、数据层和基础层实现。应用层是系统的核心层,关键技术在应用层得以实现。这一层由分布式计算引擎,将数据层的数据处理。这些数据由Spark Core 进行抽取、转换、加载。在这一层中还有数据的清洗,因为原始数据都是一些非结构化,含有脏数据,难以直接使用的数据。这些数据按照一定的规则,比如空数据用-1 代替,无效数据删除,还要对外服务提供接口,进行数据的转存。数据层也是大数据中心。这一层提供了非结构化数据处理技术支持,本系统使用的是Apache Spark 1.6。结合Hive 将数据进行ETL 处理。本层是数据的存储层,采用的技术是分布式文件系统,对海量数据的管理。基础层也是获取层。该层的主要作用是结合道路卡口和电警系统对数据进行收集,对日志文件的收集。在收集过程中也会进行简单的ETL 操作,本层是数据的来源层。系统总体结构如图1 所示。
图1:系统总体结构图
3.2 系统数据库的设计
本系统分析的数据来自非结构化数据,并对这些数据进行处理过后得到结果,需要将这些结果存在本地数据中,所以需要设计一些结果表,而这些结果表是根据后续的业务需求而定的。本系统有四个结果表,卡口状态表、前N 车流量卡口表、前N 车流量卡口详情表、车辆轨迹表。
4 系统实现
4.1 卡口状态分析模块
道路卡口是数据收集的基础硬件,如果某个或某些卡口发生故障,而没有及时排查出来,那么该卡口监控的道路将失去联系。该模块主要功能是检测和排查异常的卡口摄像头。通过收集的数据检索出正常摄像头个数与实际的摄像头个数是否相等,可以判断有多少摄像头故障,记录下异常摄像头个数。通过Spark 算子将所有数据分别加载到内存中,然后将正常的和异常的摄像头详细信息按照一定的规则拼接到字符串中。将数据缓存、入库以备后面的工程使用。
4.2 卡口车流量分析模块
卡口车流量是确定该路段交通是否繁忙,什么时间段最繁忙,提供数据支持,在哪些路段需要增派警力协助交通管理。本模块通过上一个模块的落地数据进行进一步的计算和分析,经过上一轮分析,数据不是很大,可以直接加载至内存计算。将所有数据加载至内存后,使用Spark 算子进行迭代运算,将每一条数据按照一定的规则切分,得到了每个卡口下经过的车辆总数。然后将每个卡口的车辆总数进行二次排序,得到需要的最高车流量卡口的编号以及具体信息。
卡口车流量分析模块关键代码:
4.3 车辆分析模块
该模块是对最可能发生事故的路段进行数据的转存,如何确定哪些路段最可能发生故障,是这个模块的关键。最有效的方法是通过机器学习算法做出一个模型,再将每个卡口收集的数据带入该算法模型,进行道路预测。而本系统没有机器学习功能,所以通过经验来确定,也就是车流量最高的路段最容易发生事故。所以经过卡口车流量分析模块分析后,得到的一系列车流量最多的卡口号。再把这些卡口的数据经过算子的清洗和切分,就能得到这些卡口所监控到的所有的车辆信息。通过Apache Spark 内部提供的JDBC 接口将数据写入MySQL 中。
4.4 车辆轨迹刻画模块
车辆轨迹刻画模块是追踪可疑车辆的最好的方法。在确定某一辆车的车牌之后,就可以根据该车辆的行动路线确定该车主是否是可疑分子。本模块先将车牌号加载至广播变量中,与所有的数据进行对比,得到一系列的卡口号。再将这些卡口的所有数据加载至内存中,根据算子将每个卡口的时间提取出来,然后按照时间的先后顺序进行二次排序。这样该车辆经过的卡口顺序就得到了,最后通过算子将每个卡口号和地域名进行字符串的拼接,得到该车辆的轨迹路线。
5 系统测试
系统测试是确定该系统是否完成开发,确定它是否存在较大缺陷的最主要的方法。在测试环境下本系统的总体运行情况很稳定。模拟现实卡口数据的情况,整个集群在启动过程中没有出现问题,通过Apache Spark 官方提供的Web UI 观察每个应用程序和Job 的运行情况均没有错误,在数据库中的运行结果的查询也正确。
6 总结
本系统使用的Apache Spark 计算框架,让车辆检索的速度更快,可以在几分钟内检索海量信息,最快速的发现问题,对于道路上的紧急情况能够更快的做出反应,本系统针对道路上的主要问题给出了解决方案。卡口状态分析模块能够及时发现道路基础设施是否故障,而且能够确定哪些路段是事故多发、繁忙路段,什么时间段是事故的多发期,从而可以增派警力对这些路段的交通进行梳理。车辆轨迹刻画模块可以及时发现可疑车辆,并对可疑车辆进行监控和定位,帮助警方更快的破案。