大数据物流项目面试题 整理终版

542 阅读8分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第21天,点击查看活动详情

物流项目问题

1、物流项目的背景介绍

项目背景:本项目基于一家大型物流公司研发的智慧物流大数据平台。该物流公司是国内综合性快递、物流服务商,并在全国各地都有覆盖的网点。 业务规模:经过多年的积累、经营以及布局,拥有大规模的客户群,日订单达 上千万。如此规模的业务数据量,传统的数据处理技术已经不能满足企业的经营分析需求。 项目价值:公司需要基于大数据技术构建数据中心,从而挖掘出隐藏在数据背后的信息价值,为企业提供有益的帮助,带来更大的利润和商机。 项目细节: 物流环节:大数据项目主要围绕订单、运输、仓储、搬运装卸、包装以及流通加工等物流环节中 涉及的数据、信息等。 指导方向:通过大数据分析可以提高运输以及配送效率、减少物流成本、更有效地满足客户 服务要求,实现快速、高效、经济的物流,并针对数据分析结果,提出具有中观指导意义的解决方案。
应用案例:针对物流行业的特性,大数据应用主要体现在车货匹配、运输路线优化、库存预测、设备修理预测、供应链协同管理等方面。

2、项目的解决方案是什么?

针对以上的物流企业痛点,我们给出对应的大数据架构解决方案: 数据源:关系型数据库Oracle和MySQL 采集:OGG和Canal分别将Oracle和MySQL的增量数据同步到Kafka集群存储:ETL计算之后分别存储到kudu,Elasticsearch,ClickHouse中 计算引擎:处理数据使用StructuredStreaming 技术亮点:该项目具有 完整Lambda 架构系统,有离线业务、也有实时业务 ClickHouse实时存储、计算引擎Kudu + Impala准实时分析系统 以企业主流的Spark生态圈为核心技术,例如:Spark、Spark SQL、structured Streaming Elasticsearch 全文检索 SpringCloud 搭建数据服务

3、请描述出物流项目的数据流转?

从数据源开始,业务数据主要存放到Oracle和MySQL数据库中,我们使用OGG和Canal分别将Oracle和MySQL的增量数据同步到Kafka集群,然后通过StructuredStreaming程序进行实时ETL处理,将处理的 结果写入到Kudu数据库中,供应用平台进行离线分析处理;为了将一些要求监控的业务实时展示, StructuredStreaming流处理会将数据写入到ClickHouse,Java Web后端直接将数据查询出来进行实时的数据展示;为了方便业务部门对各类单据的查询,StructuredStreaming流式处理系统同时也将数据 经过JOIN处理后,将数据写入到ElasticSearch中,然后基于Spring Cloud开发能够支撑高并发访问的数据服务,方便运营人员、客户的查询;

4、请描述出物流项目包括哪些模块?

数据采集模块数据ETL模块离线数仓模块实时大屏模块快速搜索模块

5、分别阐述一下每个模块主要解决什么问题?

数据采集模块:主要解决了传统数据库和大数据组件的对接工作; 数据ETL模块:数据进行ETL转换,保存转换后数据到外部存储; 离线数仓模块:主要解决数据的离线处理分析工作; 实时大屏模块:主要解决了数据的实时处理和展示工作; 快速查询模块:主要解决了数据的实时快速查询搜索的工作;

6、分别描述一下每个模块的技术架构?

数据采集模块:分别对关系型数据库Oracle和Mysql使用OGG和Canal进行数据的同步工作,采集到的 kafka消息队列 数据ETL模块:ETL模块StructuredStreaming通过获取kafka数据,进行数据的转换,之后分别写入到不 同的外部存储 离线数仓模块:采用kudu+impala的准实时分析系统和kudu+SparkSql的离线批处理,离线数仓分为3 层架构进行数据处理 实时大屏模块:使用目前比较流行的实时处理框架ClickHouse,使用springcloud进行web开发调用CK 的api接口进行数据可视化 快速搜索模块:使用搜索引擎Elasticsearch作数据存储,使用springcloud进行web开发调用ES的接口进 行数据可视化

7、请详细描述一下物流项目中离线数仓?

在这里插入图片描述

