2023大数据面试总结

文章目录

  • Flink(SQL相关后面专题补充)
    • 1. 把状态后端从FileSystem改为RocksDB后,Flink任务状态存储会发生哪些变化?
    • 2. Flink SQL API State TTL 的过期机制是 onCreateAndUpdate 还是 onReadAndWrite?
    • 3. watermark 到底是干啥的?应用场景?
    • 4. 一个flink任务中可以既有事件时间窗口,又有处理时间窗口吗?
    • 5. Flink为什么强调function实现时,实例化的变量要实现 serializable接口?
    • 6. Flink 提交作业的流程?以及与yarn的互动?
    • 7. Operator Chains了解吗?
    • 8. 10个int以数组的形式保存,保存在什么状态好?VlaueState还是 ListState?存在哪个的性能比较好?
    • 9. 一个窗口,现在只取第一帧和最后一帧,如何实现?
    • 10. 背压的原理?解决办法?
    • 11. 遇到状态放不下的场景怎么办?
    • 12. 使用flink统计订单表的GMV(商品交易总额),如果mysql中的数据出现错误,之后在mysql中做数据的修改操作,那么flink程序如何保证GMV的正确性,你们是如何解决?
    • 13. 开窗函数有哪些?
    • 14. 没有数据流的时候,窗口存在吗
    • 15. 1小时的滚动窗口,一小时处理一次的压力比较大想让他5分钟处理一次.怎么办?(问石林)
    • 16. 两个流先后顺序不确定,到达的间隔也不确定,如何拼接成宽表?(问石林)
    • 17. 为什么使用维表?什么情况下使用?
    • 18. Flink维表关联怎么做的?(问石林)
    • 19.
    • 20.

Flink(SQL相关后面专题补充)

1. 把状态后端从FileSystem改为RocksDB后,Flink任务状态存储会发生哪些变化?

  1. Flink任务中的operator-state。无论用户配置哪种状态后端(无论是memory, filesystem,rocksdb),都是使用DefaultOperatorStateBackend 来管理的, 状态数据都存储在内存中,做Checkpoint时同步到远程文件存储中(比如HDFS)。
  2. Flink任务中的keyed-state。用户在配置rocksdb时,会使用 RocksdbKeyedStateBackend 去管理状态;用户在配置memory,filesystem时,会使用HeapKeyedStateBackend去管理状态。因此就有了这个问题的结论,配置 rocksdb只会影响keyed-state存储的方式和地方,operator-state不会受到影响。

2. Flink SQL API State TTL 的过期机制是 onCreateAndUpdate 还是 onReadAndWrite?

  1. 结论:Flink SQL API State TTL 的过期机制目前只支持 onCreateAndUpdate,DataStream API 两个都支持。
  2. 剖析:
    • onCreateAndUpdate:是在创建State和更新State时【更新StateTTL】
    • onReadAndWrite:是在访问State和写入State时【更新StateTTL】
  3. 实际踩坑场景:Flink SQL Deduplicate 写法,row_number partition by user_id
    order by proctimeasc,此SQL最后生成的算子只会在第一条数据来的时候更新
    state,后续访问不会更新stateTTL,因此state会在用户设置的stateTTL时间之后过期。

3. watermark 到底是干啥的?应用场景?

  • 标识flink任务的事件时间进度,从而能够推动事件时间窗口的触发、计算
  • 解决事件时间窗口的乱序问题

4. 一个flink任务中可以既有事件时间窗口,又有处理时间窗口吗?

结论:一个 Flink 任务可以同时有事件时间窗口,又有处理时间窗口。

两个角度说明:

  1. 我们其实没有必要把一个Flink任务和某种特定的时间语义进行绑定。对于事件时间窗口来说,我们只要给它watermark,能让watermark一直往前推进,让事件时间窗口能够持续触发计算就行。对于处理时间来说更简单,只要窗口算子按照本地时间按照固定的时间间隔进行触发就行。无论哪种时间窗口,主要满足时间窗口的触发条件就行。
  2. Flink的实现上来说也是支持的。Flink是使用一个叫做TimerService的组件来管理
    timer的,我们可以同时注册事件时间和处理时间的timer,Flink会自行判断timer是否满足触发条件,如果是,则回调窗口处理函数进行计算。

5. Flink为什么强调function实现时,实例化的变量要实现 serializable接口?

其实这个问题可以延伸成3个问题:

  1. 为什么Flink要用到Java序列化机制。和Flink类型系统的数据序列化机制的用途有啥区别?
  2. 非实例化的变量没有实现Serializable为啥就不报错,实例化就报错?
  3. 为啥加transient就不报错?

上面3个问题的答案如下:

  1. Flink写的函数式编程代码或者说闭包,需要Java序列化从JobManager分发到 TaskManager,而Flink类型系统的数据序列化机制是为了分发数据,不是分发代码,可以用非Java的序列化机制,比如Kyro。
  2. 编译期不做序列化,所以不实现Serializable不会报错,但是运行期会执行序列化动
    作,没实现Serializable接口的就报错了
  3. Flink DataStreamAPI的Function作为闭包在网络传输,必须采用Java序列化, 所以要通过Serializable接口标记,根据Java序列化的规定,内部成员变量要么都可序列化,要么通过transient关键字跳过序列化,否则Java序列化的时候会报错。静态变量不参与序列化,所以不用加transient。

