Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Z
ZHHT-IRN-BD-ANALYSIS
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
李凯旋
ZHHT-IRN-BD-ANALYSIS
Commits
2aad0262
Commit
2aad0262
authored
Dec 09, 2022
by
黄准
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
车道指标相关计算逻辑
parent
37d862da
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
71 additions
and
53 deletions
+71
-53
LaneNormJob.java
...streaming/src/main/java/com/zhht/irn/job/LaneNormJob.java
+59
-52
DruidConnectPoolUtils.java
...c/main/java/com/zhht/irn/utils/DruidConnectPoolUtils.java
+12
-1
No files found.
realtime/hologram-streaming/src/main/java/com/zhht/irn/job/LaneNormJob.java
View file @
2aad0262
...
@@ -5,6 +5,7 @@ import com.zhht.irn.entity.*;
...
@@ -5,6 +5,7 @@ import com.zhht.irn.entity.*;
import
com.zhht.irn.enums.EventType
;
import
com.zhht.irn.enums.EventType
;
import
com.zhht.irn.functions.LaneNormProcessFunction
;
import
com.zhht.irn.functions.LaneNormProcessFunction
;
import
com.zhht.irn.sink.LaneNormSink
;
import
com.zhht.irn.sink.LaneNormSink
;
import
com.zhht.irn.utils.DruidConnectPoolUtils
;
import
com.zhht.irn.utils.FlinkUtils
;
import
com.zhht.irn.utils.FlinkUtils
;
import
org.apache.flink.api.common.eventtime.WatermarkStrategy
;
import
org.apache.flink.api.common.eventtime.WatermarkStrategy
;
import
org.apache.flink.api.common.functions.FilterFunction
;
import
org.apache.flink.api.common.functions.FilterFunction
;
...
@@ -26,60 +27,66 @@ public class LaneNormJob {
...
@@ -26,60 +27,66 @@ public class LaneNormJob {
public
static
void
main
(
String
[]
args
)
throws
Exception
{
public
static
void
main
(
String
[]
args
)
throws
Exception
{
StreamExecutionEnvironment
env
=
StreamExecutionEnvironment
.
getExecutionEnvironment
();
try
{
StreamExecutionEnvironment
env
=
StreamExecutionEnvironment
.
getExecutionEnvironment
();
env
.
setRestartStrategy
(
RestartStrategies
.
noRestart
());
env
.
setRestartStrategy
(
RestartStrategies
.
noRestart
());
DataStream
<
String
>
cycleStringStream
=
FlinkUtils
.
createKafkaStream
(
args
,
env
,
"signal_cycle_data"
,
"laneNormJob"
);
DataStream
<
String
>
cycleStringStream
=
FlinkUtils
.
createKafkaStream
(
args
,
env
,
"signal_cycle_data"
,
"laneNormJob"
);
DataStream
<
String
>
carStringStream
=
FlinkUtils
.
createKafkaStream
(
args
,
env
,
"trips_event_info"
,
"laneNormJob"
);
DataStream
<
String
>
carStringStream
=
FlinkUtils
.
createKafkaStream
(
args
,
env
,
"trips_event_info"
,
"laneNormJob"
);
KeySelector
<
Cycle
,
String
>
cycleKeySelect
=
new
KeySelector
<
Cycle
,
String
>()
{
KeySelector
<
Cycle
,
String
>
cycleKeySelect
=
new
KeySelector
<
Cycle
,
String
>()
{
@Override
@Override
public
String
getKey
(
Cycle
cycle
)
throws
Exception
{
public
String
getKey
(
Cycle
cycle
)
throws
Exception
{
return
cycle
.
getCrossCode
();
return
cycle
.
getCrossCode
();
}
}
};
};
KeySelector
<
TravelEvent
,
String
>
carKeySelector
=
new
KeySelector
<
TravelEvent
,
String
>()
{
KeySelector
<
TravelEvent
,
String
>
carKeySelector
=
new
KeySelector
<
TravelEvent
,
String
>()
{
@Override
@Override
public
String
getKey
(
TravelEvent
car
)
throws
Exception
{
public
String
getKey
(
TravelEvent
car
)
throws
Exception
{
return
car
.
toString
();
return
car
.
toString
();
}
}
};
};
MapFunction
<
String
,
Cycle
>
getCycleFunction
=
new
MapFunction
<
String
,
Cycle
>()
{
MapFunction
<
String
,
Cycle
>
getCycleFunction
=
new
MapFunction
<
String
,
Cycle
>()
{
@Override
@Override
public
Cycle
map
(
String
cycle
)
throws
Exception
{
public
Cycle
map
(
String
cycle
)
throws
Exception
{
Cycle
cycle1
=
JSON
.
parseObject
(
cycle
,
Cycle
.
class
);
Cycle
cycle1
=
JSON
.
parseObject
(
cycle
,
Cycle
.
class
);
cycle1
=
getCycle
(
cycle1
);
cycle1
=
getCycle
(
cycle1
);
System
.
out
.
println
(
"周期数据->"
+
cycle
);
System
.
out
.
println
(
"周期数据->"
+
cycle
);
return
cycle1
;
return
cycle1
;
}
}
};
};
MapFunction
<
String
,
TravelEvent
>
getTravelEventFunction
=
new
MapFunction
<
String
,
TravelEvent
>()
{
MapFunction
<
String
,
TravelEvent
>
getTravelEventFunction
=
new
MapFunction
<
String
,
TravelEvent
>()
{
@Override
@Override
public
TravelEvent
map
(
String
travelEvent
)
throws
Exception
{
public
TravelEvent
map
(
String
travelEvent
)
throws
Exception
{
System
.
out
.
println
(
"旅行事件数据->"
+
travelEvent
);
System
.
out
.
println
(
"旅行事件数据->"
+
travelEvent
);
return
JSON
.
parseObject
(
travelEvent
,
TravelEvent
.
class
);
return
JSON
.
parseObject
(
travelEvent
,
TravelEvent
.
class
);
}
};
FilterFunction
<
TravelEvent
>
filterFunction
=
new
FilterFunction
<
TravelEvent
>()
{
@Override
public
boolean
filter
(
TravelEvent
car
)
throws
Exception
{
//只需要到达进入丢失事件
if
(
car
.
getEventType
()
==
EventType
.
ARRIVED
||
car
.
getEventType
()
==
EventType
.
INCROSS
||
car
.
getEventType
()
==
EventType
.
LAST
)
{
return
true
;
}
else
{
return
false
;
}
}
}
};
};
FilterFunction
<
TravelEvent
>
filterFunction
=
new
FilterFunction
<
TravelEvent
>()
{
WatermarkStrategy
<
TravelEvent
>
travelEventWatermarkStrategy
=
WatermarkStrategy
.<
TravelEvent
>
forBoundedOutOfOrderness
((
Duration
.
ofSeconds
(
3
))).
withTimestampAssigner
((
car
,
timestamp
)
->
Long
.
parseLong
(
car
.
getEventTime
()));
@Override
WatermarkStrategy
<
Cycle
>
cycleWatermarkStrategy
=
WatermarkStrategy
.<
Cycle
>
forBoundedOutOfOrderness
((
Duration
.
ofSeconds
(
3
))).
withTimestampAssigner
((
cycle
,
timestamp
)
->
Long
.
parseLong
(
cycle
.
getEndDateTime
()));
public
boolean
filter
(
TravelEvent
car
)
throws
Exception
{
//根据corssid 分组 保证同一路口的数据进行一个进程
//只需要到达进入丢失事件
DataStream
<
Cycle
>
cycleDataStreamSource
=
cycleStringStream
.
map
(
getCycleFunction
).
assignTimestampsAndWatermarks
(
cycleWatermarkStrategy
).
keyBy
(
cycleKeySelect
);
if
(
car
.
getEventType
()
==
EventType
.
ARRIVED
||
car
.
getEventType
()
==
EventType
.
INCROSS
||
car
.
getEventType
()
==
EventType
.
LAST
)
{
DataStream
<
TravelEvent
>
carStream
=
carStringStream
.
map
(
getTravelEventFunction
).
assignTimestampsAndWatermarks
(
travelEventWatermarkStrategy
).
keyBy
(
carKeySelector
).
filter
(
filterFunction
);
return
true
;
}
else
{
return
false
;
}
}
};
WatermarkStrategy
<
TravelEvent
>
travelEventWatermarkStrategy
=
WatermarkStrategy
.<
TravelEvent
>
forBoundedOutOfOrderness
((
Duration
.
ofSeconds
(
3
))).
withTimestampAssigner
((
car
,
timestamp
)
->
Long
.
parseLong
(
car
.
getEventTime
()));
WatermarkStrategy
<
Cycle
>
cycleWatermarkStrategy
=
WatermarkStrategy
.<
Cycle
>
forBoundedOutOfOrderness
((
Duration
.
ofSeconds
(
3
))).
withTimestampAssigner
((
cycle
,
timestamp
)
->
Long
.
parseLong
(
cycle
.
getEndDateTime
()));
//根据corssid 分组 保证同一路口的数据进行一个进程
DataStream
<
Cycle
>
cycleDataStreamSource
=
cycleStringStream
.
map
(
getCycleFunction
).
assignTimestampsAndWatermarks
(
cycleWatermarkStrategy
).
keyBy
(
cycleKeySelect
);
DataStream
<
TravelEvent
>
carStream
=
carStringStream
.
map
(
getTravelEventFunction
).
assignTimestampsAndWatermarks
(
travelEventWatermarkStrategy
).
keyBy
(
carKeySelector
).
filter
(
filterFunction
);
ConnectedStreams
<
Cycle
,
TravelEvent
>
cycleTravelEventConnectedStreams
=
cycleDataStreamSource
.
connect
(
carStream
).
keyBy
(
cycle
->
cycle
.
getCrossCode
(),
travelEvent
->
travelEvent
.
getCrossId
());
SingleOutputStreamOperator
<
List
<
LaneNorm
>>
process
=
cycleTravelEventConnectedStreams
.
process
(
new
LaneNormProcessFunction
()).
setParallelism
(
4
);
process
.
addSink
(
new
LaneNormSink
()).
name
(
"laneNormJobSink"
);
env
.
execute
(
"laneNormJob"
);
}
catch
(
Exception
e
){
System
.
out
.
println
(
"程序异常关闭->"
+
e
);
//程序异常 关闭数据库连接池
DruidConnectPoolUtils
.
colseDataSource
();
}
ConnectedStreams
<
Cycle
,
TravelEvent
>
cycleTravelEventConnectedStreams
=
cycleDataStreamSource
.
connect
(
carStream
).
keyBy
(
cycle
->
cycle
.
getCrossCode
(),
travelEvent
->
travelEvent
.
getCrossId
());
SingleOutputStreamOperator
<
List
<
LaneNorm
>>
process
=
cycleTravelEventConnectedStreams
.
process
(
new
LaneNormProcessFunction
()).
setParallelism
(
4
);
process
.
addSink
(
new
LaneNormSink
()).
name
(
"laneNormJobSink"
);
env
.
execute
(
"laneNormJob"
);
}
}
/*获取信控指标 并计算相关属性*/
/*获取信控指标 并计算相关属性*/
...
...
realtime/hologram-streaming/src/main/java/com/zhht/irn/utils/DruidConnectPoolUtils.java
View file @
2aad0262
...
@@ -59,7 +59,7 @@ public class DruidConnectPoolUtils {
...
@@ -59,7 +59,7 @@ public class DruidConnectPoolUtils {
public
static
DruidPooledConnection
getConnection
(){
public
static
DruidPooledConnection
getConnection
(){
try
{
try
{
if
(
pool
==
null
){
if
(
pool
==
null
){
InputStream
inputStream
=
D
oris
Utils
.
class
.
getClassLoader
().
getResourceAsStream
(
"doris.properties"
);
InputStream
inputStream
=
D
ruidConnectPool
Utils
.
class
.
getClassLoader
().
getResourceAsStream
(
"doris.properties"
);
ParameterTool
tool
=
ParameterTool
.
fromPropertiesFile
(
inputStream
);
ParameterTool
tool
=
ParameterTool
.
fromPropertiesFile
(
inputStream
);
// 根据路径的配置文件获取MySQL链接参数
// 根据路径的配置文件获取MySQL链接参数
String
driver
=
tool
.
getRequired
(
"driver"
);
String
driver
=
tool
.
getRequired
(
"driver"
);
...
@@ -82,6 +82,17 @@ public class DruidConnectPoolUtils {
...
@@ -82,6 +82,17 @@ public class DruidConnectPoolUtils {
return
null
;
return
null
;
}
}
public
static
void
colseDataSource
()
{
try
{
if
(
pool
!=
null
){
pool
.
close
();
}
pool
.
close
();
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
/**
/**
* CK close
* CK close
* @param connection
* @param connection
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment