滴滴出行大数据数仓实战

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 滴滴出行大数据数仓实战

前言

作为技术人,我是不怎么八卦的,奈何这次国家重拳整理的是“大数据乱象”,manor作为大数据专业的学生,不得不关注此次的滴滴事件。滴滴出行APP被下架,此时入职滴滴,好比49年加入国军~

但是,外面的世界不管怎么变化,掌握好技术是你安身立命的根本,接下来我们就来学习一下:数仓实战项目之滴滴出行

本课程会综合应用HDFS、Hive、SparSQL、Zeppelin、Sqoop、Superset等技术,结合滴滴出行的数据完成数仓实战。

滴滴出行实战需要的技术

滴滴出行项目可视化

因此,学习本课程,需要你具备以下技术的简单基础技能:

HDFS

Hive

SparSQL

Zeppelin

Sqoop

Superset

该实战项目能够教会你,如何做:

日志数据集

数据仓库构建

数据分区表构建

数据预处理

订单指标分析

Sqoop数据导出

Superset数据可视化

那么如何学习本课呢?

一定要动手实践,在自己的电脑上完成。

接下来就开始学习吧!

1. 业务背景

1.1 业务介绍

滴滴拥有超过4.5亿用户,在中国400多个城市开展服务,每天的订单量高达2500W,每天要处理

的数据量4500TB。仅仅在北京,工作日的早高峰一分钟内就会有超过1600人在使用滴滴打车。通过对这些数据进行分析,了解到不同区域、不同时段运营情况。通过这些出行大数据,还可以看到不同城市的教育、医疗资源的分布,长期观察对城市经济、社会资源的发展、变迁情况,有非常有研究价值。

本次的案例将某出行打车的日志数据来进行数据分析,例如:我们需要统计某一天订单量是多少、

预约订单与非预约订单的占比是多少、不同时段订单占比等。最终效果如下:

1.2 架构图

要进行大规模数据分析,我们要考虑几个问题:

  1. 打车的用户量非常庞大,数以亿记的用户将会有海量的数据需要存储。如何保存这些数据呢?
  2. 为了方便对这些大规模数据进行处理、分析,我们如何建立数据模型,方便进行业务分析呢?
  3. 亿级的数据如何保证效率,效率分析?
  4. 数据分析的结果,应该以更易懂的方式呈现出现,如何展示这些数据?
    要解决这些问题,我们需要设计一套大数据架构来解决上述问题。

解决方案:

  1. 用户打车的订单数据非常庞大。所以我们需要选择一个大规模数据的分布式文件系统来存储这些
    日志文件,此处,我们基于Hadoop的HDFS文件系统来存储数据。
  2. 为了方便进行数据分析,我们要将这些日志文件的数据映射为一张一张的表,所以,我们基于
    Hive来构建数据仓库。所有的数据,都会在Hive下来几种进行管理。为了提高数据处理的性能。
  3. 我们将基于Spark引擎来进行数据开发,所有的应用程序都将运行在Spark集群上,这样可以保证
    数据被高性能地处理。
  4. 我们将使用Zeppelin来快速将数据进行可视化展示。

2. 日志数据集介绍

2.1 日志数据文件

我们要处理的数据都是一些文本日志,例如:以下就是一部门用户打车的日志文件。

b05b0034cba34ad4a707b4e67f681c71,15152042581,109.348825,36.068516, 陕 西 省 , 延 安
市,78.2,男,软件工程,70后,4,1,2020-4-12 20:54,0,,2020-4-12 20:06
23b60a8ff11342fcadab3a397356ba33,15152049352,110.231895,36.426178, 陕 西 省 , 延 安
市,19.5,女,金融,80后,3,0,,0,,2020-4-12 4:04
1db33366c0e84f248ade1efba0bb9227,13905224124,115.23596,38.652724, 河北省 , 保 定
市,13.7,男,金融,90后,7,1,2020-4-12 10:10,0,,2020-4-12 0:29
46cfb3c4b94a470792ace0efdd2df11a,13905223853,113.837765,34.743035, 河 南 省 , 郑 州
市,41.9,女,新能源,00后,9,0,,0,,2020-4-12 1:15
878f401c9ca6437585ce1187053c220a,13905223356,113.837765,31.650084, 湖 北 省 , 随 州
市,35.6,男,教育和培训,80后,8,1,2020-4-12 1:06,0,,2020-4-12 4:35
44165cf545734bf6a114aa641479e828,15895252169,109.275236,34.255614, 陕 西 省 , 西 安
市,30.8,女,O2O,90后,8,0,,1,15152049060,2020-4-12 5:07

