1、导数程序
运行程序
功能介绍:
将12集群中的Hbase天表数据解析,并将结果数据存放在135集群的hdfs中。目的是为了大数据分析平台各类算法进行业务计算时,使用135集群的资源进行运算,而不抢占12集群生产环境的资源。
入口类:
com.txj.lbs.hbaseProc.GpsHbaseToHdfsApp
执行脚本文件:
gps_hbase_2_hdfs.sh
azkaban执行流图:
通过以下步骤可以执行任务和设置azkaban任务的调度时间。
步骤一:输入azkaban地址:http://172.16.88.135:8081/,在登入界面输入账户名和密码进入。
步骤二:点击右侧“Create Project”按钮创建工程,下图中“lbs_clean”为创建的位置信息清洗工程。
步骤三:点击“Upload”按钮,将azkaban工程上传;然后点击“Execute Flow”按钮进入导数程序执行界面。
步骤四:按照图中执行顺序依次设置任务启动参数,最后点击"Execute"按钮执行任务,参数可以设置单天日期和多天的日期。
步骤五:点击任务执行界面中的"Schedule"按钮,进入调度设置界面,按照以下设置完成后,任务每天凌晨1点会启动任务。
数据输入
ETL程序按天存储的Hbase表,表名称:t_gps_std_${date} 和t_gps_sq_${date}
数据输出:
2、进出区域算法
运行程序
功能介绍:
按天计算陕汽全部车辆的进出区域,区域分为地级市、直辖市、省等。统计指标包括:车辆终端号、进入区域的时间和位置、区域行驶、暂停时长等。
入口类:
com.txj.lbs.area.GpsRegionalDetailApp
com.txj.lbs.area.GpsRegionalCntApp
执行脚本文件:
gps_regional_detail.sh
gps_regional_cnt_daily.sh
gps_regional_cnt_month.sh
azkaban执行流图:
算法逻辑:
1、基于一份可信的GPS数据,对车辆的进出区域进行计算,由于上报的GPS数据是按时刻上报,进出区域计算的时间是时段,为避免一辆车一天在同一类型的区域待过的时间不够24小时,对当天第一条和最后一条数据分别取整至当天的凌晨0点、夜晚24点。
2、查询当前GPS点的行政区域需要通过RPC方式调用清研接口,性能很慢;因此对GPS数据进出抽样处理,如果当前GPS点与上一个GPS点时间之差大于5min或者当前GPS点与上一个GPS点距离之差大于5km;则取出该点调用清研接口查询出六位的行政区域编码。
3、基于行政编码,取其前两位编号得到省、直辖市的编号,取其前四位得到地级市的编号;获取到车辆按时间排序的行政编码,分别对省、直辖市和地级市的进出区域进行统计;对于特殊的区域,比如西南、西北、东北等无法从行政区域编码提取特征的区域,通过代码拼接整体区域进行计算。
4、大数据分析平台计算车辆在某一区域停留时长,只是简单通过上报GPS位置进行判断,如果多个GPS上报的位置相同,则认为车辆从第一次上报的时间至最后一次上报时间之差为停留时长;后续如有需要精确计算停留时长,再行优化。
5、通过上诉逻辑计算得到车辆进出区域的明细数据:驶入区域的时间、GPS位置、驶出区域的时间、GPS位置、在该区域的总时长、停留在同一位置的驶出以及行驶时长。
6、基于进出区域的明细数据统计车辆某时间段进入该区域的次数,统计时间最小粒度为天、统计区域最小粒度为地级市。
7、跨天考虑:如果进出区域的明细数据中的上一次驶出区域的时间与当前驶入区域的时间相同,则认为明细数据的两条数据的记录为同一次进出,进行合并处理;由于每天的GPS数据都进行了规整处理,则车辆跨天进出区域也能够合并处理。
数据输入
数据位置:hdfs://172.16.88.135/txj/data/gps/sq/${date}
数据格式:终端号|时间|GPS标定|GPS|GPS高度|GPS速度|GPS方向
数据样例:323247463|1553097835|1|108.675646,34.072613|395|0|0
数据输出
明细数据:
数据位置:hdfs://172.16.88.135/txj/data/mid/regional/detail/sq/daily/${date}
数据格式:终端号|数据类型|区域|驶入时间|驶出时间|驶入GPS|驶出GPS|在该区域时长|停车时长|行驶时长
(备注:数据类型:0:地级市、1:省、直辖市、2:特殊区域)
数据样例:
323203407|0|西安市|1546272000|1546358400|108.84347,34.22493|108.84669,34.14278|86400|64621|21779
统计数据:
数据位置:hdfs://172.16.88.135/txj/data/mid/regional/cnt/sq/daily/${date}
数据格式:终端号|数据类型|区域|在该区域时长|停车时长|行驶时长|进入次数|进入平均时长
数据样例:1805020155|1|陕西省|8.79|4.10|4.69|2|4.40
进出区域数据入库程序
入口类:
com.txj.lbs.area.oracleProc.GpsRegionalTOracle
执行脚本文件:
gps_regional_cnt_daily.sh
gps_regional_cnt_month.sh
通过JDBC方式调用Oracle接口进行数据入库操作,按批次批量操作数据,为减轻Oracle访问压力,每100条数据执行一次入库操作。
表名称:
天表:SQOS.IOV_REG_D_20190101
月表: SQOS.IOV_REG_M_201901
3、轨迹热点、停靠热点算法
运行程序
功能介绍:
按天计算陕汽全部车辆的轨迹热点和停靠热点,结果数据存储在hdfs,按月存储数据至oracle供前台查询。停靠热点包括:长时停靠、白天停靠、晚上停靠、高频停靠等。统计指标包括:车辆终端号、热点geohash、热点GPS位置、次数值等。
入口类:
com.txj.lbs.hotspot.GpsHotSpotCntApp
执行脚本文件:
gps_hot_spot_clc.sh
azkaban执行流图:
算法逻辑:
1、基于一份可信的GPS数据,对车辆的进出区域进行计算,由于上报的GPS数据是按时刻上报,进出区域计算的时间是时段,为避免一辆车一天在同一类型的区域待过的时间不够24小时,对当天第一条和最后一条数据分别取整至当天的凌晨0点、夜晚24点。
2、查询当前GPS点的行政区域需要通过RPC方式调用清研接口,性能很慢;因此对GPS数据进出抽样处理,如果当前GPS点与上一个GPS点时间之差大于5min或者当前GPS点与上一个GPS点距离之差大于5km;则取出该点调用清研接口查询出六位的行政区域编码。
3、基于行政编码,取其前两位编号得到省、直辖市的编号,取其前四位得到地级市的编号;获取到车辆按时间排序的行政编码,分别对省、直辖市和地级市的进出区域进行统计;对于特殊的区域,比如西南、西北、东北等无法从行政区域编码提取特征的区域,通过代码拼接整体区域进行计算。
4、大数据分析平台计算车辆在某一区域停留时长,只是简单通过上报GPS位置进行判断,如果多个GPS上报的位置相同,则认为车辆从第一次上报的时间至最后一次上报时间之差为停留时长;后续如有需要精确计算停留时长,再行优化。
5、通过上诉逻辑计算得到车辆进出区域的明细数据:驶入区域的时间、GPS位置、驶出区域的时间、GPS位置、在该区域的总时长、停留在同一位置的驶出以及行驶时长。
6、基于进出区域的明细数据统计车辆某时间段进入该区域的次数,统计时间最小粒度为天、统计区域最小粒度为地级市。
7、跨天考虑:如果进出区域的明细数据中的上一次驶出区域的时间与当前驶入区域的时间相同,则认为明细数据的两条数据的记录为同一次进出,进行合并处理;由于每天的GPS数据都进行了规整处理,则车辆跨天进出区域也能够合并处理。
数据输入
数据位置:hdfs://172.16.88.135/txj/data/gps/sq/${date}
数据格式:终端号|时间|GPS标定|GPS|GPS高度|GPS速度|GPS方向
数据样例:323247463|1553097835|1|108.675646,34.072613|395|0|0
数据输出
明细数据:
数据位置:hdfs://172.16.88.135/txj/data/mid/regional/detail/sq/daily/${date}
数据格式:终端号|数据类型|区域|驶入时间|驶出时间|驶入GPS|驶出GPS|在该区域时长|停车时长|行驶时长
(备注:数据类型:0:地级市、1:省、直辖市、2:特殊区域)
数据样例:
323203407|0|西安市|1546272000|1546358400|108.84347,34.22493|108.84669,34.14278|86400|64621|21779
统计数据:
数据位置:hdfs://172.16.88.135/txj/data/mid/regional/cnt/sq/daily/${date}
数据格式:终端号|数据类型|区域|在该区域时长|停车时长|行驶时长|进入次数|进入平均时长
数据样例:1805020155|1|陕西省|8.79|4.10|4.69|2|4.40
进出区域数据入库程序
入口类:
com.txj.lbs.area.oracleProc.GpsRegionalTOracle
执行脚本文件:
gps_regional_cnt_daily.sh
gps_regional_cnt_month.sh
通过JDBC方式调用Oracle接口进行数据入库操作,按批次批量操作数据,为减轻Oracle访问压力,每100条数据执行一次入库操作。
表名称:
天表:SQOS.IOV_REG_D_20190101
月表: SQOS.IOV_REG_M_201901