项目01

交通管理项目

数据处理流程图

在这里插入图片描述

任务提交

1.最次也是脚本化提交
2.平台化提交:在webUI页面上点击提交按钮,发送请求到响应的Controller,在Controller中调用指定的脚本,开启spark Streaming计算,通过Spark Streaming进行实时计算,并把结果显示在webUI页面。
3.在Controller中如何调用制定脚本?
首先在点击提交按钮时,将参数保存到MySQL数据库指定表中(taskId,submitTime,startTime,params),在调用脚本的时候只传递taskId,等待要执行./spark-submit时,再将taskId作为参数去MySQL中查询相应的参数,作为spark-submit的参数传递过去,解决了多次提交参数个数不一致的问题。
在这里插入图片描述

数据表

monitor_flow_action 车流量监控表
monitor_camera_info 卡口摄像头基本关系表

数据来源

1.如果任务在本地执行,数据是每次运行模拟
2.如果任务在集群中运行,数据来源是Hive表。

业务项目

core
1.卡扣监控
正常的卡扣数 7
异常的卡扣数 2
正常的摄像头个数 1000
异常的摄像头个数 5
异常的摄像头详细信息 0001:33333,44444~00005:12814,87463,99123

monitor_flow_action:
	(0006,11111_22222,33333,44444,55555)
monitor_camera_info:
	(0006,11111_22222,33333,44444,55555)
	
提交任务命令:
./spark-submit --master spark://node1:7077,node2:7077 --jars /root/test/mysql-connector-java-5.1.47.jar,/root/test/fastjson-1.2.11.jar --driver-class-path /root/test/mysql-connector-java-5.1.47.jar:/root/test/fastjson-1.2.11.jar  --class com.bjsxt.spark.skynet.MonitorFlowAnalyze /root/test/TrafficProject-1.0-SNAPSHOT.jar 1

./spark-submit  --master spark://node1:7077,node2:7077 --class com.bjsxt.spark.skynet.MonitorFlowAnalyze /root/test/TrafficProject-1.0-SNAPSHOT-jar-with-dependencies.jar 1


https://search.maven.org/classic/#advancedsearch

2.车流量top5的卡扣

3.top5卡扣下所有车辆详细信息

4.获取车辆高速通过的TOPN卡扣
二次排序问题
A B
speed >=120 高速 1 1
90<=speed<120 中速 2 10
60<=speed<90 正常 3 2
speed<60 低速 10 20

5.车辆高速这5个卡扣每个卡扣下车辆速度top10
分组取topN问题
1.原生集合排序
2.定义定长数组

6.碰撞分析
01,02中这一天同时出现的车辆
01:(car,row) 02:(car,row)
(car,row).join(car,row)

01:car  02:car
car02.intersection(car02)

7.车辆轨迹
统计卡扣0001下所有车辆的轨迹 – take(20)

8.随机抽取车辆
在一天中抽取1000辆车分析当前道路的运行情况。这些车辆要分布均匀
一天中通过了车辆10000车。要随机抽取1000量车来代表当前道路的运行情况。怎么抽?
sample(0.1) = 1000

00-01:100   -- 100/10000 * 1000 = 10
01-02:200	-- 20
02-03:50	-- 5
03-04:100	-- 10
04-05:100
06-07:100
07-08:2000	--200
08-09:2000	--200
...
...

按照小时段抽取车辆。

9.计算卡扣流量转换率
一辆车的轨迹:
0001->0002->0001->0003->0001->0002
卡扣0001到卡扣0002的车流量转化率:2/3

0001,0002,0003,0004,0005:
	
	0001,0002:
		经过卡扣0001又经过卡扣0002的车辆数/经过卡扣0001的车辆数
	0001,0002,0003:
		经过卡扣0001,0002又经过卡扣0003的车辆数/经过卡扣0001,0002的车辆数
	0001,0002,0003,0004:
		经过卡扣0001,0002,0003又经过卡扣0004的车辆数/经过卡扣0001,0002,0003的车辆数
	0001,0002,0003,0004,0005:
		经过卡扣0001,0002,0003,0004又经过卡扣0005的车辆数/经过卡扣0001,0002,0003,0004的车辆数

10.SparkSQL
计算每个区域中车流量top3道路
海淀区 建材城西路 10000 0001=3000|0002=4000|0003=3000
海淀区 建材城东路 8000 0004=3000|0005=5000
海淀区 安宁庄东路 7000
朝阳区 朝阳路01 9000
朝阳区 朝阳路02 8000
朝阳区 朝阳路03 7000

tmp_car_flow_basic:
	area_id		area_name		road_id		monitor_id  	car 

select  
	area_name,road_id,car_count,monitor_infos
from 
	(select 
		area_name,road_id, car_count,monitor_infos,row_number() over (partition by area_name order by car_count desc) as rn 
	from 
		(select  
			area_name,road_id,count(car) as car_count,UDAF(monitor_id,x,x,x) as monitor_infos
		from 
			tmp_car_flow_basic 
		group by 
			area_name,road_id) tmp_area_road_flow_count)  tmp
where rn<=3

11.道路实时拥堵情况
DStream<ConsumerRecord<String, String>> ds1 = KafkaUtil.createDirectStream(xxxx)
DStream ds2 = ds1.map(…)

//DStream<String,tuple2(speed,1)> ds3 = ds2.map((monitor_id,(speed,1)))
DStream<String,speed> ds3 = ds2.map((monitorid,speed))
DStream<String,tuple2(speed,1)> ds3 = ds3.mapValues(speed=>{(speed,1)})
Dstream<monitorid,tuple2<SpeedCount,carCount>> ds4 = ds3.reducdByKeyAndWindow((tuple2<Speed,1> t1,tuple2<Speed,1> t2)
									=>{new Tuple2<t1._1+t2._1,t1._2+t2._1>})
ds4.foreachRDD(....)

在这里插入图片描述

任务提交

不完整包提交:
./spark-submit --master spark://n1:7077 --jars /home/lys/fastjson-1.2.35.jar[,]
–driver-class-path /home/lys/fastjson-1.2.35.jar[:]
–class com.bjsxt.spark.skynet.MonitorFlowAnalyze
/home/lys/TrafficProject-1.0-SNAPSHOT.jar 1

完整包提交:
./spark-submit --master spark://n1:7077
–class com.bjsxt.spark.skynet.MonitorFlowAnalyze
/home/lys/TrafficProject-1.0-SNAPSHOT.jar 1

车辆轨迹

在这里插入图片描述

卡口速度TopN10

在这里插入图片描述

使用广播变量

在这里插入图片描述
在这里插入图片描述

随机抽取车辆

在这里插入图片描述

堆内内存调节

在这里插入图片描述

分解join解决数据倾斜

在这里插入图片描述

卡口流量转化路

在这里插入图片描述

数据本地化级别

在这里插入图片描述

数据本地化调节

在这里插入图片描述

提高并行度+双重聚合

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值