2.2 用户打车订单日志

每当用户发起打车时,后台系统都会产生一条日志数据,并形成文件。

b05b0034cba34ad4a707b4e67f681c71,15152042581,109.348825,36.068516, 陕西省 , 延 安
市,78.2,男,软件工程,70后,4,1,2020-4-12 20:54,0,,2020-4-12 20:06

这条日志包含了以下这些字段:

orderId 订单id

telephone 打车用户手机

long 用户发起打车的经度

lat 用户发起打车的纬度

province 所在省份

city 所在城市

es_money 预估打车费用

gender 用户信息 - 性别

profession 用户信息 - 行业

age_range 年龄段(70后、80后、…)

tip 小费

subscribe 是否预约(0 - 非预约、1 - 预约)

sub_time 预约时间

is_agent 是否代叫(0 - 本人、1 - 代叫)

agent_telephone 预约人手机

order_time 订单时间

2.3 用户取消订单日志

当用户取消订单时,也会在系统后台产生一条日志。用户需求选择取消订单的原因。

2.4 用户支付日志

用户点击确认支付后,系统后台会将用户的支持信息保存为一条日志。

2.5 用户评价日志

用户评价日志:用户点击提交评价后,系统后台也会产生一条日志。

用户评价日志数据内容

3. 构建数据仓库

需要对日志文件的原始数据进行预处理,才能进行分析。

有这么几类数据要考虑:

原始日志数据(业务系统中保存的日志文件数据)

预处理后的数据

分析结果数据

这些数据通过Hive来进行处理,因为Hive可以将数据映射为一张张的表,然后就可以通过编写HQL来处理数据了,简单、快捷、高效。为了区分以上这些数据,我们将这些数据对应的表分别保存在不同的数据库中。

接下来就要创建三个数据库,分别用来管理每一层的表数据

在ods数据库中创建三种表单

创建用户打车订单表

创建取消订单表

创建订单表支付表

创建用户评价表

大规模数据的处理,必须要构建分区。

此处的需求每天都会进行数据分析(做的是离线分析),采用T+1的模式。

表加载数据的代码如下

4 数据预处理

预处理的需求

建宽表语句

预处理SQL语句

加载到宽表中

5 订单指标分析

需求:计算4月12日总订单笔数

1.编写HQL语句

select
 count(orderid) as total_cnt 
from
 dw_didi.t_user_order_wide 
where 
 dt = '2020-04-12’
;
  1. app层建表
-- 创建保存日期对应订单笔数的app表
create table if not exists app_didi.t_order_total(
    date string comment '日期(年月日)',
    count integer comment '订单笔数'
)
partitioned by (month string comment '年月,yyyy-MM')
row format delimited fields terminated by ','
;
  1. 加载数据到app表
insert overwrite table app_didi.t_order_total partition(month='2020-04')
select 
  '2020-04-12',count(orderid) as total_cnt
From  dw_didi.t_user_order_wide
Where   dt = '2020-04-12';

6 Sqoop数据导出

Apache Sqoop是在Hadoop生态体系和RDBMS体系之间传送数据的一种工具。来自于Apache软件基金会提供。

Hadoop生态系统包括:HDFS、Hive、Hbase等

RDBMS体系包括:Mysql、Oracle、DB2等。

Sqoop可以理解为:“SQL 到 Hadoop 和 Hadoop 到SQL”。

-- 创建目标数据库
create database if not exists app_didi;
-- 创建预约订单/非预约订单结果表
CREATE TABLE IF NOT EXISTS app_didi.t_order_subscribe_total(
DATE DATE COMMENT '日期',
subscribe_name VARCHAR(20) COMMENT '是否预约',
COUNT INT COMMENT '订单数量'
);
-- 创建不同时段订单占比分析结果表
CREATE TABLE IF NOT EXISTS app_didi.t_order_timerange_total(
DATE DATE COMMENT '日期',
timerange VARCHAR(20) COMMENT '时间段',
COUNT INTEGER COMMENT '订单数量'
);
-- 创建不同地域订单占比分析结果表
CREATE TABLE IF NOT EXISTS app_didi.t_order_province_total(
DATE DATE COMMENT '日期',
province VARCHAR(20) COMMENT '省份',
COUNT INTEGER COMMENT '订单数量'
);
-- 创建不同年龄段订单占比分析结果表
CREATE TABLE IF NOT EXISTS app_didi.t_order_agerange_total(
DATE DATE COMMENT '日期',
age_range VARCHAR(20) COMMENT '年龄段',
COUNT INTEGER COMMENT '订单数量'
);

