
实时数仓
文章平均质量分 53
实时数仓讲解
大数据开发工程师-宋权
攻城狮,嗷!!!!
展开
-
(69)内网穿透
5.1 作用 通常个人电脑无论是连接 WIFI 上网还是用网线上网,都是属于局域网里边的,外网无 法直接访问到你的电脑,内网穿透可以让你的局域网中的电脑实现被外网访问功能。 5.2 工具 目前国内网穿透工具很多,常见的比如花生壳、Ngrok。 官网: 花生壳:https://hsk.oray.com Ngrok: http://www.ngrok.cc 本文以介绍花生壳为主5.3 步骤 5.3.1 首先注册、登录,并且需要实名认证(要提供身份证 正反面照片)原创 2021-08-03 11:26:02 · 207 阅读 · 0 评论 -
(68)可视化查询
4.1 DataV 阿里云网址: https://datav.aliyun.com/ 官方帮助手册: https://help.aliyun.com/document_detail/30360.html 阿里云有两大数据可视化服务,一个是 QuickBI,一个就是 DataV。 QuickBI 定位 BI 工具定位由数据分析师使用,通过灵活配置各种多维分析、深度钻取, 生成各种报表和可交互的图形化展示;而 DataV ,倾向于定制数据大屏,针对运营团队使用 的信息丰富炫酷的监原创 2021-08-03 11:22:43 · 315 阅读 · 0 评论 -
(67)功能 2:发布查询接口
3.1 分析 功能 1 将数据写入到 MySQL 后,我们可以非常方便的进行一些统计,比如还是以品牌 为例,我们现在要是计算某个时间段的热门品牌 TopN,可以通过如下 SQL 完成,我们同 样可以基于这些操作,发布查询接口,方便对接可视化工具。select trademark_id,trademark_name, sum(amount) amount from trademark_amount_stat where stat_time >= #{start_D原创 2021-08-03 11:06:58 · 213 阅读 · 0 评论 -
(63)ADS 聚合以及可视化
第1章 需求分析及实现思路 1.1 需求分析 以热门品牌统计为例,将数据写入到 ads 层,然后根据各种报表及可视化来生成统计数 据。通常这些报表及可视化都是基于某些维度的汇总统计。 热门商品统计(作业) 热门品类统计(作业) 交易用户性别对比(作业) 交易用户年龄段对比(作业) 交易额省市分布(作业) 1.2 业务流程图1.3 实现思路 1.3.1 功能 1:ADS 层写入 1.3.2 功能 2:发布查询接口 1.3.3 功能 3.原创 2021-08-03 10:54:54 · 439 阅读 · 0 评论 -
62.发布数据接口(统计新增交易额)实现
从 ClickHouse 或者其它支持 JDBC 协议的数据中,查询出订单和订单明细数据,并提 供数据接口,方便其它使用者进行统计分析 6.1 访问路径 6.2 要求数据格式6.3 代码结构 6.4 代码实现 在 gmall2020-publisher 模块中完成 6.4.1 在 pom.xml 文件中添加相关依赖6.4.2 在 application.properties 中添加以下配置6.4.3 编写 Mapp 接口...原创 2021-07-30 14:01:21 · 339 阅读 · 0 评论 -
62.将 订 单 及 明 细 保 存 到ClickHouse 实现
5.1 ClickHouse 入门参照 ClickHouse 文档 5.2 在 hadoop202 的 ClickHouse 中建表 表结构和程序中 OrderWide 类的字段对应5.3 Idea 中编写程序 5.3.1 pom.xml 文件中添加 ClickHouse 相关依赖5.3.2 OrderWideApp 添加写到 ClickHouse 代码 5.3.3 测试 (1)启动 Hdfs、ZK、Kafka、Redis、Hba...原创 2021-07-30 13:53:32 · 555 阅读 · 0 评论 -
(61).订单明细实付金额分摊实现
4.1 需求分析 主订单的应付金额【origin_total_amount】一般是由所有订单明细的商品单价*数量 汇总【order_price*sku_num】组成。 但是由于优惠、运费等都是以订单为单位进行计算的,所以减掉优惠、加上运费会得到 一个最终实付金额【final_total_amount】。但问题在于如果是以商品进行交易额分析,就需要把优惠、运费分摊到购买的每个商品 中。 4.2 如何分摊 一般是由订单明细每种商品的消费占总订单的比重进行分摊,比如总价 1原创 2021-07-30 13:49:53 · 3622 阅读 · 0 评论 -
(60).双流合并实现
除了事实表与维表进行合并形成宽表,还需要事实表与事实表进行合并形成更大的宽表。 3.1 双流合并的问题 由于订单流和订单明细流,两个流的数据是独立保存,独立消费,很有可能同一业务的 数据,分布在不同的批次。因为 join 算子只 join 同一批次的数据。如果只用简单的 join 流 方式,会丢失掉不同批次的数据。3.2 解决策略 3.2.1 通过缓存➢ 思路 两个流做满外连接因为网络延迟等关系,不能保证每个窗口中的数据 key 都能匹配上, 这样势必会出现三.原创 2021-07-29 11:19:28 · 366 阅读 · 0 评论 -
(59)订单明细写入 Kafka(DWD 层)
OrderDetailApp 完整代码 2.5 订单写入 Kafka(DWD 层) OrderInfoApp 完整代码2.6 整体测试 2.6.1 在 DWS 中创建 OrderWideApp 接收数据 2.6.2 运 行 BaseDBMaxwellApp 、 OrderInfoApp 、 OrderDetailApp、OrderWideApp,运行模拟生成业务 数据 jar...原创 2021-07-29 11:08:28 · 752 阅读 · 0 评论 -
58.订单明细实时表和商品、品牌、spu 等维表关联
2.3.1 关联方式 (1)方法 1:用明细表依次和每个维度表进行关联➢ 订单明细和商品关联 order_detail --> sku_id ➢ 订单明细商品宽表和 spu 关联 订单明细宽表(spu_id) --> spu 得到 spuname➢ 订单明细商品和 spu 宽表和品牌关联 订单明细宽表(tm_id) --> tm 得到 tm_name ➢ 订单明细商品、spu、品牌宽表和品类关联 订单明细宽表(category3_id原创 2021-07-29 10:56:08 · 1161 阅读 · 0 评论 -
57.准备订单明细数据
订单和订单明细,都是实时产生的业务数据,如果将订单明细也当作维表进行处理,不能保证订单明细肯定先存在于维表中,所以订单明细也应该作为事实表进行处理。然后再用 订单明细和商品维表进行关联,获取商品相关信息2.1 创建订单明细样例类 OrderDetail2.2 创建读取订单明细数据的类 OrderDetailApp 2.2.1 代码2.2.2 测试 ➢ 运行 OrderDetailApp、BaseDBMaxwellApp ➢ 运...原创 2021-07-29 10:32:31 · 172 阅读 · 0 评论 -
56.订单明细实付金额分摊(实时)
第1章 需求分析及实现思路1.1 需求分析 主订单的应付金额【origin_total_amount】一般是由所有订单明细的商品单价*数量 汇总【sku_price*sku_num】组成。 但是由于优惠、运费等都是以订单为单位进行计算的,所以减掉优惠、加上运费会得到 一个最终实付金额【final_total_amount】。 但问题在于如果是以商品进行交易额分析,就需要把优惠、运费分摊到购买的每个商品 中。 1.2 业务流程图1.3 实现思路 1.3.原创 2021-07-29 10:08:09 · 991 阅读 · 0 评论 -
55.创建 IndexPatterns,确定数据源和数据范
Kibana->Index Patterns->Create index pattern6.4.2 创建单图➢ 选择 Index patterns➢ 选择中国地图 ➢ 区域编码选择 ISO 3166-2 code➢ 最终效果6.5 当日首单用户,不同性别的人数占比 是否首单作为查询条件,以性别进行分组,取 count 6.6 当日首单用户,不同年龄段的人数占比 是否首...原创 2021-07-29 10:00:04 · 628 阅读 · 0 评论 -
52.功能 4:可视化展示
6.1 在 ES 中创建索引接收关联的数据6.2 在 OrderInfoApp 中,将关联后的数据写到 ES 中6.3 生成订单数据,插入到 ES 中➢ 启动 BaseDBMaxwellApp、OrderInfoApp➢ 运行生成模拟业务数据的 jar ➢ 查看 ES 中是否收到数据6.4 当日首单用户,不同省份的平均消费 是否首单作为查询条件,以省份进行分组,取平均值...原创 2021-07-29 09:55:59 · 116 阅读 · 0 评论 -
50.订单表和维度表的关联
5.3.1 OrderInfoApp 代码 5.3.2 测试 ➢ 运行 BaseDBMaxwellApp 和 OrderInfoApp 同步数据 ➢ 运行模拟生成数据的 jar 包 ➢ 查看控制台输出的 OrderInfoApp 是否和省份以及用户进行了关联...原创 2021-07-29 09:50:39 · 241 阅读 · 0 评论 -
49.功能 3:订单与维度表的关联
5.1 处理维度数据合并的策略 维度数据和状态数据非常像,但也有不同之处 ➢ 相同点 ◼ 长期保存维护 ◼ 可修改 ◼ 使用 k-v 方式查询 ➢ 不同点 ◼ 数据变更的时机不同状态数据往往因为事实数据的新增变化而变更 维度数据只会受到业务数据库中的变化而变更 ➢ 综上 根据共同点,维度数据也是非常适合使用 hbase 存储的,稍有不同的是维度数据必须 启动单独的实时计算来监控维度表变化来更新实时数据。 5.2 维度表的读取 5原创 2021-07-29 09:44:16 · 334 阅读 · 0 评论 -
48.判断是否为首单用户实现
4.1 准备工作 4.1.1 使用 phoenix 在 hbase 中建表 (1)解压 squirrel-sql-3.9.1.zip(2)在解压后的目录双击运行 squirrel-sql.bat(3)添加 phoenix 驱动 (4)具体驱动配置如下 ◼ Example URL jdbc:phoenix:hadoop202,hadoop203,hadoop204:2181 ◼ Class Name org.apache.phoenix.jdb...原创 2021-07-28 11:38:31 · 548 阅读 · 0 评论 -
47.功能 1:数据采集实现(Maxwell)
3.1 Maxwell 介绍 Maxwell 是由美国 zendesk 开源,用 java 编写的 Mysql 实时抓取软件,其抓取的 原理也是基于 binlog。 3.2 Maxwell 和 canal 工具对比 ➢ Maxwell 没有 canal 那种 server+client 模式,只有一个 server 把数据发送到消息队列 或 redis。如果需要多个实例,通过指定不同配置文件启动多个进程。 ➢ Maxwell 有一个亮点功能,就是 canal 只能抓取最新数原创 2021-07-28 11:09:46 · 681 阅读 · 0 评论 -
46.canal 版本的 ODS 层处理
2.6.1 数据格式2.6.2 SparkStreaming 对 Topic 分流业务代码canal 会追踪整个数据库的变更,把所有的数据变化都发到一个 topic 中了,但是为了 后续处理方便,应该把这些数据根据不同的表,分流到不同的主题中去。 (1)Kafka 发送数据工具类 在gmall2020-realtime模块中创建MyKafkaSink工具类,用于向Kafka中发送数据, 前面创建的 MyKafkaUtil 主要用于消费 Kafka 数据。 ...原创 2021-07-28 10:57:59 · 152 阅读 · 0 评论 -
46.canal 架构以及安装
2.3.1 canal 架构2.3.2 canal 的下载和安装https://github.com/alibaba/canal/releases我们直接/2.资料/02-工具下的canal.deployer-1.1.4.tar.gz拷贝到/opt/sortware目录 下,然后解压到/opt/module/canal包下 注意:canal解压后是散的,我们在指定解压目录的时候需要将canal指定上2.4 canal 单机版 2.4.1 修改 conf/can..原创 2021-07-28 10:44:44 · 288 阅读 · 0 评论 -
45.MySQL 的准备
2.2.1 创建实时业务数据库 2.2.2 导入建表数据2.2.3 修改/etc/my.cnf 文件2.2.4 重启 MySQL 使配置生效sudo systemctl restart mysqld到/var/lib/mysql 目录下查看初始文件大小 154 2.2.5 模拟生成数据➢ 把 /2. 资 料 /03- 模 拟 器 ( 数 据 库 ) 里 面 的 jar 和 properties 文 件 上 传 到 /opt/module/rt_...原创 2021-07-28 10:24:33 · 112 阅读 · 0 评论 -
42.数据采集实现(canal)
2.1 canal 入门 2.1.1 什么是 canal 阿里巴巴 B2B 公司,因为业务的特性,卖家主要集中在国内,买家主要集中在国外, 所以衍生出了同步杭州和美国异地机房的需求,从 2010 年开始,阿里系公司开始逐步的尝 试基于数据库的日志解析,获取增量变更进行同步,由此衍生出了增量订阅&消费的业务。 canal 是用 java 开发的基于数据库增量日志解析,提供增量数据订阅&消费的中间件。目前,canal 主要支持了 MySQL 的 binlog 解析,解析原创 2021-07-28 10:17:37 · 853 阅读 · 0 评论 -
(40)首单分析
1.需求分析及实现思路按省份|用户性别|用户年龄段,统计当日新增付费用户首单平均消费及人数占比 无论是省份名称、用户性别、用户年龄,订单表中都没有这些字段,需要订单(事实表) 和维度表(省份、用户)进行关联,形成宽表后将数据写入到 ES,通过 Kibana 进行分析 以及图形展示。 2 .整体实时计算框架流程1.3 具体业务流程图1.4 实现思路 1.4.1 功能 1:数据采集从 MySQL 数据库中采集业务数据到 Kafka,并对数据进.原创 2021-07-28 09:54:13 · 268 阅读 · 0 评论 -
(39) 代码实现-发布查询接口(分时值)
➢ 在 PublisherController 中发布接口原创 2021-07-28 09:18:01 · 115 阅读 · 0 评论 -
(38)从 ES 中查询出数据,发布成数据接口,可视化工程进行调用
2.7.1 思路 ➢ 目标效果2.7.2 代码实现-搭建开发环境 ➢ 创建新的 module ➢ 勾选相关依赖➢ 在 pom.xml 文件中添加 ES 相关依赖以及 commons-lang3 工具包 注意:目前 SprintBoot 版本更新到 2.3.3,从 2.3 开始,SpringBoot 不能自动注入 JestClient 了,所以我们将版本降低到 2.1.5,修改后 Test 类报错,重新导包即可 ...原创 2021-07-27 11:45:36 · 374 阅读 · 0 评论 -
(37)配置仪表盘
仪表盘 Dashboard,就是配置多个图在一个页面上同时展示 ➢ 选择 Dashboard 然后选择 Create new DashBoard➢ 然后选择 add ➢ 从之前配置的可视化图中,选择图形。 ➢ 选好后选择 save 保存。就可以在 Dashboard 列表中查看大盘图了➢ 拷贝内嵌代码➢ 新建一个 html 页面,将拷贝的 iframe 粘贴进去,可以查看数据 ➢ 修 改 /o...原创 2021-07-27 11:34:15 · 130 阅读 · 0 评论 -
(36)利用 kibana 搭建数据可视化
如果数据保存在 Elasticsearch 那么利用 kibana 进行可视化展示是一种非常高效的可 视化解决方案。这种 kibana 可视化方案,优势是快速高效,但是对于展示效果的定制化和 炫酷程度不能有太高的要求。 2.6.1 步骤一:创建 IndexPatterns 其实就是创建数据源 确定数据范围 ➢ 在 Management 中创建 Index Patterns➢ 配置匹配模式,通过用“*”来控制后缀可以得到不同的数据范围 ➢ ..原创 2021-07-27 11:29:19 · 571 阅读 · 0 评论 -
(35)幂等性操作
其实我们前面已经使用 Redis 进行了去重操作,基本上是可以保证幂等性的。如果更 严格的保证幂等性,那我们在批量向 ES 写数据的时候,指定 Index 的 id 即可➢ 修改 MyESUtil➢ 修改 DauApp...原创 2021-07-27 11:21:45 · 371 阅读 · 0 评论 -
(34)手动提交偏移流程
➢ 偏移量保存在哪 本身 kafka 0.9 版本以后 consumer 的偏移量是保存在 kafka 的__consumer_offsets 主题中。但是如果用这种方式管理偏移量,有一个限制就是在提交偏移量时,数据流的元素 结 构 不 能 发 生 转 变 , 即 提 交 偏 移 量 时 数 据 流 , 必 须 是 InputDStream[ConsumerRecord[String, String]] 这种结构。但是在实际计算中, 数据难免发生转变,或聚合,或关联,一旦发生转变,就无法原创 2021-07-27 10:09:06 · 239 阅读 · 0 评论 -
(33)保证数据的精准一次性消费
2.5.1 定义 ➢ 精确一次消费(Exactly-once) 是指消息一定会被处理且只会被处理一次。不多不少就一次处理。 如果达不到精确一次消费,可能会达到另外两种情况: ➢ 至少一次消费(at least once) 主要是保证数据不会丢失,但有可能存在数据重复问题。 ➢ 最多一次消费 (at most once) 主要是保证数据不会重复,但有可能存在数据丢失问题。 2.5.2 问题如何产生 ➢ 数据何时会丢失 比如实时计算任务进行计算,到数据结原创 2021-07-27 09:57:34 · 368 阅读 · 0 评论 -
(32)功能 3:把每批次新增的当日日活信息保存到 ES 中
2.4.1 思路 将去重后的结果保存的 ElasticSearch 中,以便后续业务操作 2.4.2 代码实现 ➢ 在 ES 中创建索引模板➢ 创建一个样例类,用于封装需要的日志数据(并不是所有采集到的字段都需要) ➢ 在 MyESUtil 工具类中提供批量添加 bulkInsert 的方法➢ 在 DauApp 类中完成插入的功能 //===============向 ES 中保存数据=================== filtere...原创 2021-07-27 09:25:55 · 172 阅读 · 0 评论 -
(31)功能 2:利用 Redis 过滤当日已经计入的日活设备
2.3.1 思路 ➢ 利用 Redis 保存今天访问过系统的用户清单 即 SparkStreaming 从 Kafka 中读取到用户的启动日志之后,将用户的启动日志保存 到 Redis 中,进行去重 ➢ 根据保存反馈得到用户是否已存在 Redis 的五大数据类型中,String 和 Set 都可以完成去重功能,但是 String 管理不适 合整体操作,比如设置失效时间或者获取当天用户等操作,所以我们项目中使用的是 Set 类型,处理批量管理以外,还可以根据 saddAPI原创 2021-07-27 09:25:21 · 139 阅读 · 0 评论 -
(30)获取 Redis 连接的工具类
➢ 修改 redis.conf 配置文件 #bind 127.0.0.1 protected-mode no daemonize yes 注意:修改配置文件后,启动 redis 的时候需要指定配置文件 [atguigu@hadoop202 redis-3.2.5]$ src/redis-server redis.conf ➢ 代码package com.atguigu.gmall.realtime.utils import redis.clients.jedis.{Jedi原创 2021-07-27 09:25:08 · 151 阅读 · 1 评论 -
(29)功能实现
2.1 环境搭建以及编写基础工具类 2.1.1 在 gmall2020-realtime 中编写代码 2.1.2 在 resources 目录添加 config.properties 配置文件配置 kafka、redis 等连接信息2.1.3 在 resources 目录添加 log4j.properties 配置文件2.1.4 导入相关依赖 完整 pom.xml 配置2.1.5 读取 properties 配置文件的工具类 ➢ 在 ...原创 2021-07-27 09:24:51 · 89 阅读 · 0 评论 -
(28)实时日活思路
1.1 当日用户首次登录(日活)分时趋势图,昨日对比 从项目的日志中获取用户的启动日志,如果是当日第一次启动,纳入统计。将统计结果 保存到 ES 中,利用 Kibana 进行分析展示 1.2 实现思路 1.2.1 功能 1:SparkStreaming 消费 kafka 数据Kafka 作为数据来源,从 kafka 中获取日志,kafka 中的日志类型有两种,启动和事件, 我们这里统计日活,只获取启动日志即可1.2.2 功能 2:利用 redis 过滤当日已经计.原创 2021-07-26 09:46:32 · 327 阅读 · 0 评论 -
(09)Nginx 主要应用
.1 静态网站部署 Nginx 是一个 HTTP 的 web 服务器,可以将服务器上的静态文件(如 HTML、图片等) 通过 HTTP 协议返回给浏览器客户端 4.5.2 负载均衡 在网站创立初期,我们一般都使用单台机器对外提供集中式服务。随着业务量的增大, 我们一台服务器不够用,此时就会把多台机器组成一个集群对外提供服务,但是,我们网站 对外提供的访问入口通常只有一个,比如 www.web.com。那么当用户在浏览器输入 www.web.com 进行访问的时候,如何将用户的请求原创 2021-07-19 09:45:55 · 181 阅读 · 1 评论 -
(09)Nginx 核心配置文件说明
学习 Nginx 首先需要对它的核心配置文件有一定的认识,这个文件位于 Nginx 的安装目录/opt/module/nginx/conf 目录下,名字为 nginx.conf1 基本配置 2 events 配置3 http 配置(1) 基本配置 (2) server 配置,可以有多个...原创 2021-07-19 09:43:15 · 108 阅读 · 1 评论 -
(06)搭建日志采集集群,并通过 Nginx 进行反向代理
(1) Nginx 环境搭建好 (2) 修改 nginx.conf 配置文件 注意:每行配置完毕后有分号(3) 将日志采集的模块 jar 包同步到 hadoop203 和 hadoop204 [atguigu@hadoop202 module]$ xsync rt_gmall/(4) 修改模拟日志生成的配置,发送到的服务器路径修改为 nginx 的(5) 测试(6) 集群群起脚本 将采集日志服务(nginx 和采集日志数据的 jar 启动...原创 2021-07-19 09:32:22 · 206 阅读 · 2 评论 -
(05)将 gmall2020-logger 打包到单台 Linux 上运行
(1) 在 hadoop202 的/opt/module 目录下创建 rt_gmall 目录(2) Idea 中修改 gmall2020-logger 中的 logback.xml 配置文件,指定日志输出目录<property name="LOG_HOME" value="/opt/module/rt_gmall/gmall2020" /> 注意:路径和上面创建的路径保持一致,根据自己的实际情况进行修改(3) Idea 中修改 application.prope.原创 2021-07-19 09:25:55 · 308 阅读 · 2 评论 -
(04)在 Spring 程序中,将采集到的日志数据发送到 kafka
整体思路:在 gmall2020-logger 的 controller 中接收到数据之后,对日志数据进行分流, 根据日志类型(事件|启动),将日志发送到不同的 kafka 主题中去(1) 导入 spring-kafka 依赖 在创建 SpringBoot 模块的时候,勾选的;如果没有勾选,在 pom.xml 文件中加如下 配置(2) 在 pom.xml 文件中添加 fastjson 依赖(3) 在 gmall2020-logger 的 application...原创 2021-07-19 09:20:56 · 606 阅读 · 0 评论