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
467f9bb5
Commit
467f9bb5
authored
Dec 23, 2022
by
芮蒙
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
2022-12-23 更改查询维表连接方式
parent
93f800de
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
33 additions
and
36 deletions
+33
-36
TravelCarInfoCoProcessFunction.java
...om/zhht/irn/functions/TravelCarInfoCoProcessFunction.java
+25
-30
TravelSituationAnalysisJob.java
...ain/java/com/zhht/irn/job/TravelSituationAnalysisJob.java
+2
-3
TravelLaneInfoSink.java
...g/src/main/java/com/zhht/irn/sink/TravelLaneInfoSink.java
+6
-3
No files found.
realtime/hologram-streaming/src/main/java/com/zhht/irn/functions/TravelCarInfoCoProcessFunction.java
View file @
467f9bb5
...
@@ -5,6 +5,7 @@ import com.alibaba.druid.pool.DruidPooledConnection;
...
@@ -5,6 +5,7 @@ import com.alibaba.druid.pool.DruidPooledConnection;
import
com.zhht.irn.entity.dto.*
;
import
com.zhht.irn.entity.dto.*
;
import
com.zhht.irn.job.TravelSituationAnalysisJobGetCycleData
;
import
com.zhht.irn.utils.DruidConnectPoolUtils
;
import
com.zhht.irn.utils.DruidConnectPoolUtils
;
import
org.apache.flink.api.common.state.*
;
import
org.apache.flink.api.common.state.*
;
import
org.apache.flink.api.common.time.Time
;
import
org.apache.flink.api.common.time.Time
;
...
@@ -12,6 +13,7 @@ import org.apache.flink.api.common.typeinfo.TypeInformation;
...
@@ -12,6 +13,7 @@ import org.apache.flink.api.common.typeinfo.TypeInformation;
import
org.apache.flink.configuration.Configuration
;
import
org.apache.flink.configuration.Configuration
;
import
org.apache.flink.streaming.api.functions.co.CoProcessFunction
;
import
org.apache.flink.streaming.api.functions.co.CoProcessFunction
;
import
org.apache.flink.util.Collector
;
import
org.apache.flink.util.Collector
;
import
org.apache.log4j.Logger
;
import
java.sql.PreparedStatement
;
import
java.sql.PreparedStatement
;
import
java.sql.ResultSet
;
import
java.sql.ResultSet
;
...
@@ -27,6 +29,8 @@ import java.util.*;
...
@@ -27,6 +29,8 @@ import java.util.*;
**/
**/
public
class
TravelCarInfoCoProcessFunction
extends
CoProcessFunction
<
TravelInfo
,
CycleSignalData
,
List
<
TravelLineSinkInfo
>>
{
public
class
TravelCarInfoCoProcessFunction
extends
CoProcessFunction
<
TravelInfo
,
CycleSignalData
,
List
<
TravelLineSinkInfo
>>
{
private
static
Logger
logger
=
Logger
.
getLogger
(
TravelCarInfoCoProcessFunction
.
class
);
//定义状态,用于存储旅行信息,当周期信号数据过来的时候,触发计算
//定义状态,用于存储旅行信息,当周期信号数据过来的时候,触发计算
//状态数据存储结构为 Map(路口id--》(Map(车道id-》(List(旅行信息))))) 一辆车只有一条旅行信息
//状态数据存储结构为 Map(路口id--》(Map(车道id-》(List(旅行信息))))) 一辆车只有一条旅行信息
// 这样就把每个路口的数据进行分流,同时,对每个路口的数据,也按照了不同的车道进行了分流,同一个路口,同一个车道的数据存在一个list中
// 这样就把每个路口的数据进行分流,同时,对每个路口的数据,也按照了不同的车道进行了分流,同一个路口,同一个车道的数据存在一个list中
...
@@ -37,8 +41,6 @@ public class TravelCarInfoCoProcessFunction extends CoProcessFunction<TravelInfo
...
@@ -37,8 +41,6 @@ public class TravelCarInfoCoProcessFunction extends CoProcessFunction<TravelInfo
private
MapState
<
Integer
,
CycleSignalData
>
alreadyHandleCycleSignalDataState
;
//已经处理过的周期数据,避免重复触发
private
MapState
<
Integer
,
CycleSignalData
>
alreadyHandleCycleSignalDataState
;
//已经处理过的周期数据,避免重复触发
private
ListState
<
Long
>
cycleSectionState
;
private
ListState
<
Long
>
cycleSectionState
;
private
transient
DruidPooledConnection
connection
;
private
static
Map
<
String
,
Map
<
String
,
String
>>
dim_cnt_cross_lane_position
;
private
static
Map
<
String
,
Map
<
String
,
String
>>
dim_cnt_cross_lane_position
;
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
);
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
);
...
@@ -73,29 +75,18 @@ public class TravelCarInfoCoProcessFunction extends CoProcessFunction<TravelInfo
...
@@ -73,29 +75,18 @@ public class TravelCarInfoCoProcessFunction extends CoProcessFunction<TravelInfo
.
build
();
.
build
();
cycleSignalDataStateDescriptor
.
enableTimeToLive
(
stateTtlConfig4CycleData
);
cycleSignalDataStateDescriptor
.
enableTimeToLive
(
stateTtlConfig4CycleData
);
travelInfoState
=
getRuntimeContext
().
getMapState
(
travelInfoStateDescriptor
);
travelInfoState
=
getRuntimeContext
().
getMapState
(
travelInfoStateDescriptor
);
cycleSignalDataState
=
getRuntimeContext
().
getMapState
(
cycleSignalDataStateDescriptor
);
cycleSignalDataState
=
getRuntimeContext
().
getMapState
(
cycleSignalDataStateDescriptor
);
alreadyHandleCycleSignalDataState
=
getRuntimeContext
().
getMapState
(
alreadyHandleCycleSignalDataStateDescriptor
);
alreadyHandleCycleSignalDataState
=
getRuntimeContext
().
getMapState
(
alreadyHandleCycleSignalDataStateDescriptor
);
cycleSectionState
=
getRuntimeContext
().
getListState
(
cycleSectionStateDescriptor
);
cycleSectionState
=
getRuntimeContext
().
getListState
(
cycleSectionStateDescriptor
);
connection
=
DruidConnectPoolUtils
.
getConnection
();
/* // connection = DruidConnectPoolUtils.getDataSource("jdbc:mysql://localhost:3309/test?characterEncoding=utf8",
connection = DruidConnectPoolUtils.getDataSource("jdbc:mysql://10.243.0.26:3306/test?characterEncoding=utf8",
"root","mima").getConnection();*/
dim_cnt_cross_lane_position
=
getLaneDimData
(
connection
);
dim_cnt_cross_lane_position
=
getLaneDimData
();
}
}
@Override
@Override
public
void
close
()
throws
Exception
{
public
void
close
()
throws
Exception
{
super
.
close
();
super
.
close
();
if
(
connection
!=
null
){
connection
.
close
();
}
}
}
//把每个路口的数据 车辆旅行信息数据,存储在状态中,当周期数据进来的时候,再进行触发计算
//把每个路口的数据 车辆旅行信息数据,存储在状态中,当周期数据进来的时候,再进行触发计算
...
@@ -104,7 +95,9 @@ public class TravelCarInfoCoProcessFunction extends CoProcessFunction<TravelInfo
...
@@ -104,7 +95,9 @@ public class TravelCarInfoCoProcessFunction extends CoProcessFunction<TravelInfo
public
void
processElement1
(
TravelInfo
value
,
CoProcessFunction
<
TravelInfo
,
CycleSignalData
,
List
<
TravelLineSinkInfo
>>.
Context
ctx
,
public
void
processElement1
(
TravelInfo
value
,
CoProcessFunction
<
TravelInfo
,
CycleSignalData
,
List
<
TravelLineSinkInfo
>>.
Context
ctx
,
Collector
<
List
<
TravelLineSinkInfo
>>
out
)
throws
Exception
{
Collector
<
List
<
TravelLineSinkInfo
>>
out
)
throws
Exception
{
System
.
out
.
println
(
"路口id"
+
value
.
getCrossId
()
+
"车辆id"
+
value
.
getCarId
()
+
"进入路口时间:"
+
sdf
.
format
(
value
.
getInCrossTime
()));
// System.out.println("路口id"+value.getCrossId() +"车辆id"+value.getCarId() + "进入路口时间:"+sdf.format(value.getInCrossTime()));
logger
.
info
(
"路口id"
+
value
.
getCrossId
()
+
"车辆id"
+
value
.
getCarId
()
+
"进入路口时间:"
+
sdf
.
format
(
value
.
getInCrossTime
()));
String
crossId
=
value
.
getCrossId
();
String
crossId
=
value
.
getCrossId
();
Iterator
<
Map
<
String
,
List
<
TravelInfo
>>>
iterator
=
travelInfoState
.
values
().
iterator
();
Iterator
<
Map
<
String
,
List
<
TravelInfo
>>>
iterator
=
travelInfoState
.
values
().
iterator
();
//如果状态为空,则进行初始化
//如果状态为空,则进行初始化
...
@@ -135,8 +128,8 @@ public class TravelCarInfoCoProcessFunction extends CoProcessFunction<TravelInfo
...
@@ -135,8 +128,8 @@ public class TravelCarInfoCoProcessFunction extends CoProcessFunction<TravelInfo
//当前路口有数据,而且 当前车道 也有数据
//当前路口有数据,而且 当前车道 也有数据
if
(
crossListMap
!=
null
&&
crossListMap
.
containsKey
(
value
.
getInCrossLineId
()))
{
if
(
crossListMap
!=
null
&&
crossListMap
.
containsKey
(
value
.
getInCrossLineId
()))
{
List
<
TravelInfo
>
lineTravelInfos
=
crossListMap
.
get
(
value
.
getInCrossLineId
());
List
<
TravelInfo
>
lineTravelInfos
=
crossListMap
.
get
(
value
.
getInCrossLineId
());
//如果,当前车道的数据,积压超过
2
000条,则进行清理操作
//如果,当前车道的数据,积压超过
5
000条,则进行清理操作
if
(
lineTravelInfos
.
size
()>
10
000
){
if
(
lineTravelInfos
.
size
()>
5
000
){
System
.
out
.
println
(
"移除积压的数据。。。。"
);
System
.
out
.
println
(
"移除积压的数据。。。。"
);
List
<
TravelInfo
>
travelInfoList
=
orderByInCrossTime
(
lineTravelInfos
);
List
<
TravelInfo
>
travelInfoList
=
orderByInCrossTime
(
lineTravelInfos
);
List
<
TravelInfo
>
travelInfoListNew
=
travelInfoList
.
subList
(
500
,
travelInfoList
.
size
());
List
<
TravelInfo
>
travelInfoListNew
=
travelInfoList
.
subList
(
500
,
travelInfoList
.
size
());
...
@@ -159,7 +152,9 @@ public class TravelCarInfoCoProcessFunction extends CoProcessFunction<TravelInfo
...
@@ -159,7 +152,9 @@ public class TravelCarInfoCoProcessFunction extends CoProcessFunction<TravelInfo
Collector
<
List
<
TravelLineSinkInfo
>>
out
)
{
Collector
<
List
<
TravelLineSinkInfo
>>
out
)
{
try
{
try
{
System
.
out
.
println
(
"路口id"
+
value
.
getCrossCode
()
+
"周期id"
+
value
.
getCycleOrder
()
+
"周期时间:"
+
sdf
.
format
(
value
.
getBeginDateTime
())+
"~"
+
sdf
.
format
(
value
.
getEndDateTime
()));
// System.out.println("路口id"+value.getCrossCode() +"周期id"+value.getCycleOrder() + "周期时间:"+sdf.format(value.getBeginDateTime())+"~"+sdf.format(value.getEndDateTime()));
logger
.
info
(
"路口id"
+
value
.
getCrossCode
()
+
"周期id"
+
value
.
getCycleOrder
()
+
"周期时间:"
+
sdf
.
format
(
value
.
getBeginDateTime
())+
"~"
+
sdf
.
format
(
value
.
getEndDateTime
()));
//判断当前周期是否执行过了,存在周期数据重复下发的情况,只触发一次计算
//判断当前周期是否执行过了,存在周期数据重复下发的情况,只触发一次计算
if
(
alreadyHandleCycleSignalDataState
.
contains
(
value
.
getCycleOrder
()))
{
if
(
alreadyHandleCycleSignalDataState
.
contains
(
value
.
getCycleOrder
()))
{
System
.
out
.
println
(
"周期数据重复----当前路口id是"
+
value
.
getCrossCode
()
+
"当前周期已经计算完成了"
+
value
.
getCycleOrder
());
System
.
out
.
println
(
"周期数据重复----当前路口id是"
+
value
.
getCrossCode
()
+
"当前周期已经计算完成了"
+
value
.
getCycleOrder
());
...
@@ -228,7 +223,7 @@ public class TravelCarInfoCoProcessFunction extends CoProcessFunction<TravelInfo
...
@@ -228,7 +223,7 @@ public class TravelCarInfoCoProcessFunction extends CoProcessFunction<TravelInfo
public
void
onTimer
(
long
timestamp
,
CoProcessFunction
<
TravelInfo
,
CycleSignalData
,
List
<
TravelLineSinkInfo
>>.
OnTimerContext
ctx
,
Collector
<
List
<
TravelLineSinkInfo
>>
out
)
throws
Exception
{
public
void
onTimer
(
long
timestamp
,
CoProcessFunction
<
TravelInfo
,
CycleSignalData
,
List
<
TravelLineSinkInfo
>>.
OnTimerContext
ctx
,
Collector
<
List
<
TravelLineSinkInfo
>>
out
)
throws
Exception
{
super
.
onTimer
(
timestamp
,
ctx
,
out
);
super
.
onTimer
(
timestamp
,
ctx
,
out
);
dim_cnt_cross_lane_position
=
getLaneDimData
(
connection
);
dim_cnt_cross_lane_position
=
getLaneDimData
();
}
}
/**
/**
...
@@ -347,11 +342,6 @@ public class TravelCarInfoCoProcessFunction extends CoProcessFunction<TravelInfo
...
@@ -347,11 +342,6 @@ public class TravelCarInfoCoProcessFunction extends CoProcessFunction<TravelInfo
}
}
/**
/**
* 过滤出旅行信息状态中,属于这个周期内的计算数据,返回,对于已经过期的数据进行清理
* 过滤出旅行信息状态中,属于这个周期内的计算数据,返回,对于已经过期的数据进行清理
* @param beginDateTime
* @param beginDateTime
...
@@ -458,15 +448,15 @@ public class TravelCarInfoCoProcessFunction extends CoProcessFunction<TravelInfo
...
@@ -458,15 +448,15 @@ public class TravelCarInfoCoProcessFunction extends CoProcessFunction<TravelInfo
/**
/**
* 查询车道维表数据-数据存在map中,key是路口编号,
* 查询车道维表数据-数据存在map中,key是路口编号,
*
*
*
* @param connection
* @return
* @return
* @throws SQLException
* @throws SQLException
*/
*/
private
Map
<
String
,
Map
<
String
,
String
>>
getLaneDimData
(
DruidPooledConnection
connection
)
throws
SQLException
{
private
Map
<
String
,
Map
<
String
,
String
>>
getLaneDimData
()
throws
SQLException
{
DruidPooledConnection
connection1
=
DruidConnectPoolUtils
.
getConnection
();
String
sql
=
"select cross_id, lane_id,position,turn_direction as flow_direction from dim_cnt_cross_lane_position "
;
String
sql
=
"select cross_id, lane_id,position,turn_direction as flow_direction from dim_cnt_cross_lane_position "
;
PreparedStatement
ps
=
connection
.
prepareStatement
(
sql
);
PreparedStatement
ps
=
connection
1
.
prepareStatement
(
sql
);
ResultSet
resultSet
=
ps
.
executeQuery
();
ResultSet
resultSet
=
ps
.
executeQuery
();
Map
<
String
,
Map
<
String
,
String
>>
dimData
=
new
HashMap
<>();
Map
<
String
,
Map
<
String
,
String
>>
dimData
=
new
HashMap
<>();
...
@@ -484,6 +474,11 @@ public class TravelCarInfoCoProcessFunction extends CoProcessFunction<TravelInfo
...
@@ -484,6 +474,11 @@ public class TravelCarInfoCoProcessFunction extends CoProcessFunction<TravelInfo
dimData
.
put
(
resultSet
.
getString
(
"cross_id"
),
map
);
dimData
.
put
(
resultSet
.
getString
(
"cross_id"
),
map
);
}
}
}
}
if
(
connection1
!=
null
){
connection1
.
close
();
}
return
dimData
;
return
dimData
;
}
}
...
@@ -753,7 +748,7 @@ public class TravelCarInfoCoProcessFunction extends CoProcessFunction<TravelInfo
...
@@ -753,7 +748,7 @@ public class TravelCarInfoCoProcessFunction extends CoProcessFunction<TravelInfo
* 将每个车道流向预聚合的数据存入mysql中去
* 将每个车道流向预聚合的数据存入mysql中去
* @param list
* @param list
* @throws SQLException
* @throws SQLException
*/
*/
/*
private void sinkTravelLineSinkInfoToMysql(List<TravelLineSinkInfo> list) throws SQLException {
private void sinkTravelLineSinkInfoToMysql(List<TravelLineSinkInfo> list) throws SQLException {
...
@@ -798,6 +793,6 @@ public class TravelCarInfoCoProcessFunction extends CoProcessFunction<TravelInfo
...
@@ -798,6 +793,6 @@ public class TravelCarInfoCoProcessFunction extends CoProcessFunction<TravelInfo
}
}
preparedStatement.executeBatch();
preparedStatement.executeBatch();
}
}
*/
}
}
realtime/hologram-streaming/src/main/java/com/zhht/irn/job/TravelSituationAnalysisJob.java
View file @
467f9bb5
...
@@ -22,8 +22,7 @@ import org.apache.flink.streaming.api.environment.CheckpointConfig;
...
@@ -22,8 +22,7 @@ import org.apache.flink.streaming.api.environment.CheckpointConfig;
import
org.apache.flink.streaming.api.environment.StreamExecutionEnvironment
;
import
org.apache.flink.streaming.api.environment.StreamExecutionEnvironment
;
import
org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer
;
import
org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer
;
import
org.apache.kafka.clients.consumer.ConsumerConfig
;
import
org.apache.kafka.clients.consumer.ConsumerConfig
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Properties
;
import
java.util.Properties
;
...
@@ -54,7 +53,7 @@ public class TravelSituationAnalysisJob {
...
@@ -54,7 +53,7 @@ public class TravelSituationAnalysisJob {
env
.
getCheckpointConfig
().
setCheckpointingMode
(
CheckpointingMode
.
EXACTLY_ONCE
);
env
.
getCheckpointConfig
().
setCheckpointingMode
(
CheckpointingMode
.
EXACTLY_ONCE
);
//设置重启策略
//设置重启策略
env
.
setRestartStrategy
(
RestartStrategies
.
fixedDelayRestart
(
5
,
Time
.
seconds
(
1
0
)));
env
.
setRestartStrategy
(
RestartStrategies
.
fixedDelayRestart
(
10
,
Time
.
seconds
(
3
0
)));
...
...
realtime/hologram-streaming/src/main/java/com/zhht/irn/sink/TravelLaneInfoSink.java
View file @
467f9bb5
...
@@ -2,9 +2,11 @@ package com.zhht.irn.sink;
...
@@ -2,9 +2,11 @@ package com.zhht.irn.sink;
import
com.alibaba.druid.pool.DruidPooledConnection
;
import
com.alibaba.druid.pool.DruidPooledConnection
;
import
com.zhht.irn.entity.dto.TravelLineSinkInfo
;
import
com.zhht.irn.entity.dto.TravelLineSinkInfo
;
import
com.zhht.irn.functions.TravelCarInfoCoProcessFunction
;
import
com.zhht.irn.utils.DruidConnectPoolUtils
;
import
com.zhht.irn.utils.DruidConnectPoolUtils
;
import
org.apache.flink.configuration.Configuration
;
import
org.apache.flink.configuration.Configuration
;
import
org.apache.flink.streaming.api.functions.sink.RichSinkFunction
;
import
org.apache.flink.streaming.api.functions.sink.RichSinkFunction
;
import
org.apache.log4j.Logger
;
import
java.sql.Connection
;
import
java.sql.Connection
;
import
java.sql.PreparedStatement
;
import
java.sql.PreparedStatement
;
...
@@ -21,6 +23,8 @@ import java.util.List;
...
@@ -21,6 +23,8 @@ import java.util.List;
*/
*/
public
class
TravelLaneInfoSink
extends
RichSinkFunction
<
List
<
TravelLineSinkInfo
>>
{
public
class
TravelLaneInfoSink
extends
RichSinkFunction
<
List
<
TravelLineSinkInfo
>>
{
private
static
Logger
logger
=
Logger
.
getLogger
(
TravelLaneInfoSink
.
class
);
Connection
connection
;
Connection
connection
;
...
@@ -28,7 +32,7 @@ public class TravelLaneInfoSink extends RichSinkFunction<List<TravelLineSinkInfo
...
@@ -28,7 +32,7 @@ public class TravelLaneInfoSink extends RichSinkFunction<List<TravelLineSinkInfo
public
void
open
(
Configuration
parameters
)
throws
Exception
{
public
void
open
(
Configuration
parameters
)
throws
Exception
{
super
.
open
(
parameters
);
super
.
open
(
parameters
);
connection
=
DruidConnectPoolUtils
.
getConnection
();
connection
=
DruidConnectPoolUtils
.
getConnection
();
System
.
out
.
println
(
"建立数据库连接成功。。。。。。。"
);
logger
.
info
(
"建立数据库连接成功。。。。。。。"
);
}
}
...
@@ -86,8 +90,7 @@ public class TravelLaneInfoSink extends RichSinkFunction<List<TravelLineSinkInfo
...
@@ -86,8 +90,7 @@ public class TravelLaneInfoSink extends RichSinkFunction<List<TravelLineSinkInfo
}
}
int
[]
ints
=
preparedStatement
.
executeBatch
();
int
[]
ints
=
preparedStatement
.
executeBatch
();
System
.
out
.
println
(
"写入数据成功。。。。。"
+
ints
.
length
+
"..."
);
logger
.
info
(
"写入数据成功。。。。。"
+
ints
.
length
+
"..."
);
}
}
}
}
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