网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
车联网行业技术
-
车联网行业的技术特点
- 技术范围广
- 海量数据存储和海量计算 , 最低频次 1条/辆/5秒
- 软硬件结合
- 分布式、集群、高并发、容错
- 业务复杂 驾驶行程、电子栅栏、远程故障告警、远程控制、驾驶行程分析、疲劳驾驶、百公里油耗等。
- 研发成本大
- 安全性高,对用户隐私提供安全保障
车辆网行业产业链与国内知名企业
- 上游
- 中游
- 下游
车联网项目
- 车联网项目分析的目的
车联网数据分析车辆驾驶信息、车辆行驶信息、车辆车况信息、车辆故障信息、车辆报警信息等。
-
车联网项目分析的意义
- 对车企
车辆流程改进、车辆产品质量改进做决策
2. 对车主提供告警和报警信息,预防预测,防止出现危险、事故等
3. 对监管部门监管车辆的行驶轨迹、防止骗补,故障告警等
4. 新能源充电桩企业电量的电价,规划和放置充电桩位置
-
星途车联网项目
通过终端设备采集车辆上的CAN总线实时数据和企业静态hu离线数据,获取当前车辆的位置、行驶高程、车速、油压、电量、行驶里程、告警数据等数据,对其进行业务,车辆行程、故障告警、电子栅栏、百公里油耗、高温报警、低soc告警、疲劳驾驶告警等车联网分析,支撑汽车后服务市场、车企、政府监管部门、车主等服务。
海量存储
海量计算
- 数据量
原始数据 1kb/报文
5秒上报一条数据,12kb/1分钟 =》 720kb/h => 7200kb/day => 7200 0000kb/1w/day => 7200 0000 * 4/day => 7200 0000 * 4 * 3/day = 823GB/day 存储 / 0.7 * 90 = 103 TB/三个月
物理机 8T 128GB 5w*13=65w
云计算 阿里云
同等配置 5w/year
车联网技术架构和技术选型
- 车联网项目
- 大数据相关组件
Flink 流处理
kafka 消息队列
HDFS 分布式存储系统
HBase 大表存储
Phoenix 基于SQL的查询
MySQL/mongodb 存储结果数据
Zeppelin 前端SQL图表化
Dolphinscheduler 调度平台
- 任务调度方式
#!/bin/sh
spark-submit --class com.dfssi.dataplatform.analysis.fuel.stats.ConditionFuelStatisticians
--master yarn
--deploy-mode client
--num-executors 2
--driver-memory 1g
--executor-memory 3g
--executor-cores 2
--jars $(echo ../target/jars/\*.jar | tr ' ' ',')
../target/DataMiningAnalysis-0.1-SNAPSHOT.jar
在调度平台中加载 shell 文件
车联网项目的架构搭建
-
车联网项目框架搭建
- 创建 CarNetworkingSystem 项目框架
- 导入依赖 jar 包的版本
- 导入配置文件 conf.properties logback.xml
- 创建各个模块
group artifact 模块 packaging 生成方式 cn.maynor CarNetworkingSystem 父工程 pom 创建 cn.maynor StreamingAnalysis 实时流式模块 jar 创建 cn.maynor OffLineBatchAnalysis 离线批处理模块 jar 创建 cn.maynor SourceDataProcess 数据生成模拟器模块 jar 创建 cn.maynor VehicleNetworkWeb Web可视化模块 war 导入 -
实时ETL处理,对 json字符串解析
- json字符串
"{\"batteryAlarm\": 0, \"carMode\": 1,\"minVoltageBattery\": 3.89, \"chargeStatus\": 1,\"vin\":\"LS5A3CJC0JF890971\"}"
- 复杂的 key/value 和 list集合的 json字符串解析示例
package cn.maynor.flink.source.test; import org.json.JSONArray; import org.json.JSONObject; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Set; /\*\* \* Author maynor \* Date 2021/9/19 17:41 \* 将json字符串转换成对象,将key-value转换成 HashMap \* 对json字符串进行封装 \* 开发步骤: \* 1.定义 json 字符串 \* 2.将JSONObject 字符串转换成 HashMap \* 3.将JSONObject转换成 List<HashMap<String,Object>> \* 4.解析 json 字符串 \* 5.转换成对象 \* 6.打印输出结果 \*/ public class JsonPlusParseOptimize { public static void main(String[] args) { //1.定义 json 字符串 String json = "{\"batteryAlarm\": 0,\"carMode\": 1,\"minVoltageBattery\": 3.89,\"chargeStatus\": 1,\"vin\": \"LS5A3CJC0JF890971\",\"nevChargeSystemTemperatureDtoList\": [{\"probeTemperatures\": [25, 23, 24, 21, 24, 21, 23, 21, 23, 21, 24, 21, 24, 21, 25, 21],\"chargeTemperatureProbeNum\": 16,\"childSystemNum\": 1}]}"; //2.将JSONObject 字符串转换成 HashMap JSONObject jsonObject = new JSONObject(json); HashMap<String,Object> vehicleHashMap = toHashMap(jsonObject); //3.将JSONObject转换成 List<HashMap<String,Object>> //读取key,将字符串传递进来 String nevChargeSystemTemperatureDtoStr = vehicleHashMap.get("nevChargeSystemTemperatureDtoList").toString(); List<HashMap<String,Object>> lists = toList(nevChargeSystemTemperatureDtoStr); //4.解析 json 字符串 //5.转换成对象 System.out.println(Integer.parseInt(vehicleHashMap.getOrDefault("batteryAlarm",-999999).toString())); //6.打印输出结果 for (HashMap<String, Object> list : lists) { System.out.println(list.getOrDefault("chargeTemperatureProbeNum",-999999).toString()); } } /\*\* \* 将json数组字符串转换成List<HashMap> \* @param value \* @return \*/ private static List<HashMap<String, Object>> toList(String value) { List<HashMap<String, Object>> lists = new ArrayList<>(); JSONArray objects = new JSONArray(value); //遍历数组,取出所有的对象并转换成 HashMap for (Object object : objects) { String jsonStr = object.toString(); JSONObject jsonObject = new JSONObject(jsonStr); lists.add(toHashMap(jsonObject)); } return lists; }
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!