将博客搬至CSDN

Posted Maynor996

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将博客搬至CSDN相关的知识,希望对你有一定的参考价值。

将博客搬至CSDN

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

车联网行业背景介绍

车联网技术

  • 车联网的概念介绍

    车联网( Internet of Vehicles )指按照一定的通信协议和数据交互标准,在“人-车-路-云“之间进行信息交换的网络。即首先实现汽车智能网联化,再利用各种传感技术,感知车辆状态信息,并借助无线通信网络与大数据分析技术实现交通的智能化管理。整体而言,车联网产业是汽车、电子、信息通信、道路交通运输等行业深度融合的新型产业形态。

  • 车辆数据如何采集

    车辆上有传感器捕获车辆的数据,CAN总线采集这些传感器数据,tbox 盒子将传感器数据封装成报文上报给云平台。

  • 云(云平台、云中心、云计算)

    • 云计算分为三层

  1. IAAS层 基础设施层 , 案例 租借服务器

  2. PAAS层 平台即服务层, 案例  阿里云,腾讯云,亚马逊云,平台

  3. SAAS层  软件即服务,  案例  网站

汽车行业

  • 车辆按功能分类

  1. 载客车

  2. 载货车

车辆按是否燃油驱动分类

  1. 燃油车 (808 部标)

  2. 非燃油车 (32960 国标)

车辆按大小来分

  1. 乘用车

  2. 商用车

汽车后服务市场

  1. 汽车金融

  2. 汽车租赁

  3. 二手车市场

  4. 汽车养护

新能源汽车

  • 非燃料作为动力的汽车

  • 分类

    纯电动汽车、增程式电动汽车、混合动力汽车、燃料电池电动汽车、氢发动机汽车

车联网行业技术

  • 车联网行业的技术特点

  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;
          
      
          /**
           * 将 JSONObject 转换成 HashMap 对象
           * @param jsonObject
           * @return
           */
          private static HashMap<String, Object> toHashMap(JSONObject jsonObject) 
              HashMap<String, Object> kv = new HashMap<String,Object>();
              //读取 jsonObject 所有 keys
              Set<String> keys = jsonObject.keySet();
              for (String key : keys) 
                  //遍历所有key,得到所有值
                  kv.put(key,jsonObject.get(key));
              
              //将其保存到 kv
              return kv;
          
      
  • 具体数据业务分析,流程如下图所示

    image-20210919144822350

以上是关于将博客搬至CSDN的主要内容,如果未能解决你的问题,请参考以下文章

将博客搬至CSDN

将博客搬至CSDN

《将博客搬至CSDN》

将博客搬至CSDN

将博客搬至CSDN

《将博客搬至CSDN》