实时数仓
大数据面壁者
大数据相关知识分享,框架底层原理机制,生产学习中遇到的相关问题分享,共同学习,共同进步。
展开
-
百度sugar大屏配置服务器全局Host
配置sugar大屏1. 配置服务器全局Host进入空间管理2. 大屏刷新数据回到大屏配置原创 2021-03-26 20:27:25 · 393 阅读 · 0 评论 -
内网穿透简介
内网穿透在本地开发的接口, 只能在局域网使用,公网服务器无法 直接读到这个接口, 只有让接口有公网地址才行.在测试阶段可以使用工具实现内网穿透来解决这个问题.内网穿透的作用通常个人电脑无论是连接WIFI上网还是用网线上网,都是属于局域网里边的,外网无法直接访问到你的电脑,内网穿透可以让你的局域网中的电脑实现被外网访问功能。现有工具目前国内网穿透工具很多,常见的比如花生壳、Ngrok、网云穿等。官网:花生壳:https://hsk.oray.comNgrok: http://www.ng原创 2021-03-26 20:18:36 · 489 阅读 · 0 评论 -
百度sugar数据大屏
百度sugar数据大屏1. 产品介绍Sugar是百度云推出的敏捷 BI 和数据可视化平台,目标是解决报表和大屏的数据 BI 分析和可视化问题,解放数据可视化系统的开发人力。2. 使用入口https://cloud.baidu.com/product/sugar.html需要使用百度账号登陆后实名认证,有一个月的试用期。3. 创建数据大屏点击立即使用, 登录百度账号首次使用需要实名认证, 然后有30天的免费使用期限会看到一个免费试用版的组织进入试用版组织选择第一原创 2021-03-26 20:08:07 · 1494 阅读 · 0 评论 -
DWS层:商品行为关键词主题宽表
DWS层:商品行为关键词主题宽表从商品主题获得,商品关键词与点击次数、订单次数、添加购物次数的统计表。重构DWSProductStatsApp重构DWSProductStatsApp, 增加最终的数据到Kafka的代码(因为flink没有直接读取clickhousse的方法,借助kafka中转)private void sink2Kafka(SingleOutputStreamOperator<ProductStats> resultStream) { resultStream.原创 2021-03-26 19:58:40 · 570 阅读 · 0 评论 -
拉链表的制作案例
拉链表的制作作用:主要处理缓慢变化维的业务场景。(用户表、订单表)简洁版,比较难理解,节省了两张临时表,适用于维度表,数据量不大的情况。INSERT overwrite table dwd_dim_user_info_his --数据分两批导入到dwd_dim_user_his--第一批: old + 更新需要变化的old的数据SELECT --左表和右边关联后,右表中为NULL的是不需要更新的数据,否则且左表的end_date为9999-99-99,需要将次字段更新 old.id, o原创 2021-03-26 08:48:39 · 570 阅读 · 4 评论 -
Flink自定义函数(自定义分词函数UDTF)
Flink自定义函数概述自定义函数(UDF)是一种扩展开发机制,可以用来在查询语句里调用难以用其他方式表达的频繁使用或自定义的逻辑。函数分类:Scalar functions类似于spark的udfTable functions类似于 spark的udtfAggregate functions类似于spark的udafTable aggregate functionsAsync table functins自定义Table Function实现分词功能一个词条包括多个词语所以分词原创 2021-03-24 21:19:12 · 1434 阅读 · 0 评论 -
DWS层:商品主题宽表处理并写入ClickHouse
DWS层:商品主题宽表处理与访客的dws层的宽表类似,也是把多个事实表的明细数据汇总起来组合成宽表1. 需求分析与思路从Kafka主题中获得数据流把Json字符串数据流转换为统一数据对象的数据流把统一的数据结构流合并为一个流flink多流join使用connect方法,前提是必须是相同类型的数据流,所有需要先封装主题宽表的bean对象,后续进行补充维度信息,分组聚合去重。设定事件时间与水位线分组、开窗、聚合写入ClickHouse2. 功能实现2.1 封装商品统计实体类Pro原创 2021-03-24 21:10:00 · 2049 阅读 · 2 评论 -
使用FlinkSQL将数据写入到ClickHouse
使用FlinkSQL将地区主题数据写入到ClickHouse一、需求分析与思路定义Table流环境把数据源定义为动态表通过SQL查询出结果表把结果表转换为数据流把数据流写入目标数据库如果是Flink官方支持的数据库,也可以直接把目标数据表定义为动态表,用insert into 写入。由于ClickHouse目前官方没有支持的jdbc连接器(目前支持Mysql、 PostgreSQL、Derby)。阿里云有实现好的connector, 我们使用这个connector.参考地址: https原创 2021-03-24 20:53:49 · 10041 阅读 · 15 评论 -
使用flink将数据流写入到Clickhouse的工具类
使用flink将数据流写入到Clickhousepackage com.gmall.realtime.util;import com.gmall.realtime.bean.VisitorStats;import org.apache.flink.connector.jdbc.JdbcConnectionOptions;import org.apache.flink.connector.jdbc.JdbcSink;import org.apache.flink.connector.jdbc.Jd原创 2021-03-23 21:06:16 · 1277 阅读 · 0 评论 -
实时数仓DWS层的定位
实时数仓DWS层的定位轻度聚合,因为DWS层要应对很多实时查询,如果是完全的明细那么查询的压力是非常大的。将更多的实时数据以主题的方式组合起来便于管理,同时也能减少维度查询的次数。1. DWS层:访客主题宽表设计一张DWS层的表其实就两件事:维度和度量(事实数据)度量包括PV、UV、跳出次数、连续访问页面数、连续访问时长维度包括在分析中比较重要的几个字段:渠道、地区、版本、新老用户进行聚合需求分析与思路接收各个明细数据,变为数据流把数据流合并在一起,成为一个相同格式对象的数据流原创 2021-03-23 21:03:52 · 531 阅读 · 0 评论 -
Flink实时数仓DWM层支付宽表设计
Flink实时数仓DWM层支付宽表设计需求分析与思路支付宽表的目的,最主要的原因是支付表没有到订单明细,支付金额没有细分到商品上,没有办法统计商品级的支付状况。所以支付宽表的核心就是要把支付表的信息与订单明细关联上。解决方案有两个一个是把订单明细表(或者宽表)输出到Hbase上,在支付宽表计算时查询hbase,这相当于把订单明细作为一种维度进行管理。一个是用流的方式接收订单明细,然后用双流join方式进行合并。因为订单与支付产生有一定的时差。所以必须用intervalJoin来管理流的状态时间原创 2021-03-20 19:23:21 · 900 阅读 · 0 评论 -
Flink流处理查询外部数据源的解决方法
Flink流处理查询外部数据源的解决方法在流处理中,常涉及到与外部数据源的交互。例如在实时数仓的设计中通常是流式采集用户的浏览、下单等行为,但是用户信息,SKU、SPU等信息因为是维度表不适合通过流的方式读取(流中无法进行随意消费),而是存储在外部数据库例如Hbase、ClieckHouse的实时性能比较高的分布式数据库中。但是与外部数据源的查询常常是流式计算的瓶颈,下面给出了两种优化方案:旁路缓存技术和Flink提供的异步查询方式。方案1: 加入旁路缓存模式 (cache-aside-pattern)原创 2021-03-19 20:43:13 · 2047 阅读 · 1 评论 -
Flink实时数仓DWM层: 订单宽表
Flink实时数仓DWM层: 订单宽表需求分析与思路订单是统计分析的重要的对象,围绕订单有很多的维度统计需求,比如用户、地区、商品、品类、品牌等等。为了之后统计计算更加方便,减少大表之间的关联,所以在实时计算过程中将围绕订单的相关数据整合成为一张订单的宽表。那究竟哪些数据需要和订单整合在一起?由于在之前的操作已经把数据分拆成了事实数据和维度数据,事实数据(绿色)进入kafka数据流(DWD层)中,维度数据(蓝色)进入hbase中长期保存。那么我们在DWM层中要把实时和维度数据进行整合关联在一起,原创 2021-03-17 20:20:17 · 1367 阅读 · 2 评论 -
Flink实时数仓DWM层: 跳出明细
DWM层: 跳出明细1. 需求分析与思路1.1 什么是跳出跳出就是用户成功访问了网站的入口页面(例如首页)后就退出,不再继续访问网站的其它页面。跳出率计算公式:跳出率=访问一个页面后离开网站的次数 / 总访问次数观察关键词的跳出率就可以得知用户对网站内容的认可,或者说你的网站是否对用户有吸引力。而网站的内容是否能够对用户有所帮助留住用户也直接可以在跳出率中看出来,所以跳出率是衡量网站内容质量的重要标准。关注跳出率,可以看出引流过来的访客是否能很快的被吸引,渠道引流过来的用户之间的质量对比,对于原创 2021-03-17 20:15:42 · 857 阅读 · 0 评论 -
数仓架构图
贴上今晚的成果,数仓架构图,仅粉丝可见原创 2021-03-16 21:12:11 · 405 阅读 · 0 评论 -
Flink数据写入Hbase与Kafka
Flink数据写入Hbase与KafkaSink到Hbase导入Phoenix相关依赖<dependency> <groupId>org.apache.phoenix</groupId> <artifactId>phoenix-core</artifactId> <version>5.0.0-HBase-2.0</version></dependency><dependen原创 2021-03-16 21:10:31 · 825 阅读 · 0 评论 -
使用Flink SQL CDC读取动态配置表
Flink SQL CDC 介绍CDC 全称是Change Data Capture ,它是一个比较广义的概念,只要能捕获变更的数据,我们都可以称为 CDC 。业界主要有基于查询的 CDC 和基于日志的 CDC ,可以从下面表格对比他们功能和差异点。传统的数据同步场景 :缺点: 采集端组件过多导致维护繁杂改进后的架构:Flink社区开发了 flink-cdc-connectors 组件,这是一个可以直接从 MySQL、PostgreSQL 等数据库直接读取全量数据和增量变更数据的 sourc原创 2021-03-15 20:43:39 · 3286 阅读 · 0 评论 -
实时数仓DWD层业务数据处理解决思路
DWD层业务数据在实时数仓中业务数据的变化,可以通过Maxwell或者canal等工具采集到,采用MaxWell将全部数据统一写入一个Topic中, 这些数据包括业务数据,也包含维度数据,这样显然不利于日后的数据处理,所以这个功能是从Kafka的业务数据ODS层读取数据,经过处理后,将维度数据保存到Hbase,将事实数据写回Kafka作为业务数据的DWD层。DWD层主要任务接收Kafka数据,过滤空值数据实现动态分流功能把分好的流保存到对应表、主题中动态分流功能由于采用MaxWell等工具原创 2021-03-15 20:34:12 · 1076 阅读 · 0 评论 -
实时数仓使用Flink识别新老客户
识别新老客户识别新老客户本身客户端业务有新老用户的标识,但是不够准确,需要用实时计算再次确认(不涉及业务操作,只是单纯的做个状态确认)。数据拆分不同数据写入Kafka不同的Topic中1. 封装kafka工具类public class MyKafkaUtil { static Properties props = new Properties(); static { props.setProperty("bootstrap.servers","hadoop原创 2021-03-15 20:19:57 · 1152 阅读 · 0 评论 -
实时数仓分层及每层职能
实时数仓分层建设实时数仓的目的,主要是增加数据计算的复用性。每次新增加统计需求时,不至于从原始数据进行计算,而是从半成品继续加工而成。每层职能分层数据描述生成计算工具存储媒介ODS原始数据,日志和业务数据日志服务器,maxwellkafkaDWD根据数据对象为单位进行分流,比如订单、页面访问等等。FLINKkafkaDWM对于部分数据对象进行进一步加工,比如独立访问、跳出行为。依旧是明细数据。FLINKkafkaDIM维度数据FLINK原创 2021-03-15 19:53:26 · 1181 阅读 · 0 评论 -
使用maxwell实时采集mysql数据
使用maxwell实时采集mysql数据1. 什么是maxwellmaxwell 是由美国zendesk开源,用java编写的Mysql实时抓取软件。 其抓取的原理也是基于binlog。2. Maxwell与canal的对比Maxwell 没有 Canal那种server+client模式,只有一个server把数据发送到消息队列或redis。Maxwell 有一个亮点功能,就是Canal只能抓取最新数据,对已存在的历史数据没有办法处理。而Maxwell有一个bootstrap功能,可以直接引导原创 2021-03-14 00:06:42 · 2005 阅读 · 0 评论 -
配置canal实时将变化数据Sink到Kafka
配置canal实时将变化数据Sink到Kafkacanal server配置vim /opt/module/canal/conf/重点关注以下配置:canal.ip = hadoop162 # canal服务器绑定ip地址canal.port = 11111 # canal端口号, 将来客户端通过这个端口号可以读到数据canal.zkServers = hadoop102:2181,hadoop103:2181,hadoop104:2181 # zk地址, 用来管理canal的高原创 2021-03-13 23:59:44 · 274 阅读 · 0 评论 -
离线计算与实时计算的对比
离线计算与实时计算的比较离线需求就是在计算开始前已知所有输入数据,输入数据不会产生变化,一般计算量级较大,计算时间也较长。例如今天早上一点,把昨天累积的日志,计算出所需结果。最经典的就是Hadoop的MapReduce方式;一般是根据前一日的数据生成报表,虽然统计指标、报表繁多,但是对时效性不敏感。从技术操作的角度,这部分属于批处理的操作。即根据确定范围的数据一次性计算。实时需求输入数据是可以以序列化的方式一个个输入并进行处理的,也就是说在开始的时候并不需要知道所有的输入数据。与离线计算相比,运行原创 2021-03-13 23:23:07 · 4064 阅读 · 0 评论 -
实时计算与实时数仓对比
实时计算与实时数仓比较普通的实时计算优先考虑时效性,所以从数据源采集经过实时计算直接得到结果。如此做时效性更好,但是弊端是由于计算过程中的中间结果没有沉淀下来,所以当面对大量实时需求的时候,计算的复用性较差,开发成本随着需求增加直线上升。实时数仓基于一定的数据仓库理念,对数据处理流程进行规划、分层,目的是提高数据的复用性。...原创 2021-03-13 23:19:48 · 440 阅读 · 0 评论 -
保存到ES的工具类
保存到ES的工具类import java.utilimport java.util.Objectsimport io.searchbox.client.{JestClient, JestClientFactory}import io.searchbox.client.config.HttpClientConfigimport io.searchbox.core.{Bulk, BulkResult, Index}import collection.JavaConversions._objec原创 2021-02-25 16:31:01 · 331 阅读 · 0 评论 -
实时灵活分析需求(双流join)
一、实时灵活分析需求1.需求分析的结果涉及全文检索,需要使用ES存储数据!搜索的是商品明细,需要将商品的明细导入到ES!商品明细:商品明细,男女比例,年龄比例 从Mysql的业务数据中取数据!数据源: Mysql的业务数据!为了得到明细数据,需要三张表!select order_detail中的详情, age, genderfrom order_detail od left join order_info oi on od.order_id = oi.原创 2021-02-25 16:15:23 · 739 阅读 · 0 评论 -
实时预警需求分析
实时预警需求分析实时预警,是一种经常出现在实时计算中的业务类型。根据日志数据中系统报错异常,或者用户行为异常的检测,产生对应预警日志。预警日志通过图形化界面的展示,可以提醒监控方,需要及时核查问题,并采取应对措施。一、需求说明需求:同一设备,5分钟内三次及以上用不同账号登录并领取优惠劵,并且过程中没有浏览商品。达到以上要求则产生一条预警日志。并且同一设备,每分钟只记录一次预警。预警日志格式二、整体流程设计框架流程开发思路从kafka中消费数据,根据条件进行过滤筛选,生成预警日志;预警原创 2021-02-25 16:11:05 · 1596 阅读 · 0 评论 -
杂记
杂记MySQL相关show variables like ‘%变量名%’查看mysql变量select version查询mysql版本号mysql 默认安装目录 /var/lib/mysqlmysqlbinglog 查看mysql的binglog日志信息Java相关MVC范式:用户发送请求,controller处理请求,service,Dao(Mapper),发送sql查询数据库,封装为bean,controller相应客户端请求...原创 2021-02-19 20:49:21 · 84 阅读 · 0 评论 -
实时GMV需求思路
实时GMV需求思路1.需求分析交易额(GMV): 日GMV,月GMV,季度GMV,年GMV!GMV(毛销售额)的计算,不同的企业有不同的计算标准!业界普遍的计算: 将每日订单的成交(订单生成)总额的总和,统计得到日GMV!需要的数据: 每日生成的订单 订单属于业务数据! 生成: 用户通过APP下单,下单时向业务服务器(web应用)发送下单请求,web应用处理请求,将用户的订单数据,写入到Mysql! 在mysql中模拟业务数据,模拟下单!计算的过原创 2021-02-19 20:43:08 · 859 阅读 · 0 评论 -
MySQL定义函数和存储过程
MySQL定义函数和存储过程-- 默认为off ,等价于 0 -- 开启binlog日志记录时,是否信任 创建函数 -- 默认情况下,为了防止主机和从机中定义的函数不一致,不允许用户自定义函数-- 如果希望自定义函数,必须将 log_bin_trust_function_creators=on(1)SHOW VARIABLES LIKE '%log_bin_trust_function_creators%'set global log_bin_trust_function_creators=1原创 2021-02-19 20:40:01 · 300 阅读 · 0 评论 -
MySQL之binlog的记录格式
MySQL之binlog的记录格式在MySQL的配置文件(Linux: /etc/my.cnf , Windows: \my.ini)下,修改配置在[mysqld] 区块设置/添加log-bin=mysql-bin, 这个表示binlog日志的前缀是mysql-bin,以后生成的日志文件就是 mysql-bin.123456 的文件后面的数字按顺序生成。每次mysql重启或者到达单个文件大小的阈值时,新生一个文件,按顺序编号。Binlog的分类设置MySQL Binlog的格式,那就是有三种,分原创 2021-02-19 20:14:47 · 323 阅读 · 0 评论 -
使用canal实时读取mysql变更数据保存到kafka消息队列
使用canal实时读取mysql变更数据保存到kafka消息队列 订阅canal server中的binlog数据,之后解析后,以json格式发送到kafka! ① canal client 每次从canal server获取的数据会封装在一个Message对象中,一个Message对象包含了这次拉取的多条sql语句写操作 的结果! 每个Message中包含了一个 List<Entry> ②每个Entry代表一个sql语句影响的行, 包含了这个sql语句操作的表名,这个Ent原创 2021-02-19 20:04:14 · 858 阅读 · 3 评论 -
canal简介及安装部署
canal简介一、什么是 Canal阿里巴巴B2B公司,因为业务的特性,卖家主要集中在国内,买家主要集中在国外,所以衍生出了杭州和美国异地机房的需求,从2010年开始,阿里系公司开始逐步的尝试基于数据库的日志解析,获取增量变更进行同步,由此衍生出了增量订阅&消费的业务。、Canal是用Java开发的基于数据库增量日志解析,提供增量数据订阅&消费的中间件。目前,Canal主要支持了MySQL的Binlog解析,解析完成后才利用Canal Client 用来处理获得的相关数据。(数据库同步原创 2021-02-19 19:52:54 · 1075 阅读 · 2 评论 -
使用Spring创建接口发布实时日活数据
这里写自定义目录标题使用Spring创建接口发布实时日活数据一、日活数据查询接口相关要求1.1 访问路径1.2 要求数据格式二、搭建SpringWeb发布工程2.1 创建工程2.2 配置文件2.2.1 pom.xml2.2.2 application.properties三、 代码实现3.1 数据层3.1.1 数据层mapper3.1.2 封装每小时日活的方法类3.1.3 数据层 实现配置3.2 service层3.2.1 service层接口类3.2.2 service层实现类3.3 controller原创 2021-02-04 19:15:09 · 497 阅读 · 0 评论 -
在spring中创建kafak生产者
在spring中创建kafak生产者1. Spring中添加kafka的依赖 <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> </dependency>2. 配置文件中添加kafka的连接信息server.p原创 2021-02-02 21:09:26 · 304 阅读 · 0 评论 -
Nginx简介与安装部署
目录1. Nginx简介2. Nginx功能3. 安装4. 修改配置文件1. Nginx简介Nginx (“engine x”) 是一个高性能的HTTP和反向代理服务器,特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。2. Nginx功能1)反向代理什么是反向代理?先看什么是正向代理再看什么是反向代理2)负载均衡负载均衡策略:轮询、权重、备机3)动静分离3.原创 2021-02-02 21:02:59 · 134 阅读 · 0 评论 -
使用SparkStreaming实现的三个实时需求
三个需求需求一:广告黑名单需求二:广告点击量实时统计需求三:最近一小时广告点击量一、构建基础类在基础类中封装三个需求都会用到的方法和属性。使用到的技术点:抽象类SparkStreaming应用上下文StreamingContext抽象控制构建流式应用的DStreamTransFormatpackage com.saprkstreaming.exec.appimport com.saprkstreaming.exec.bean.AdsInfoimport org.apac原创 2021-01-29 23:06:10 · 495 阅读 · 0 评论 -
获取kafka和redis连接的工具类
1)PropertiesUtil 获取配置文件的工具类import java.io.InputStreamReaderimport java.util.Propertiesobject PropertiesUtil { def load(propertieName:String): Properties ={ val prop=new Properties() prop.load(new InputStreamReader(Thread.currentThread().g原创 2021-02-02 20:38:38 · 351 阅读 · 0 评论 -
实时日活数据分析
1. 代码思路1)消费Kafka中的数据;2)利用Redis过滤当日已经计入的日活设备;3)把每批次新增的当日日活信息保存到HBase中;4)从HBase中查询出数据,发布成数据接口,通可视化工程调用。2. 配置相关1)config.properties# Kafka配置kafka.broker.list=hadoop102:9092,hadoop103:9092,hadoop104:9092# Redis配置redis.host=hadoop102redis.port=63792原创 2021-02-02 20:35:01 · 1565 阅读 · 0 评论