7.数据导出操作

将Hive中的结果表导出到Mysql中

(非全部)

#导出订单总笔数表数据
    bin/sqoop export \
    --connect jdbc:mysql://192.168.88.100:3306/app_didi \
    --username root \
    --password 123456 \
    --table t_order_total \
    --export-dir /user/hive/warehouse/app_didi.db/t_order_total/month=2020-04
    #导出预约和非预约订单统计数据
    bin/sqoop export \
    --connect jdbc:mysql://192.168.88.100:3306/app_didi \
    --username root \
    --password 123456 \

8 Superset数据可视化

Superset是一款开源的现代化企业级BI,是目前开源的数据分析和可视化工具中比较好用的,功能简单但可以满足我们对数据的基本需求,支持多种数据源,图表类型多,易维护,易进行二次开发。

它的特点如下:

1.丰富的数据可视化集

2.易于使用的界面,用于浏览和可视化数据

3.可提供身份验证

在真正开始利用Superset对数据可视化之前,要先将Superset连接据库,又称创建数据源。

实现步骤

1.创建看板

2.设置看板名字

3.进入看板

4.编辑看板

5.选择自定义图表

6.制作看板

7.调整看板位置

至于看板效果呈现,就交给读者自行完成了~~

总结

希望这次国家重拳出击整顿“大数据杀熟”,能够彻底有效,毕竟即便是笔者是学大数据的,如果不多下几个APP比价,也免不了被杀熟。此外,希望通过此次整顿,大数据行业能够更加健康有序发展,这对于我们从业人员也是有好处的,因为大数据技术的出现并不全是坏处,前不久的疫情严重时,健康码,快速检测过关都有大数据在背后做支撑,使用“大数据”利剑并没有错,错的是使用在什么地方,真心祝愿技术都能用在有益于全人类的地方。