6. Flink 提交作业的流程?以及与yarn的互动?

7. Operator Chains了解吗?

为了更高效地分布式执行,Flink 会尽可能地将operator的subtask链接(chain)在一起形成task。每个task在一个线程中执行。

将operators链接成task是非常有效的优化:它能减少线程之间的切换,减少消息的序列化/反序列化,减少数据在缓冲区的交换,减少了延迟的同时提高整体的吞吐量。这就是Operator Chains(算子链)。

8. 10个int以数组的形式保存,保存在什么状态好?VlaueState还是 ListState?存在哪个的性能比较好?

ValueState[Array[Int]] update形式。

ListState[Int]:add形式添加。

对于操控来说ListState方便取值与更改。

按键分区状态(Keyed State)选择ValueState ListState。
算子状态(Operator State)选择ListState。

9. 一个窗口,现在只取第一帧和最后一帧,如何实现?

10. 背压的原理?解决办法?

11. 遇到状态放不下的场景怎么办?

有时候需要求uv,内存或者状态中存过多数据,导致压力巨大,这个时候可以结合 Redis或者布隆过滤器来去重。

注意:布隆过滤器存在非常小的误判几率,不能判断某个元素一定百分之百存在,所以只能用在允许有少量误判的场景,不能用在需要100%精确判断存在的场景。

12. 使用flink统计订单表的GMV(商品交易总额),如果mysql中的数据出现错误,之后在mysql中做数据的修改操作,那么flink程序如何保证GMV的正确性,你们是如何解决?

CDC 动态捕捉MySQL数据变化,实时处理后数据入湖-Hudi,MOR 机制 快速对下游可见。

另:一般也会有离线Job来恢复和完善实时数据。

13. 开窗函数有哪些?

  • Flink SQL:
    • 待补充
  • Flink Stream:
    • ReduceFunction、AggregateFunction:窗口不维护原始数据,只维护中间结果。每次基于中间结果和增量数据进行聚合
    • ProcessWindowFunction:维护全部原始数据,窗口触发时进行全量聚合

14. 没有数据流的时候,窗口存在吗

不存在,没有数据,窗口不产生

15. 1小时的滚动窗口,一小时处理一次的压力比较大想让他5分钟处理一次.怎么办?(问石林)

自定义触发器,4个方法,一个Close三个用于控制计算和输出

16. 两个流先后顺序不确定,到达的间隔也不确定,如何拼接成宽表?(问石林)

因为无法确定先到的是哪个流,所以没法用 internal join?因为这个需要指定拼接的驱动主流?
在这里插入图片描述

17. 为什么使用维表?什么情况下使用?

在一些数据量较小,且变化不大的场景下使用维表(如省份信息关联查询拼接)

18. Flink维表关联怎么做的?(问石林)

1、async io
2、broadcast
3、async io + cache
4、open方法中读取,然后定时线程刷新,缓存更新是先删除,之后再来一条之后再负责写入缓存

19.

20.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/77124.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用IntelliJ IDEA本地启动调试Flink流计算工程的2个异常解决

记录:471 场景:使用IntelliJ IDEA本地启动调试Flink流计算时,报错一:加载DataStream报错java.lang.ClassNotFoundException。报错二:No ExecutorFactory found to execute the application。 版本:JDK 1.…

【Java基础篇 | 类和对象】--- 聊聊什么是内部类

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【JavaSE_primary】 本专栏旨在分享学习Java的一点学习心得,欢迎大家在评论区讨论💌 前言 当一个事物的内部&…

Shell编程之定时任务

什么是定时任务 顾名思义,定时任务指的就是在指定/特定的时间进行工作,例如备份/归档数据、清理临时文件等。 在 Linux 中,可以使用 cron 定时器来定期执行任务。cron 是一个在后台运行的守护进程,用于根据指定的时间表自动执行任…

学习笔记|小数点控制原理|数码管动态显示|段码跟位码|STC32G单片机视频开发教程(冲哥)|第十集:数码管动态显示

文章目录 1.数码管动态刷新的原理2.动态刷新原理3.8位数码管同时点亮新建一个数组选择每个位需要显示的内容实战小练:简易10秒免单计数器将刷新动作写成函数 课后练习: 1.数码管动态刷新的原理 上述图片引用自:51单片机初学2-数码管动态扫描 用一排端口来…

UG\NX CAM二次开发 设置2D工序部件边界 UF_CAMBND_append_bnd_from_curve

