一种基于Hadoop的车辆拥挤度获取方法
技术领域
本发明属于车联网通信技术领域,更为具体地讲,涉及一种基于Hadoop的车辆拥挤度获取方法。
背景技术
对于许多智能城市应用来说,识别城市区域的移动车辆的热点是必不可少的,而车辆的热点可以被描述为车辆拥挤度高的区域,极高拥挤度的热点通常是交通拥塞的位置。
直观地说,一个点的拥挤度反映了一个点是有多拥挤,当车辆集的分布式未知的时候测量拥挤度变得困难,为了量化一个地方未知对象集的拥挤度,我们提出了移动集群算法。
我们假设有一组N个车辆部署在一个二维城市平面A,在这些N个车辆中,一个小的子集 是我们有完全认知的传感器组。然而,对于其余部分我们是没有认知的,我们的任务是使用NS的报告来推断其余部N/NS对象的状态,特别是他们的空间属性。
假设城市A是一个给定的区域,传感器对象NS任意移动,它们的移动性无意地提供了一种感应A附近的拥挤的状况,这些传感器以异步的方式每5秒定期报告它们的当前状态。
该报告是一个6元组的形式φ=(m,x,y,v,β,t),m∈N是一个对象识别符唯一的识别发送报告的传感器,(x,y)∈A是m的当前位置,N代表m的瞬时速度,β是一个二进制值表示车辆是否空载,t为发送报告的时间,因为报告每5秒被发送回来,平均每秒我们能得到五分之一的传感器报告,这些报告称为传感报告,为了增加我们样本数据集的粒度,除了这些真正的传感报告,在没有报告的时间内,我们运用线性插值方法估计车辆状态,我们表示所有报告集
表1列出了用于这项工作的常用符号。
表1 为常用符号及描述
接下来我们定义用来量化地点拥挤度的拥挤度函数,一个简单的方法来量化一个点的拥挤度是应用瞬时这个点的速度、最大和最小速度的一个线性函数。
定义1:给定义一物理位置(x,y)和报告集Φ,速度谱是报告集Φ中在位置ι时间t所有报告的车辆速度集,即,
所有时间的速度谱可以写成因为时间是离散,Φ包含有限数量的报告,这样速度谱也是有限的。
定义2:地点速度定义为位置ι时间t速度谱的平均。
定义3:给定地点ι的线性拥挤度定义为速度谱的顺世俗的的互补的比较相对数的指数移动平均。
vmax(ι)是ι的最大速度,vmin(ι)是ι的最小速度,αι和τι是获取位置ι动态性的两个参数。
拥挤的线性函数是基于一个隐含的假设,即车辆的速度是均匀分布在速度谱,它是在实践中不一定准确。
定义4:给定地点ι=(x,y)的统计拥挤度定义为速度谱的瞬时速度的互补累计分布函数的指数移动平均,即,
P(v≤v(t)(ι)),v∈VΦ(ι)代表位置ι小于等于瞬时平均速度速度的概率。
一般的实现方式是通过对算法顺序执行来做的。
然而,移动集群算法是串行的实现方式,首先通过MapReduce()函数对统计的GPS信息进行时间和区域化处理,将同一时刻t内的GPS信息划分成若干个区域,再分别计算各个区域内的拥挤度,在计算完一个区域的统计拥挤度和线性拥挤度后再计算下一个区域,直到计算完t时刻内的全部区域,然后计算时间t+1的统计拥挤度和线性拥挤度,按时间增长顺序依次进行计算,这种利用传感器对象技术,动态获取车辆标识、位置、瞬时速度、前进方向、即时时间等信息,随着交通数据获取源的增加,实时的交通信息数量庞大,这会导致计算所花费的时间长、效率低,不适合用来在实际环境中分析交通状况。
发明内容
本发明的目的在于克服现有技术的不足,提供一种基于Hadoop的车辆拥挤度获取方法,通过多个MapReduce任务并行处理统计的GPS消息,从而节约计算时间,同时具有可扩展、高效率以及高容错性的性能。
为实现上述发明目的,本发明一种基于Hadoop的车辆拥挤度获取方法,其特征在于,包括以下步骤:
(1)、通过MapReduce编程模型处理统计数据;
输入统计的GPS信息,并通过MapReduce编程模型将GPS信息分成N个数据片段,Map()函数读取数据片段时,每次读取一条记录,即数据片段的一行GPS信息,待读取完一条记录后再读取下一条记录,Map()函数将读取的这行记录分解成键值对<Kn,Vn>,n=1,2,…N,在Kn中输入这行记录首字符在文件中的偏移量,在Vn中输入这行消息的内容,同时声明一个数组1,把计算统计拥挤度和线性拥挤度时需要的时间time、经度long、纬度lat、速度speed存入数组1中,Hadoop为每一个数据片段创建一个Map任务,所有的Map任务之间采用并行计算方式,Hadoop同时会根据配置文件中设置的Reduce任务的数量来创建Reduce任务,Reduce任务是基于Reduce()函数执行的,多个Reduce任务之间也是并行执行的;
(2)、第一个MapReduce()函数进行时间和区域化处理:
(2、1)、在第一个Map()函数中对数组1中的经度、纬度进行处理,对研究的区域进行网格化;对经度为i,纬度为j的区域site(i,j)作标记,则第一个Map()函数输出对应的Kn为site(i,j),对应的Vn为时间time、速度speed;
(2、2)、在Reduce()函数中,分别计算车辆在同一时刻的相关速度参数;将经度、纬度相同的Kn对应的所有Vn合并成一个list链表,形成<Kn,list(Vn)>组,同时声明一个数组2,将速度speed提取出来存放在数组2中,令ι=site(i,j),然后根据公式求区域site(i,j)内所有车辆在时刻time的平均速度再计算区域site(i,j)内所有车辆在时间time速度的最大速度vmax(ι)和最小速度vmin(ι),最后计算区域site(i,j)内所有车辆在时间time速度小于平均速度的比例P(v≤v(t)(ι)),v∈VΦ(ι),则第一个Reduce()函数的输出对应的Kn值为site(i,j),对应的Vn为time,vmax(ι),vmin(ι),P(v≤v(t)(ι)),v∈VΦ(ι),最后将输出存放到Hadoop的分布式文件***hdfs上;
(3)、第二个MapReduce()函数对记录的GPS信息进行联结处理:
(3、1)、将第一个MapReduce()函数的输出和上一时刻time-1计算得到的统计拥挤度和线性拥挤度的值输入到第二个MapReduce()函数中;
(3、2)、第二个Map()函数将读取的每条记录打包,使其可以在Reduce侧进行联结;第二个Map()函数处理读取的每条记录时,用数据源标记每条记录,然后将记录打包并标记,这时记录包中含有原始记录和数据源标签,第二个Map()函数则为每个记录包设置组键值;第二个Map()函数的输出被记录为键/值对,并按键来分区,对于联结,第二个Map()函数则输出一个记录包,采用组键作为联结的键;
(3、3)、第二个Reduce()函数接收第二个Map()函数的输出数据,并对其值进行完全交叉乘积:
第二个Reduce()函数对相同联结键的所有记录一起处理,通过解包得到原始记录,以及根据标签所得到记录的数据源,第二个Reduce()函数对接收到的输入数据值进行完全交叉乘积,当第二个Reduce()函数接收到的输入数据值分别有不同的标签时,交叉乘积就是这些输入数据的原始集合,交叉乘积得到的每个合并结果被送入Combine()函数,则Combine()函数得到的结果为:
site(i,j),time,vmax(ι),vmin(ι),P(v≤v(t)(ι)),v∈VΦ(ι),site(i,j),time-1,
其中,t为时刻time,(t-ιι)表示下一时刻time-1,ιι是获取位置ι的动态性参数,各条记录的时间time相同,当第二个Reduce()函数接收到的输入数据值未含有标签或标签相同,则Combine()函数丢弃其合并结果;
(4)、通过第三个MapReduce()函数中的Map()函数计算统计拥挤度和线性拥挤度:
在第三个Map()函数中输入每条记录的Vn值:
site(i,j),time,vmax(ι),vmin(ι),P(v≤v(t)(ι)),v∈VΦ(ι),site(i,j),time-1,
根据公式计算得到时刻time的线性拥挤度;
再根据公式计算得到时刻time的统计拥挤度;其中,αι和ιι是获取位置ι的动态性参数。
其中,所述的Vn中输入消息的内容包括:车辆编号no、gps消息记录序号、车辆ID:c-objid、车牌号c-regnum、车的颜色c-regcolor、收到本条gps消息的时间time、该时刻车辆所在位置的经度long、该时刻车辆所在位置的纬度lat、该时刻车辆的速度speed、出租车的行驶方向direction、车辆所在位置的高度height、该时刻车辆是否空载state。
本发明的发明目的是这样实现的:
本发明基于Hadoop的车辆拥挤度获取方法,通过多个MapReduce任务并行处理统计的GPS消息,再通过拥挤度计算函数将各个区域在同一时刻的统计拥挤度和线性拥挤度并行地计算出来,这样克服了移动集群算法计算时间长的缺陷,大大提高了计算效率,基于Hadoop的算法同时能够自动保存数据副本和扩展计算机集簇,同时具有高扩展性和容错性。
同时,本发明基于Hadoop的车辆拥挤度获取方法还具有以下有益效果:
(1)、高效性;在处理大量数据时基于Hadoop的车辆拥挤度获取方法比移动集群算法运行的时间少,计算效率大大提高,此外,Hadoop能够在节点之间动态地移动数据,以保证各个节点的动态平衡,因此其处理速度非常快;
(2)、高扩展性;基于Hadoop的算法是在可用的计算机集簇间分配数据完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中;
(3)、高容错性;基于Hadoop的算法能够自动保存数据的多份副本,并且能够自动将失败的任务重新分配。
附图说明
图1是本发明基于Hadoop的车辆拥挤度获取方法流程图;
图2是基于本发明和基于移动集群算法的程序运行时间对比柱形图。
具体实施方式
下面结合附图对本发明的具体实施方式进行描述,以便本领域的技术人员更好地理解本发明。需要特别提醒注意的是,在以下的描述中,当已知功能和设计的详细描述也许会淡化本发明的主要内容时,这些描述在这里将被忽略。
实施例
图1是本发明基于Hadoop的车辆拥挤度获取方法流程图。
在本实施例中,如图1所示,本发明基于Hadoop的车辆拥挤度获取方法,包括以下步骤:
S101、通过MapReduce编程模型处理统计数据;输入统计的GPS信息,并通过MapReduce编程模型将GPS信息分成N个数据片段,Map()函数读取数据片段时,每次读取一条记录,即数据片段的一行GPS消息,待读取完一条记录后再读取下一条记录,Map()函数将读取的这行记录分解成键值对<Kn,Vn>,n=1,2,…N,在Kn中输入这行记录首字符在文件中的偏移量,在Vn中输入这行消息的内容,其中,Vn中输入消息的内容包括:车辆编号no、gps消息记录序号、车辆ID:c-objid、车牌号c-regnum、车的颜色c-regcolor、收到本条gps消息的时间time、该时刻车辆所在位置的经度long、该时刻车辆所在位置的纬度lat、该时刻车辆的速度speed、出租车的行驶方向direction、车辆所在位置的高度height、该时刻车辆是否空载state。同时声明一个数组1,把计算统计拥挤度和线性拥挤度时需要的时间time、经度long、纬度lat、速度speed存入数组1中,Hadoop为每一个数据片段创建一个Map任务,所有的Map任务之间采用并行计算方式,Hadoop同时会根据配置文件中设置的Reduce任务的数量来创建Reduce任务,Reduce任务是基于Reduce()函数执行的,多个Reduce任务之间也是并行执行的;
S102、第一个Map()函数进行时间和区域化处理;在第一个Map()函数中对数组1中的经度、纬度进行处理,对研究的区域进行网格化;对经度为i,纬度为j的区域site(i,j)作标记,则第一个Map()函数输出对应的Kn为site(i,j),对应的Vn为时间time、速度speed;
S103、在第一个Reduce()函数中,分别计算车辆在同一时刻的相关速度参数;将经度、纬度相同的Kn对应的所有Vn合并成一个list链表,形成<Kn,list(Vn)>组,同时声明一个数组2,将速度speed提取出来存放在数组2中,令ι=site(i,j),然后根据公式求区域site(i,j)内所有车辆在时刻time的平均速度再计算区域site(i,j)内所有车辆在时间time速度的最大速度vmax(ι)和最小速度vmin(ι),最后计算区域site(i,j)内所有车辆在时间time速度小于平均速度的比例P(v≤v(t)(ι)),v∈VΦ(ι),则第一个Reduce()函数的输出对应的Kn值为site(i,j),对应的Vn为time,vmax(ι),vmin(ι),P(v≤v(t)(ι)),v∈VΦ(ι),最后将输出存放到Hadoop的分布式文件***hdfs上;
S104、第二个Map()函数对记录的GPS信息进行联结;将第一个MapReduce()函数的输出和上一时刻time-1计算得到的统计拥挤度和线性拥挤度的值输入到第二个MapReduce()函数中,第二个Map()函数将读取的每条记录并打包,使其可以在Reduce侧进行联结;第二个Map()函数处理读取的每条记录时,用数据源标记每条记录,然后将记录打包并标记,这时记录包中含有原始记录和数据源标签,第二个Map()函数则为每个记录包设置组键值;第二个Map()函数的输出被记录为键/值对,并按键来分区,对于联结,第二个Map()函数则输出一个记录包,采用组键作为联结的键;
S105、第二个Reduce()函数接收第二个Map()函数的输出数据,并对其值进行完全交叉乘积;第二个Reduce()函数对相同联结键的所有记录一起处理,通过解包得到原始记录,以及根据标签所得到记录的数据源,第二个Reduce()函数对接收到的输入数据值进行完全交叉乘积,当第二个Reduce()函数接收到的输入数据值分别有不同的标签时,交叉乘积就是这些输入数据的原始集合,交叉乘积得到的每个合并结果被送入Combine()函数,则Combine()函数得到的结果为:
site(i,j),time,vmax(ι),vmin(ι),P(v≤v(t)(ι)),v∈VΦ(ι),site(i,j),time-1,
其中,t为时刻time,(t-ιι)表示下一时刻time-1,ιι是获取位置ι的动态性参数,各条记录的时间time相同,当第二个Reduce()函数接收到的输入数据值未含有标签或标签相同,则Combine()函数丢弃其合并结果;
S106、通过第三个MapReduce()函数中的Map()函数计算统计拥挤度和线性拥挤度;在第三个Map()函数中输入每条记录的Vn值:
site(i,j),time,vmax(ι),vmin(ι),P(v≤v(t)(ι)),v∈VΦ(ι),site(i,j),time-1,
根据公式计算得到时刻time的线性拥挤度;
再根据公式计算得到时刻time的统计拥挤度;其中,αι和ιι是获取位置ι的动态性参数。
图2是基于本发明和基于移动集群算法的程序运行时间对比柱形图。
在本实施例中,如图2所示,系列一为基于移动性集群的方法,系列二为基于本发明的方法;横坐标依次为计算1、3、6、10、14、18、23个小时的拥挤度所用时间;纵坐标单位为毫秒。我们可以看出计算的数据量越大,基于本发明比基于移动集群的方法的所用时间相差的越多,效率越高,优越性越明显。
尽管上面对本发明说明性的具体实施方式进行了描述,以便于本技术领域的技术人员理解本发明,但应该清楚,本发明不限于具体实施方式的范围,对本技术领域的普通技术人员来讲,只要各种变化在所附的权利要求限定和确定的本发明的精神和范围内,这些变化是显而易见的,一切利用本发明构思的发明创造均在保护之列。