大杂烩"/>
大数据学习大杂烩
- MapReduce的任务切片机制
- Redis的五种数据结构 String List Hash Set Zset
- Redis的缓存雪崩,缓存穿透,缓存击穿
- 大数据如何保证数据的准确性
- 新增用户数和活跃用户数的区别
#每日新增用户
select log_date,count(uid)
from (
select uid,min(login_date) log_date
from tb
group by uid
) t1
group by log_date#活跃用户
select login_date,count(distinct uid)
from tb
group by login_date
- flink常用的算子:
map(MapFunction<T, R> mapper)
flatMap(FlatMapFunction<T, R> flatMapper)
keyBy(KeySelector<T, K> key)
broadcast(final MapStateDescriptor<?, ?>... broadcastStateDescriptors)
rebalance()
rescale()
process(ProcessFunction<T, R> processFunction)
filter(FilterFunction<T> filter)
coGroup(DataStream<T2> otherStream)
join(DataStream<T2> otherStream)
union(DataStream<T>... streams)
connect(DataStream<R> dataStream)
- Flink中IntervalJoin的实现 Flink SQL 知其所以然(五)| 流 join 很难嘛?(下)_科技通讯_闲暇巴
- Flink常用的状态后端:MemoryStateBackend、FsStateBackend、RocksDBStateBackend 3种Flink State Backend | 你该用哪个? - 知乎
- 反射的四种实现方式:
//1
ClassLoader loader = ClassLoader loader=Thread.currentThread().getContextClassLoader();
Class clazz = loader.loadClass(类的全路径)
//2
类 类实例 = new 类()
Class clazz = 类实例.getClass()
//3
类.class()
//4
Class.forname(类全路径)
- Java四种引用
- 强引用,内若不够,直接抛异常 Obj obj = new Obj()
- 软引用,内存不足时,才会回收 SoftReference<Obj> sr = new SoftReference<Obj>(obj);
- 弱引用,JVM进行垃圾回收时,回收 WeakReference<Obj> sr = new WeakReference<Obj>(obj);
- 虚引用,任何时候都有可能被回收 PhantomReference<String> pr = new PhantomReference<String>();
- Flink的aggregateFunction 和reduceFunction的区别
aggregateFunction函数需要实现4个方法,分别是accumulator(),add(),getResult(),merge()函数Flink中Window详解之Window的聚合函数AggregateFunction_乀曼巴丶小飞侠的博客-CSDN博客
reduceFunction函数:按照key进行分组并聚合
processFunction:重写open()方法和processElement方法
flinkcdc使用:MySQL CDC 连接器 — CDC Connectors for Apache Flink® documentation
flink保姆级教程先码后看:Flink保姆级教程,超全五万字,学习与面试收藏这一篇就够了_数据人生coding的博客-CSDN博客_flink 学习
数据倾斜例子1:公司商品大促期间,某个店铺单品PV量达几千万,店铺pv量达上千万以上,根据商品和店铺PV量计算IPV量时,发生数据倾斜。
解决办法:配置下面的参数与SQL一起提交,数据倾斜时负载均衡。
数据倾斜例子2:用户登录表中,有大量未登录用户访问记录(user_id)字段为null,如果直接和用户表进行关联对的话,会产生倾斜。
可以通过判断user_id为null,可通过连接随机数。
数据倾斜例子3:count(distinct)数据倾斜,统计一类商品访问的uv,可以先按照user_id和sku_code进行分组,然后再分组聚合。
统计指标:
1.1/7/30日消费金额top100
2.本周消费金额超过100元的用户数,分析筛选高价值用户
3.本月每类商品用户平均值
4.统计前一天各类商品销售额
5.1/7/30日访问人数
6.各类商品销售的金额
7.最近30日用户注册数
8.各省份最近1日下单人数
9.昨日加购物车今日下单人数
10.1/7/30日活跃用户数
数据质量:完整性,准确性,及时性,一致性
唯一性判断:保证主键或某些字段的唯一性,防止数据重复导致和其他表join之后数据翻倍,导致最终统计数据偏大
通过
select
count(*),
count(distinct order_no)
from ods.xx_order;
count(order_no) count(distinct order_no)若相等,则说明order_no值是表内唯一的,否则说明order_no表内不唯一,表数据存在问题
非空判断:保证重要字段非空
select
count(*)
from ods.xx_order where order_no is null;
枚举类型判断:保证枚举字段都在预期范围之内,防止业务脏数据,导致最终统计结果出现遗漏/多余的数据类型
比如判断ods层订单表中shop_type字段中所有枚举类型是否符合预期,
select shop_type from ods.xx_order group by shop_type
数据有效性判断:判断数据格式是否满足预期,防止字段的数据格式不正确导致数据统计的错误和缺失。常见的日期格式yyyymmdd
完整性策略适合ods层,从源头发现并解决数据不合理问题,避免脏数据进入下游,数据污染扩大
数据准确性
自身检查:检查数值类指标大于0,比例类指标介于0-1之间
select count(pay_price) from dw.dws_xx_order where par =20211025 and pay_price < 0;
表内数据横向对比:表内数据恒星对比:针对任何一家店铺的任意一款商品,都满足订单数>=下单人数
select kdt_id,goods_id,count(order_no),count(distinct buyer_id) from dw.dws_xx_order where par='20210125'
group by kdt_id,goods_id having count(order_no) < count(distinct buyer_id);
code review
1) 关联关系&过滤条件
关联表适用outer join 还是 join ,要看数据是否要做过滤
关联关系on字句,左右值类型是否一致
关联关系如果是1:1 两张表的关联键是否唯一,如果不唯一,会产生笛卡尔积,导致数据膨胀
2)指标的统计口径处理
可加累计指标:支付金额,浏览量
不可加指标:访客数
3)insert插入数据,是否使用overwrite,没使用overwtite,导致数据翻倍
插入的顺序和被插入的顺序是否完全一致,不一致,导致数据对应不上
关注被除数是0的特殊场景,前端统一展示的是"-"
- flink的重启策略:Flink 重启策略_Jeremy_Lee123的博客-CSDN博客_flink怎么重启
- flink组成JobManager,TaskManager,Client,客户端提交Job到JobManager,JobManager将任务进行拆分,将任务部署到TaskManager进行执行,JobManager主要负责接受客户端发送的Job,调度 Job,协调 checkpoints,故障恢复。TaskManager负责具体的Task的执行,一个TaskManger可以由多个Task Slot组成,一个TaskSlot可以执行一个任务链。任务并行度=TM个数*每一个TM的slot数 Flink分布式运行环境之作业链和资源组_Jeremy_Lee123的博客-CSDN博客
- TaskManager并行度设置,taskmanager.numberOfTaskSlots 默认值为1,可以通过如下方式修改并行度【17】Flink 之 并行度(Parallel)及设置_大小宝的博客-CSDN博客_flink的并行度
- Operator Level(算子层次)
- Execution Environment Level(执行环境层次)
- Client Level(客户端层次)
- System Level(系统层次)
- flink反压:影响checkpoint的时长和state的大小
前者是因为 checkpoint barrier 是不会越过普通数据的,数据处理被阻塞也会导致 checkpoint barrier 流经整个数据管道的时长变长,因而 checkpoint 总体时间(End to End Duration)变长。
意思是反压导致数据处理能力变慢,导致在规定的时间内checkpoint没有完成,checkpoint失败。
后者是因为为保证 EOS(Exactly-Once-Semantics,准确一次),对于有两个以上输入管道的 Operator,checkpoint barrier 需要对齐(Alignment),接受到较快的输入管道的 barrier 后,它后面数据会被缓存起来但不处理,直到较慢的输入管道的 barrier 也到达,这些被缓存的数据会被放到state 里面,导致 checkpoint 变大。
可以通过如下两种方式来监控
- 通过 Flink Web UI 自带的反压监控面板;
- 通过 Flink Task Metrics。
参考:如何分析及处理 Flink 反压? - 知乎
- Flink中process函数的使用:
process(ProcessFunction<T, R> processFunction),重写里面的processElement方法 public abstract void processElement(I value, Context ctx, Collector<O> out) throws Exception;
- Flink大状态的调优:Flink大状态与Checkpint调优 - 腾讯云开发者社区-腾讯云
- Flink的两阶段提交是怎么回事:
- 实时数仓建设好文参考:20000字详解大厂实时数仓建设(好文收藏) - 腾讯云开发者社区-腾讯云
- FlinkRocksDB的介绍:「Flink」RocksDB介绍以及Flink对RocksDB的支持_哥伦布112的博客-CSDN博客_flink rocksdb 需要安装吗
- Flink的任务失败重启策略:RestartStrategies.fixedDelayRestart,固定间隔延迟重启策略,
RestartStrategies.failureRateRestart,故障率重启策略,RestartStrategies.fallBackRestart,默认重启策略,RestartStrategies.exponentialDelayRestart,指数延迟重启策略尝试无限重启作业,将延迟增加到最大延迟,RestartStrategies.noRestart,无重启策略。参考文章和Flink1.13源代码
- Flink的内存模型,process内存=flink内存+Jvm元空间128M+JVM执行开销,flink内存包括堆内内存和堆外内存,堆内内存由框架内存+Task堆内内存 堆外内存由 框架内存+Task堆外内存+网络缓冲(flink内存*0.1) 托管内存=flink内存*0.4 FLINK内存模型
- Flink的分区策略
- Flink状态State管理、后端存储、Checkpoint
- Flink的分区策略:RescalePartitioner BinaryHashPartitioner RebalancePartitioner KeyGroupStreamPartitioner GlobalPartitioner ForwardPartitioner ShufflePartitioner BroadcasePartitioner 自定义Partitioner集成StreamPartitioner
- Flink常见的面试题
- Hive on Spark 和Spark on Hive的区别
- Hbase面试题
- Hive的优化
- kafka为什么吞吐量大速度快
- spark的内存模型
- Flink sql的优化
- Flink的数据倾斜
更多推荐
大数据学习大杂烩
发布评论