实时即未来,大数据项目车联网之项目基石与前瞻【一】_车联网 大数据 项目

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

车联网行业技术
  • 车联网行业的技术特点

    1. 技术范围广
    2. 海量数据存储和海量计算 , 最低频次 1条/辆/5秒
    3. 软硬件结合
    4. 分布式、集群、高并发、容错
    5. 业务复杂 驾驶行程、电子栅栏、远程故障告警、远程控制、驾驶行程分析、疲劳驾驶、百公里油耗等。
    6. 研发成本大
    7. 安全性高,对用户隐私提供安全保障
车辆网行业产业链与国内知名企业
  • 上游
  • 中游
  • 下游

车联网项目

  • 车联网项目分析的目的

车联网数据分析车辆驾驶信息、车辆行驶信息、车辆车况信息、车辆故障信息、车辆报警信息等。

  • 车联网项目分析的意义

    1. 对车企

    车辆流程改进、车辆产品质量改进做决策
    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

车联网技术架构和技术选型

  • 车联网项目
  • image-20210919150240811
  • 大数据相关组件

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
    • 创建各个模块
    groupartifact模块packaging生成方式
    cn.maynorCarNetworkingSystem父工程pom创建
    cn.maynorStreamingAnalysis实时流式模块jar创建
    cn.maynorOffLineBatchAnalysis离线批处理模块jar创建
    cn.maynorSourceDataProcess数据生成模拟器模块jar创建
    cn.maynorVehicleNetworkWebWeb可视化模块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;
        }
    
    
    

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值