文章作者:代工 来源网站:NX CAM二次开发专栏 简介: UG\NX CAM二次开发 设置2D工序部件边界 UF_CAMBND_append_bnd_from_curve 效果: 代码: static int init_proc(UF_UI_selection_p_t select, void* user_data) { int errorCode = 0; int num_triples = 1; …

【echarts】legend长度过长,内容过多导致换行怎么办?

通过设置翻页即可解决该问题 关键代码: type: scroll,// pageFormatter: , // 隐藏翻页的数字pageButtonItemGap: 2, // 翻页按钮的两个之间的间距pageIconColor: #6495ed, // 翻页下一页的三角按钮颜色pageIconInactiveColor: #aaa, // 翻页(即翻页到…

vue三个点…运算符时报错 Syntax Error: Unexpected token

出现以下问题报错: 解决: 在项目根目录新建一个名为.babelrc的文件 {"presets": ["stage-2"] }

docker 部署 node.js(express) 服务

1、在 express 项目根目录下新增 Dockerfile 文件,内容如下: 创建服务容器的方法,可以根据自己的情况选择: 1、以下示例为宿主机没有安装 node 环境的写法; 2、先在本地构建包含 node 和 express 的基础镜像&#xff0…

视频监控/安防监控/AI视频分析/边缘计算/TSINGSEE青犀AI算法智慧仓储解决方案

随着全球经济与科学技术的双重推动,我国的仓储管理已经进入了高速发展时期,物流仓储也由简单的储藏仓库向智能化仓储转变。TSINGSEE青犀AI智慧仓储解决方案是利用先进的信息技术和物联网技术来提高仓储管理效率、降低成本的一种仓储管理模式。 方案功能 …

【Linux学习笔记】基础命令2

1. rmdir指令 && rm指令1.1. 基础概念1.2. 命令用法1.2.1. rmdir命令1.2.2. rm命令1.2.3. rm命令的注意事项 2. man命令3. cp指令3.1. cp指令基础概念3.2. cp命令的用法 4. mv命令5. cat命令6. more命令 && less命令6.1. more命令6.2. less命令 7. head命令和t…

基于springboot+vue的大学社团管理系统(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

【算法】反悔贪心

文章目录 反悔贪心力扣题目列表630. 课程表 III871. 最低加油次数LCP 30. 魔塔游戏2813. 子序列最大优雅度 洛谷题目列表P2949 [USACO09OPEN] Work Scheduling GP1209 [USACO1.3] 修理牛棚 Barn RepairP2123 皇后游戏(🚹省选/NOI− TODO) 相关…

哪里可以了解轻量的工作流引擎?

如果想要实现高效率的办公,可以使用轻量的工作流引擎低代码技术平台。随着工作量日益繁重起来,传统的办公制作方式已经无法满足现实需要的,采用轻量级的表格制作工具,就能在无形中缓解办公压力,创造更高效、灵活、优质…

【Java】线程池八股文一

日常工作中有用到线程池吗?什么是线程池?为什么要使用线程池? 作为 JUC 包下的门面担当,线程池是名副其实的 JUC 一哥,不了解线程池,那说明你对 JUC 包其他工具也了解的不咋样吧,对 JUC 没深入…

成绩定级脚本(Python)

成绩评定脚本 写一个成绩评定的python脚本,实现用户输入成绩,由脚本来为成绩评级: #成绩评定脚本.pyscoreinput("please input your score:") if int(score)> 90:print("A") elif int(score)> 80:print("B&…

error:03000086:digital envelope routines::initialization error

项目背景 前端vue项目启动突然报错error:03000086:digital envelope routines::initialization error 我用的开发工具是vscode,node版本是v18.17.0 前端项目版本如下↓ 具体报错如下↓ 报错原因 node版本过高 解决方法 1输入命令 $env:NODE_OPTIONS"--op…

【Redis】Lua脚本在Redis中的基本使用及其原子性保证原理

文章目录 背景一、Eval二、EvalSHA三、Redis 对 Lua 脚本的管理3.1 script flush3.2 script exists3.3 script load3.4 script kill 四、Lua在Redis中原子性执行的原理 背景 Lua 本身是一种轻量小巧的脚本语言,在Redis2.6版本开始引入了对Lua脚本的支持。通过在服务…

社群团购对接,【概率思维】可以增加你做项目的成功率!

社群团购对接,【概率思维】可以增加你做项目的成功率! 今天来聊一个关于概率的问题,我们不管去做社群团购项目、做流量,还是做销售,我们都要有概率思维,有了这个思维以后,就可以增加你的成功率…

QT 完成登陆界面跳转到聊天室+完成学生管理系统的查找和删除功能

一、完成登陆界面跳转到聊天室 1> 项目结构 2> 源码 ① .pro ②main #include "mywnd.h" #include"chatCli.h" #include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);MyWnd w;w.show();Form f;QObject::co…

Spring-MVC的文件上传下载,及插件的使用(让项目开发更节省时间)

目录 一、概述 ( 1 ) 介绍 ( 2 ) 讲述 二、上传 三、下载 四、jrebel的使用 五、多文件上传 给我们带来什么收获 一、概述 ( 1 ) 介绍 Spring MVC的文件上传下载是指在Spring MVC框架中实现文件的上传和下载功能。文件上传是指将本地计算机上的文件上传到服务器端…