(技术、主题、分层建模、指标维度、事实表维度表) 离线数仓采用的的技术是kudu+SparkSql离线计算,使用azkaban进行定时调度;也使用了kudu和 impala进行即席查询,数仓分为三层,第一层: ODS 层,原始数据存储层、第二层: DWD 层,数据仓库明细层、第三层: DWS 层,数据服务层。 每个主题报表开发,分为三层管理数据,其中DWD层和DWS层需要编写SparkSQL程序,业务处理: DWD层程序开发: 从Kudu表加载ODS层事实表数据和维度表数据,按照关联字段,进行拉宽操作,最后存储到 Kudu表 技术: Kudu -> SparkSQL -> Kudu DWS层程序开发: 从Kudu表加载DWD层宽表数据,按照指标需要进行计算,最终存储到Kudu表中,以便使用 技术: Kudu -> SparkSQL -> Kudu

对整个物流离线数仓共分为5个主题开发: 主题:快递单主题、运单主题、仓库主题、车辆主题、用户主题

==快递单主题==: 快递单数:总快递单数 最大/最小/平均快递单数: 这三个指标分别从各类客户、各渠道、各网点、各终端,4个维度分析事实表:快递单表 维度表:客户表、快递员表、包裹表、网点表、公司网点关联表、公司表、区域表、客户地址关联 表、客户地址表、字典表 ==运单主题==: 运单数:总运单数 最大/最小/平均运单数: 上面指标分别从各区域、各分公司、各网点、各线路、各运输工具、各类客户,6个维度分析 事实表:运单表 维度表:快递员表、转运记录表、区域表、线路表、网点表、公司表、仓库表、客户表、公司仓库 关联表、车辆表、物流系统码表 ==仓库主题==: 最大/最小/平均发车次数: 上面指标分别从各仓库、各网点、各线路、各客户类型、各类型包裹、各区域、各公司,7个 维度分析 事实表:运输记录表 维度表:公司仓库关联表、仓库表、公司表、区域表、运单表、快递单表、客户寄件信息表、快递 包裹表、客户表、物流系统码表、网点表、入库表、公司网点关联表 ==车辆主题==: 总/最大/最小/平均发车次数: 上面指标分别从各网点、各区域、各分公司,3个维度分析事实表:仓库车辆事实表、网点车辆事实表、车辆事实表 维度表:快递员表、转运记录表、区域表、线路表、网点表、公司表、仓库表、客户表、公司仓库 关联表、车辆表、物流系统码表 ==客户主题==: 总客户数、今日新增客户数、留存用户总数、留存率、活跃用户数、月度新用户数、沉睡用户数、 流失用户数、客单数、客单价、平均客单数,共11个指标 事实表:用户表 维度表:物流系统码表、客户寄件信息表、快递包裹表

8、请详细描述一下实时大屏展示整体架构和业务指标?

业务数据从mysql和oracle中分别使用ogg和canal同步到kafka再按照业务需求使用structuredStreaming处理数据,把处理好的数据存储到Clickhouse中,使用SpringCloud集成ClickHouse做数据接口,通过Vue进行可视化展示。

展示的指标: 总网点数、各省份网点数、各省份收件总单数、各地区收件总单数、各省份派件总单数、各地区派 件总单数、各省份快递员总数量、 各地区快递员总数量、各省份三轮车数量、各地区三轮车数量、快递保价总单数、快递未保价总单 数、当天全部快递单数、 当天全部签收单数、当天未签收单数、当天拒收总单数、运单总数量、各省份运单数量、各地区运 单数量

9、请详细描述一下实时搜索业务整体架构?

业务数据从mysql和oracle中分别使用ogg和canal同步到kafka再按照业务需求使用structured Streaming处理数据,把处理好的数据存储到ES中, 使用SpringCloud集成Elasticsearch全文搜索引擎提供数据接口,给用户提供订单查询。 搜索指标:快递单,运单+

10、请详细描述一下数据如何展示的?

离线:使用hue交互界面进行数据展示 实时:采用SpringCloud做数据接口服务,前端使用vue和nodejs Springboot:开发框架 Eureka:服务注册发现框架Zuul: 服 务 网 关 ; Karyon:服务端框架Ribbon:负载均衡 Hystrix:熔断器Feign:远程调用Gateway:网关Config:配置中心Bus:消息总线