相关实践学习
AnalyticDB MySQL海量数据秒级分析体验
快速上手AnalyticDB MySQL,玩转SQL开发等功能!本教程介绍如何在AnalyticDB MySQL中,一键加载内置数据集,并基于自动生成的查询脚本,运行复杂查询语句,秒级生成查询结果。
阿里云云原生数据仓库AnalyticDB MySQL版 使用教程
云原生数据仓库AnalyticDB MySQL版是一种支持高并发低延时查询的新一代云原生数据仓库,高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,可以对海量数据进行即时的多维分析透视和业务探索,快速构建企业云上数据仓库。 了解产品 https://www.aliyun.com/product/ApsaraDB/ads
目录
相关文章
|
1月前
|
分布式计算 大数据 Apache
ClickHouse与大数据生态集成:Spark & Flink 实战
【10月更文挑战第26天】在当今这个数据爆炸的时代,能够高效地处理和分析海量数据成为了企业和组织提升竞争力的关键。作为一款高性能的列式数据库系统,ClickHouse 在大数据分析领域展现出了卓越的能力。然而,为了充分利用ClickHouse的优势,将其与现有的大数据处理框架(如Apache Spark和Apache Flink)进行集成变得尤为重要。本文将从我个人的角度出发,探讨如何通过这些技术的结合,实现对大规模数据的实时处理和分析。
142 2
ClickHouse与大数据生态集成:Spark & Flink 实战
|
1月前
|
消息中间件 Java Kafka
实时数仓Kappa架构:从入门到实战
【11月更文挑战第24天】随着大数据技术的不断发展,企业对实时数据处理和分析的需求日益增长。实时数仓(Real-Time Data Warehouse, RTDW)应运而生,其中Kappa架构作为一种简化的数据处理架构,通过统一的流处理框架,解决了传统Lambda架构中批处理和实时处理的复杂性。本文将深入探讨Kappa架构的历史背景、业务场景、功能点、优缺点、解决的问题以及底层原理,并详细介绍如何使用Java语言快速搭建一套实时数仓。
173 4
|
2月前
|
分布式计算 大数据 Serverless
云栖实录 | 开源大数据全面升级:Native 核心引擎、Serverless 化、湖仓架构引领云上大数据发展
在2024云栖大会开源大数据专场上,阿里云宣布推出实时计算Flink产品的新一代向量化流计算引擎Flash,该引擎100%兼容Apache Flink标准,性能提升5-10倍,助力企业降本增效。此外,EMR Serverless Spark产品启动商业化,提供全托管Serverless服务,性能提升300%,并支持弹性伸缩与按量付费。七猫免费小说也分享了其在云上数据仓库治理的成功实践。其次 Flink Forward Asia 2024 将于11月在上海举行,欢迎报名参加。
244 6
云栖实录 | 开源大数据全面升级:Native 核心引擎、Serverless 化、湖仓架构引领云上大数据发展
|
1月前
|
分布式计算 大数据 OLAP
AnalyticDB与大数据生态集成:Spark & Flink
【10月更文挑战第25天】在大数据时代,实时数据处理和分析变得越来越重要。AnalyticDB(ADB)是阿里云推出的一款完全托管的实时数据仓库服务,支持PB级数据的实时分析。为了充分发挥AnalyticDB的潜力,将其与大数据处理工具如Apache Spark和Apache Flink集成是非常必要的。本文将从我个人的角度出发,分享如何将AnalyticDB与Spark和Flink集成,构建端到端的大数据处理流水线,实现数据的实时分析和处理。
72 1
|
1月前
|
并行计算 数据挖掘 大数据
Python数据分析实战:利用Pandas处理大数据集
Python数据分析实战:利用Pandas处理大数据集
|
2月前
|
消息中间件 存储 druid
大数据-156 Apache Druid 案例实战 Scala Kafka 订单统计
大数据-156 Apache Druid 案例实战 Scala Kafka 订单统计
51 3
|
1月前
|
数据采集 分布式计算 OLAP
最佳实践:AnalyticDB在企业级大数据分析中的应用案例
【10月更文挑战第22天】在数字化转型的大潮中,企业对数据的依赖程度越来越高。如何高效地处理和分析海量数据,从中提取有价值的洞察,成为企业竞争力的关键。作为阿里云推出的一款实时OLAP数据库服务,AnalyticDB(ADB)凭借其强大的数据处理能力和亚秒级的查询响应时间,已经在多个行业和业务场景中得到了广泛应用。本文将从个人的角度出发,分享多个成功案例,展示AnalyticDB如何助力企业在广告投放效果分析、用户行为追踪、财务报表生成等领域实现高效的数据处理与洞察发现。
69 0
|
2月前
|
Oracle 大数据 数据挖掘
企业内训|大数据产品运营实战培训-某电信运营商大数据产品研发中心
本课程是TsingtaoAI专为某电信运营商的大数据产品研发中心的产品支撑组设计,旨在深入探讨大数据在电信运营商领域的应用与运营策略。通过密集的培训,从数据的本质与价值出发,系统解析大数据工具和技术的最新进展,深入剖析行业内外的实践案例。课程涵盖如何理解和评估数据、如何有效运用大数据技术、以及如何在不同业务场景中实现数据的价值转化。
61 0
|
4月前
|
数据采集 人工智能 安全
AI大数据处理与分析实战--体育问卷分析
本文是关于使用AI进行大数据处理与分析的实战案例,详细记录了对深圳市义务教育阶段学校“每天一节体育课”网络问卷的分析过程,包括数据概览、交互Prompt、代码处理、年级和学校维度的深入分析,以及通过AI工具辅助得出的分析结果和结论。
|
4月前
|
大数据 API 数据处理
揭秘!Flink如何从默默无闻到大数据界的璀璨明星?起源、设计理念与实战秘籍大公开!
【8月更文挑战第24天】Apache Flink是一款源自Stratosphere项目的开源流处理框架,由柏林理工大学等机构于2010至2014年间开发,并于2014年捐赠给Apache软件基金会。Flink设计之初即聚焦于提供统一的数据处理模型,支持事件时间处理、精确一次状态一致性等特性,实现了流批一体化处理。其核心优势包括高吞吐量、低延迟及强大的容错机制。
84 1