标题 | 一种基于HBase的交通旅行时间计算方法 |
范文 | 乔彦克++陆婷 摘要:旅行时间计算是智能交通系统研究的重要内容,准确的旅行时间计算结果可以为交通管控部门提供决策支持,缓解交通拥堵情况。近年来,随着监测水平的提高,交通监测数据呈现海量增长趋势。传统的关系型数据库应对海量数据时存在高并发读写和扩展性不足等瓶颈。为解决智能交通因数据规模过大带来的存储和查询问题,提出了一种基于HBase的交通旅行时间计算方法,设计了面向查询优化的行键策略,并在此基础上提出了单时段及多时段旅行时间计算方法。实验表明,该计算方法与传统的基于Oracle的算法相比,时间效率提高2~3倍,并且有较高的读写性能及良好的可扩展性。 关键词:旅行时间;海量数据;HBase;智能交通 DOIDOI:10.11907/rjdk.151383 中图分类号:TP301 文献标识码:A 文章编号文章编号:16727800(2015)008002204 基金项目基金项目:北京市自然科学基金重点项目(4131001);北京市属高等学校创新团队建设与教师职业发展规划项目(IDHT20130502);北京市教育委员会科技计划重点项目(KZ201310009009);北方工业大学科研启动基金项目(2014) 作者简介作者简介:乔彦克(1989-),男,河南漯河人,北方工业大学大规模流数据集成与分析技术北京市重点实验室硕士研究生,研究方向为分布式数据库;陆婷(1990-),女,山东菏泽人,北方工业大学大规模流数据集成与分析技术北京市重点实验室硕士研究生,研究方向为流数据的存储优化。 0 引言 交通旅行时间计算是智能交通领域的一个重要研究内容,精准的旅行时间计算、评估可以为城市路网规划、城市道路交通管理与控制提供重要依据,为道路交通的研究、交通规划设计、交通管理部门提供决策辅助支持,对城市交通拥堵问题起到一定的缓解作用。 随着智能交通的迅速发展,大量监测设备用于交通数据的采集。以某大型城市的车辆识别数据为例,道路上部署的车辆识别传感器数量为5 000个,每个传感器的高峰采样频率为1条/秒,则每秒将产生5 000条车辆识别数据,每天的高峰折算率为0.33,一年车辆识别数据记录数将超过500亿条,数据存储量为10TB级(来自实际项目)。面对如此规模的数据,传统的关系型数据库无法直接有效地满足海量时序数据的存储和处理请求,存在扩展能力差、写入延迟高等问题,并且传统的旅行时间计算大多是基于车辆采样数据或者浮动车数据等非全样数据,在反映路段旅行时间的分布上存在一些问题。作为新型的数据处理技术,HBase[1]已经在监测数据的大规模存储方面得到应用,文献[2]就把HBase作为大规模无线传感网的存储媒介。 为解决上述问题,本文提出了一种基于HBase的交通旅行时间计算方法,针对海量交通监测数据需求,以HBase这种NoSQL类型的数据库作为监测数据的基础存储系统,并在此基础上进行旅行时间的全样数据计算;实验表明,该计算方法更准确,且满足可扩展性与高并发性。 1 相关工作 旅行时间是交通出行服务水平的重要衡量指标,近年来对旅行时间的研究日益增多。从检测技术角度来看,通常有基于线圈的估计,基于浮动车的估计和基于车牌识别的估计等[3]。从数据来源看,目前的旅行时间估计所用数据主要有两类:一是仿真数据,二是检测数据。在检测数据中,部分使用直接测量样本车辆的旅行时间来进行路段旅行时间的估计,如基于浮动车和车牌识别等,但因是非全样数据,因此在反映路段旅行时间的分布上存在一定问题。本文采用全样的实测车牌识别数据对旅行时间进行计算。 目前数据的存取技术主要有以下几种:(1)传统的关系型数据库。在数据存储方面,只能采用结构化的数据模式,不支持海量数据的存储,严格遵循ACID原则使其不适合大量数据的定期更新,基于“极少发生节点失效”的假设而构建的传统关系型数据库不适用于节点失效经常发生的大规模集群应用场景;在数据查询方面效率极其低下。 (2)HDFS/MapReduce。目前主流的大规模数据处理技术Hadoop/MapReduce是专为离线处理和大规模数据分析而设计的[4],缺乏实时随机存取数据的能力。车牌识别数据是连续的时间流数据,不适合Hadoop的存储模式——存储少量非常大的文件。文献[5]虽然提出了一种MapReduce下计算旅行时间的方法,但其可用性受到制约,这些数据无法实时查询,执行一个任务计算的都是全部数据,如果只需要计算某个时段的旅行时间,该方法往往无能为力。 (3)HBase[6]。它是构建在Hadoop之上的一种NoSQL数据库,具有高可靠、高可扩展的特点,支持随机读写并且有出色的写入性能和不错的查询性能。 综上所述,HBase最符合存储海量监测数据的需求,故本文以HBase作为海量车牌识别数据的存储引擎。 2 基于HBase的旅行时间计算 2.1 存储系统架构 图1所示为识别数据存储架构,数据写入部分采用Loadrunner模拟实时数据的生成并写入HBase数据库,其中模拟数据来自实际监测的数据,旅行时间的计算则是通过计算HBase的结果得到。 图1 车牌识别数据存储架构 对于不同日期采集的监测数据,有些系统会采用按天建表的策略,此策略的好处在于录入速度快,当用户请求一天范围内的数据时,只需要访问当日的数据表。但是随着时间的推移,越来越多的表难于管理,且当用户请求多日的数据时会访问多张数据表,影响访问性能。本文采用将车牌识别数据迁移到HBase集群中,采用一张大表存储的方法,车牌数据记录条目达上亿级别。 HBase是为面向亿行级别的表设计的,可以很好地满足海量数据扩展要求。但是HBase只能使用按字典序排列的行键来检索记录,因此行键的设计尤为重要。在介绍优化查询的行键设计策略之前,先介绍相关概念定义。 2.2 相关概念 概念1 车辆旅行时间(Travel time):车辆从进入到离开某一路段所花费的时间; 概念2 路段旅行时间:单位时间内该路段经过车辆的旅行时间平均值; 概念3 车牌识别数据:监测点识别到的车辆数据,包括车牌号、车身颜色、记录时间、监测点ID等信息; 概念4 行键(Row key):用于唯一标识HBase表的每一行,没有数据类型,视为字节数组[1]。 综合考虑,本文的旅行时间指路段旅行时间,选取15分钟和5分钟两个长度的时间段进行计算研究。 定义1:此公式用于计算一辆车在某路段的旅行时间,由离开该路段监测点时间与进入该路段监测点时间差值得出。 定义2:此公式用于计算某路段的旅行时间,为n辆车旅行时间的均值。 结合具体应用场景,本文旅行时间计算首先对原始车牌识别数据进行存储,然后通过HBase读取数据并进行计算。 2.3 查询优化的行键设计策略 HBase数据库系统不同于传统的关系数据库,它没有特定模式,建模工作需要数据库设计人员来完成。为了提高数据的查询性能,必须结合应用场景设计出能高效查询的行键,Opentsdb[7]就采用了高效的复合行键设计模式,通过把不同监测指标放入合适位置,组合成能够高效检索的行键。车牌识别数据由监测时间、车牌号、监测点ID、车辆颜色、车辆大小等不同的监测信息组成,且主要的查询条件为时间、监测点和车牌号。 由于HBase不支持二级索引,故本文采用复合行键。 行键可选方案(部分)如下: 方案1: 该方案中行键由时间监测点ID和车牌号复合而成,车牌识别数据按时间顺序存储。其中 方案2: 该方案中识别数据按监测点排序,同一监测点下的数据顺序存储。其中 方案3: 该方案中识别数据按车牌号顺序存储,行键以车牌号起始。其中 以上是几种复合行键方案,方案一以时间为主要索引字段,也就是在时间这个维度上对整个表进行排序,相同监测点ID下包含不同的车牌号;方案二以监测点为主要索引字段,相同监测点的数据在HBase中按时间顺序连续存放;方案三以车牌号为主要索引字段,相同车牌号的数据按监测点顺序连续存放。 对车牌识别数据这类交通监测数据的查询主要是基于时间断面的查询。时间是定位结果的最关键因素。因此,本文以方案一作为HBase识别数据表的行键设计方案。 实际应用中行键结构如表1所示。 采用方案一的时间在前复合行键,使得基于时间条件的查询效率非常高(避免了全表扫描),除了应用于旅行时间的计算外,还适合很多智能交通的应用场景,如交通流的计算等。 目前HBase跨列族的数据访问效率较低[5],故本文的识别数据表采用一个列族来存放识别数据。 2.4 旅行时间并行计算 在描述具体算法前先介绍以下定义: (1) HashMap (2) HashMap (3) startTime,旅行时间计算的起始时间。 (4) stopTime,旅行时间计算的停止时间。 (5) result,给定时间范围内的HBase数据集。 (6) List travelTime,各路段在给定时段的旅行时间。 单个时段旅行时间计算算法(STP)描述如下: INPUT:startTime,stopTime OUTPUT:OUTPUT :travelTime Begin 根据startTime,和stopTime,设定HBase扫描起止行键; 根据起止行键扫描HBase,得到查询结果集result; 遍历result,得到不同车辆的轨迹数据trackMap; 遍历trackMap,比对路段信息,得到不同车辆经过不同路段的旅行时间travelTimeMap; 遍历travelTimeMap; If 路段的旅行时间list非空,取总旅行时间的均值,并将结果存放在travelTime中 End 连续时段旅行时间计算算法(MTP): 对于多个连续时间段的旅行时间计算,本文采用多线程的方法,并行对各个时间段的旅行时间进行处理。 图2是旅行时间计算过程中数据流动示意图,由最初存储在HBase中的车牌识别数据,经过多层处理,得到不同路段的旅行时间。 图2 旅行时间计算数据流动 3 实验分析 实验平台物理架构见图3。 各模块设备配置:三台双核3.0 GHz CPU和4G内存的Loadrunner服务器,使用Loadrunner模拟识别数据的实时写入过程。4个节点的HBase集群,1个主节点,3个从节点。集群配置为四核2.4GHz CPU,8GB内存,CentOS 6.4 64位操作系统,Hadoop版本为1.2.1,HBase版本为0.94.14。 实验方法:首先对单个时段旅行时间计算进行对比分析,选取5分钟和15分钟作为基本计算时段;然后对多时段的旅行时间采用MTP方法计算,以15分钟作为基本的旅行时间计算单位。 综合分析以上结果,可以发现,HBase和Oracle的计算时间变化基本吻合,且计算时间优于Oracle,而且二者进行并行计算的总时间也与数据量呈正相关关系。 通过以上实验可以看出,通过HBase存储车牌识别数据并在此基础上计算旅行时间,其性能优于传统的Oracle数据库,对于全样数据下的旅行时间计算,计算时间和数据量呈正相关。相对Oracle,HBase具有很强的扩展性。 4 结语 本文试验性地将交通监测数据由传统关系数据库迁移到新型NoSQL数据库HBase上,并在此基础上进行了道路旅行时间的计算,对于处理这一类时序数据具有借鉴意义。由实验可以看出,相对关系数据库,HBase在计算旅行时间时性能提升2~3倍,而且HBase集群容易大规模扩展,可以作为构建大规模数据存储系统的基础存储架构。 参考文献: [1] LARS GEORGE.HBase 权威指南[M].代志远,刘佳,蒋杰,译.北京:人民邮电出版社,2013. [2] 陈庆奎,周利珍.基于HBASE的大规模无线传感网络数据存储系统[J].计算机应用,2012,32(7):19201923,1977. [3] 柴华骏,李瑞敏,郭敏.基于车牌识别数据的城市道路旅行时间分布规律及估计方法研究[J].交通运输系统工程与信息,2012,12(6):4147. |
随便看 |
|
科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。