1. 流程介绍 在上一篇文章中,我们已经把客户端的页面日志,启动日志,曝光日志分别发送到kafka对应的主题中.在本文中,我们将把业务数据也发送到对应的kafka主题中. 通过maxwell采集业务数据变化,相当于是ods数据,把采集的数据发送到kafka的topic(ods_base_db_m)中,然后flink从kafka消费数据,这个过程有维度数据,就放到hbase中,其他事实数据再发送给kafka作为dwd层.flink消费kafka数据可以做一些简单的ETL处理,比如过滤空值,长度限制…
在上一篇文章中,我们已经获取到了业务数据的输出流,分别是dim层维度数据的输出流,及dwd层事实数据的输出流,接下来我们要做的就是把这些输出流分别再流向对应的数据介质中,dim层流向hbase中,dwd层依旧回写到kafka中. 1.分流维度表sink到hbase 上一篇的结果是维度数据在侧输出流hbaseDs,事实数据在主流filterDs中,如下: //5.动态分流,事实表写会kafka,维度表写入hbase OutputTag<JSONObject> hbaseTag = new Out…
1. 摘要 我们前面采集的日志数据已经保存到 Kafka 中,作为日志数据的 ODS 层,从 kafka 的ODS 层读取的日志数据分为 3 类, 页面日志.启动日志和曝光日志.这三类数据虽然都是用户行为数据,但是有着完全不一样的数据结构,所以要拆分处理.将拆分后的不同的日志写回 Kafka 不同主题中,作为日志 DWD 层. 页面日志输出到主流,启动日志输出到启动侧输出流,曝光日志输出到曝光侧输出流 2. 识别新老用户 本身客户端业务有新老用户的标识,但是不够准确,需要用实时计算再次确认(不涉…
1.需求分析 订单是统计分析的重要的对象,围绕订单有很多的维度统计需求,比如用户.地区.商品.品类.品牌等等.为了之后统计计算更加方便,减少大表之间的关联,所以在实时计算过程中将围绕订单的相关数据整合成为一张订单的宽表.那究竟哪些数据需要和订单整合在一起? 如上图,由于在之前的操作(BaseDbTask)我们已经把数据分拆成了事实数据和维度数据,事实数据(绿色)进入 kafka 数据流(DWD 层)中,维度数据(蓝色)进入 hbase 中长期保存.那么我们在 DWM 层中要把实时和维度数据进行整…
1. 维度查询 在上一篇中,我们已经把订单和订单明细表join完,本文将关联订单的其他维度数据,维度关联实际上就是在流中查询存储在 hbase 中的数据表.但是即使通过主键的方式查询,hbase 速度的查询也是不及流之间的 join.外部数据源的查询常常是流式计算的性能瓶颈,所以我们在查询hbase维度数据的基础上做一些优化及封装. phoenix查询封装 phoenix作为hbase的一个上层sql封装,或者叫做皮肤,可以使用标准的sql语法来使用hbase,我们做一些简单的查询hbase的工…
支付宽表 支付宽表的目的,最主要的原因是支付表没有到订单明细,支付金额没有细分到商品上, 没有办法统计商品级的支付状况. 所以本次宽表的核心就是要把支付表的信息与订单明细关联上. 解决方案有两个 一个是把订单明细表(或者宽表)输出到 Hbase 上,在支付宽表计算时查询 hbase, 这相当于把订单明细作为一种维度进行管理. 一个是用流的方式接收订单明细,然后用双流 join 方式进行合并.因为订单与支付产 生有一定的时差.所以必须用 intervalJoin 来管理流的状态时间,保证当支付到达…
1.架构说明 在上6节当中,我们已经完成了从ods层到dwd层的转换,包括日志数据和业务数据,下面我们开始做dwm层的任务. DWM 层主要服务 DWS,因为部分需求直接从 DWD 层到DWS 层中间会有一定的计算量,而且这部分计算的结果很有可能被多个 DWS 层主题复用,所以部分 DWD 会形成一层 DWM,我们这里主要涉及业务: 访问UV计算 跳出明细计算 订单宽表 支付宽表 因为实时计算与离线不同,实时计算的开发和运维成本都是非常高的,要结合实际情况考虑是否有必要象离线数仓一样,建一个大而…
1. 流程分析 前面已经将日志数据(ods_base_log)及业务数据(ods_base_db_m)发送到kafka,作为ods层,接下来要做的就是通过flink消费kafka 的ods数据,进行简单的处理作为dwd层,然后再写回到kafka. 每层职能 分层 数据描述 计算工具 存储介质 ODS 原始数据,日志和业务 日志服务器,maxwell kafka DWD 根据数据对象为单位进行分流,比如订单.页面访问等等. flink kafka DWM 对于部分数据对象进行进一步加工,比如独立访…
1.访客跳出明细介绍 首先要识别哪些是跳出行为,要把这些跳出的访客最后一个访问的页面识别出来.那么就要抓住几个特征: 该页面是用户近期访问的第一个页面,这个可以通过该页面是否有上一个页面(last_page_id)来判断,如果这个表示为空,就说明这是这个访客这次访问的第一个页面. 首次访问之后很长一段时间(自己设定),用户没继续再有其他页面的访问. 这第一个特征的识别很简单,保留 last_page_id 为空的就可以了.但是第二个访问的判断,其实有点麻烦,首先这不是用一条数据就能得出结论的,需…
1.日志生成项目 日志生成机器:hadoop101 jar包:mock-log-0.0.1-SNAPSHOT.jar gmall_mock ​ |----mock_common ​ |----mock_db ​ |----mock_log 项目地址:https://github.com/zhangbaohpu/gmall-mock 将模块mock_log打包成jar,并在同级添加application.yml cd /opt/software/applog/ vim application.ym…