大数据面试集锦
Posted 宝哥大数据
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数据面试集锦相关的知识,希望对你有一定的参考价值。
文章目录
- 一、Linux
- 二、shell
- 三、Hadoop
- 四、zk
- 五、Flume(3件事)
- 六、Kafka (33道)
- 七、Hive(10件事)
- 八、datax
- 九、maxwell
- 十、ds 海豚调度器
- 十一、spark
- 十二、Flink
- 十三、从0到1
- 十三、数仓建模准备
- 十四、数仓建模(*****) 留存 转换率 GMV 复购 活跃
- 十五、每层做了哪些事
- 十六 、测试
一、Linux
1)常用的高级命令
top iotop ps -ef df -h natstat jmap -heap tar rpm
2)查看进程 查看端口号 查看磁盘使用情况 查看某个进程内存
ps -ef natstat df -h jmap -heap
二、shell
1、用过哪些工具
awk sed sort cut python
2、写过哪些shell脚本
1)分发脚本
2)启停脚本(掌握)
#!/bin/bash
case $1 in
"start")
for i in hadoop102 hadoop103 hadoop104
do
ssh $i "绝对路径"
done
;;
"stop")
;;
esac
3)与mysql的导入导出
mysql hdfs
datax
hdfs mysql
datax
4)数仓层级内部
ods =》 ads
3、
'' 不解析里面变量的值
"" 解析里面变量的值
嵌套 : 看谁在最外面
三、Hadoop
1、入门
1)常用端口号
2.x 50070 8088 19888 9000/8020
3.x 9870 8088 19888 9820/9000/8020
2)常用配置
2.x core-site.xml hdfs-site.xml mapred-site.xml yarn-site.xml slaves
3.x core-site.xml hdfs-site.xml mapred-site.xml yarn-site.xml workers
2、HDFS
1)hdfs 读写流程 笔试题(有没有朋友)
2)小文件的危害
(1)存储 NameNode 150字节 128g*(1024m * 1024kb*1024字节) / 150字节 = 9.1亿
(2)计算 默认切片规则,每个文件单独切片。1字节 文件 =》 1个maptask 1G
3)小文件怎么解决
(1)har归档
(2)CombineTextInputformat 把所有文件放到一起统一切片
(3)JVM重用
开始 2s
干活 3s
......
干活 3s
结束 2s
4)副本数 3个
5)块大小
1.x 64m
2.x 3.x 128m
本地 32m
企业 128m 256m 512m
块大小取决于 硬盘的读写速度
普通机械硬盘 100m/s 128m
固态硬盘普通 300m/s 256m
固态硬盘 高级 600m/s 512m
3、mr
shuffle 及其优化
map方法之后,reduce方法之前混洗的过程 叫shuffle
4、yarn
1)yarn的工作机制
2)调度器
(1)有几种
FIFO 容量 公平
(2)默认是哪个调度器
apache 容量 CDH 公平
(3)FIFO特点
先进先出 单队列 在企业中很少使用
(4)容量特点(并行度低一些)
支持多队列 优先保证先进入的任务执行 资源不够时,可以借
(5)公平特点(并行度高)
支持多队列 每个任务公平享有队列资源 资源不够时,可以借
(6)在企业中怎么选择
如果对并行度要求比较高,通常选择 公平调度器 中大型公司
如果对并行度要求不高,通常选择容量调度器 中小公司
(7)公平、容量默认几个队列
default
(8)创建多队列
hive mr spark flink
怕公司来了一个菜鸟 :递归死循环
rm -rf /
按照部门 业务线
登录 x
注册 x
订单 √
物流 √
618 1111 降级使用
四、zk
1、选举机制 半数机制
2、安装什么数台 奇数台
3、
10台服务器 安装多少zk 3台
20台服务器 安装多少zk 5台
50台服务器 安装多少zk 7台
100台服务器 安装多少zk 11台
200台服务器 安装多少zk 11台
zk台数越多好处: 可靠性高; 坏处:效率低
4、常用命令
ls get create delete deleteall
五、Flume(3件事)
1、组成
1)taildir source
(1)断点续传、多目录
(2)Apache 1.7 版本产生的 CDH 1.6版本产生的
(3)自定义source 有可能产生重复数据
(4)自身想办法: 事务
找兄弟: 下游处理 hive dwd层中 spark flink redis
2)channel
(1)file channel 磁盘 可靠性高 效率低
(2)memory channel 内存 可靠性低 效率高
(3)kafka channel kafka 磁盘 可靠性高 效率高
kafka channel》 memory channel + kafka sink
apache 1.6 版本产生的 event(header,body)
1.7时解决 bug 后续大量使用
(4)在企业中怎么选择
如果下游是kafka ,优先选择 kafka channel
如果下游不是kafka ,如果要求可靠性高,选择file channel 和钱相关
如果要求效率,选择 memory channel 普通日志
3)sink
(1)HDFS sink
控制大小 128m
控制时间 30分钟
event个数 =0 禁止使用
2、三个器
1)拦截器
ETL拦截器:判断json是否完整
时间戳拦截器:解决零点漂移问题
自定义拦截器步骤:
定义类 实现 interceptor接口 重写4个方法 初始化 关闭 单event 多event
静态内部类builder
打包 + 上传 flume/lib 在配置文件中 全类名 $builder
2)选择器
re 默认 把数据发往下一级所有通道
mu 把数据选择性发往指定通道
3)监控器
g 发现事务 尝试提交的次数远远的大于最终success 的次数
提高内存
flume-env.sh 4-6g
增加flume台数 618 1111
日志服务器配置 8g 16g
3、挂了及优化
挂了:重启
如果是memory channel 有可能丢失 数据 100个event
sink
(1)HDFS sink
控制大小 128m
控制时间 30分钟
event个数 =0 禁止使用
提高内存
flume-env.sh 4-6g
增加flume台数 618 1111
六、Kafka (33道)
1、组成 (生产者 、broker 、消费者 zk)
2、安装多少台
2 * (生产者峰值生产速率 * 副本 / 100) + 1 = 3台
3、压测:生产者峰值生产速率(50m/s ) 消费者峰值消费速率
4、副本:默认1个 生产环境 2-3个 2个居多
副本多:好处,可靠性高; 坏处 :效率低 增加存储资源
5、平均速率
100万日活 * 100条 = 1亿条
1亿条/ (24小时 * 3600s) = 1150条/s
1条日志: 0.5k - 2k 1k 1m/s
峰值:8-12点 12点 -14点 小高峰 14点-18点 19点 -24点 高峰
20m/s 30m/s
6、 日志保存多久
默认保存7天 3天
7、是否做了监控
kafka eagle manager montor
8、分区数
增加分区 可以提高并行度
期望kafka 吞吐量 100m/s t
生产峰值生产速率 20m/s tp
消费者峰值消费速率 40m/s tc
分区数:= t /min(tp, tc) = 100/ 20 = 5个分区
9、生产者分区策略
指定了分区,数据发送到指定分区
如果没有指定分区,可以指定了key,按照key的hashcode值%分区数
没有指定分区,也没有指定key,按照粘性分区
10、如果提高生产者吞吐量
1)32m缓存 =》 64m
2)批次大小16k => 32k
3)linger.ms 0 => 5-100ms
4)压缩 snappy zstd
11、如何保证数据可靠
acks:
0:生产者发送过来数据,就不管了,在生产环境中很少使用
1:生产者发送过来数据,Leader收到之后,并应答
-1:生产者发送过来数据,Leader和isr队列里面所有的follower都收齐 了,在应答
在生产环境中,如果产生的是普通日志,通常选择 1; 如果传输的是和钱相关的,选择-1
acks = -1 + 副本数 大于等于2 isr队列里面的最小副本大于等于2
12、如何保存数据不重复
幂等性(pid ,分区号, 序列号) + 事务(5个api 初始化事务、启动事务、提交事务、事务终止、offset)
13、数据有序:
单分区内
14、乱序
inflight = 5
没有幂等性时处理办法:inflight = 1
有幂等性:inflight小于等于5
15、如何做到高效读写的
1)Kafka本身是集群 可以增加分区
2)index(稀疏索引) 4k 1条索引
3)采用的顺序读写 600m/s
4)零拷贝 + 页缓存
16、删除策略
delete
压缩 key v3
17、消费数据 拉取数据
18、消费策略
range(7个分区 3个消费者)
针对每个topic 容易产生数据倾斜
roundbin(7个分区 3个消费者)
针对所有的topic
粘性
range + 粘性
roundbin + 粘性
19、再平衡条件
消费者 会每隔3s中和消费者组协调器通信1一次,如果超过45s ,
会认为消费者挂掉,触发再平衡;
如果消费者消费一批数据的时间超过了5分钟没有再拉取数据,
说明消费者挂了,会触发再平衡
20、可以指定任意位置消费
0 -----------------8999当前
--from-begining
offset 1000位置
seek(1000)
21、按照时间进行消费
12点 以后的都不用了
把时间转换为offset ,在调用seek()
22、kafka数据积压了
增加分区 同时要求消费者增加消费CPU核数
消费者增加每批次拉取的条数 默认500条 1000-3000条
增加50m => 60m
23、kafka如何提高吞吐量
1)32m缓存 =》 64m
2)批次大小16k => 32k
3)linger.ms 0 => 5-100ms
4)压缩 snappy zstd
增加分区 同时要求消费者增加消费CPU核数
消费者增加每批次拉取的条数 默认500条 1000-3000条
增加50m => 60m
24、硬盘怎么选择
选择机械硬盘 底层是顺序读写 600m/s
25、网络带宽选择
生产者峰值生产速率 30m/s
百兆带宽 (bit 1字节 = 8bit) 实际只有12.5m/s
选择千兆带宽。
26、kafka内存
默认内存1g jmap -heap 进程号 查看内存
配置 10g -15g
27、CPU 选择
32 核
28、可以服役新节点、可以退役旧节点
29、kafka挂了怎么办
正常重启 (内存 -jmap -heap 、查看磁盘 df -h、查看cpu top)
误删 :服役新节点 退役旧节点方式。
30、 多少个Topic
满足下一级所有消费者 可以适当的聚合
31、Kafka单条日志传输大小
1m
七、Hive(10件事)
1、组成
2、与mysql等关系数据库的区别
mysql hive
速度 小 快 大 查询快
数据量 小 大
除了语法接近以外,其他都不相同
3、内部表和外部表区别
删除数据: 元数据 原始数据
内部表删除数据:元数据 原始数据
外部表删除数据:元数据
在企业中,绝大多数情况,创建的是外部表;
只有自己使用的临时表,创建内部表
4、4个by
order by 全局排序 慎用 55t
sort by 排序
d by 分区 sort by + d by
c by
5、系统函数
date_add date_sub lastday next_day date_format
get_json_object concat explode nvl
6、自定义函数
自定义UDF 一进一出(一行进入,一行输出 map )
定义类 继承 G..UDF evaluate
UDTF(一进多出, flatmap)
定义类 继承 G..UDTF 重写三个方法
初始化(校验返回值类型和名称) 关闭 process(核心逻辑)
UDAF(多进一出 sum)
打包 + 上传到HDFS路径 在hive的客户端进行注册
注意事项: 自定义函数在shell脚本中使用时,一定要在函数前面加上库名
否则会报函数找不到。
7、开窗函数
over
rank 笔试题 大量出现 分组topn 排名
8、优化 (hive on spark 调优 小文件 数据倾斜 谓词下推 mapjoin )
1)mapjoin默认打开,不要关闭 大小表join
2)提前进行行列过滤
join where =>where join
3)创建分区表 防止后续全表扫描
创建分桶表 对未知的海量数据,进行提前采样。防止数据倾斜产生。
4)小文件处理
(1)JVM重用
(2)combinehiveinputformat 把多个文件放到一起统一切片 减少maptask个数
(3)merge 如果是maponly任务,默认打开;如果是mr,需要手动打开。
将小于16m的文件 =》 256m
5)采样压缩
map(snappy) reduce
6)采用列式存储
orc(优秀) p
id name age
1 zs 18
2 lishi 19
行:1 zs 18 2 lishi 19
列:1 2 zs lishi 18 19
select name from user
7)可以提前combiner (有前提条件,不能影响最终的业务逻辑)
at,1
at,1 at,3
at,1
8)合理的设置map个数和reduce个数
reduce个数 不要太多也不能太少; 128m => 1g内存
map个数 由切片个数绝对 128m => 1g内存
切片大小:= max(0, min(块大小,long的最大值))
9)更换引擎
mr => hive on spark mr spark sql tez (presto)
(hive的生态要更好一些 兼容性更强 元数据管理、权限管理)
9、数据倾斜
数据倾斜是 数据量多的是数据量少的 执行时间的20倍,就会认为发生数据倾斜
618
按照各个省份统计交易额;
按照个数渠道统计下载量;
发生了数据倾斜,当时执行了 4-5个小时; 发现统计北京、上海、深圳的任务一直在执行,卡在了99% 。认为发生了数据倾斜。 当天数量是平时 的 30-50倍。
任务收到停下。加上处理数据倾斜的的参数set hive.groupby.skewindata = true;
效果: 执行 30-40分钟,任务解决了。
10、杂七杂八
八、datax
1、底层 1个进程 多个线程
sqoop (默认4个 mr )
2、datax如何调优
1)datax可以调整并行度
2)调整内存
3、在使用datax过程中遇到哪些问题
mysql hive (hdfs)
datax
null \\N
要求hive建表时 用null 来存储空值
sqoop (有对应参数可以将null => \\N)
hdfs mysql
datax (有参数)
\\N null
4、datax什么时候执行
00:10分钟开始执行
九、maxwell
mysql oracle mongodb
可以增量同步 也可以全量同步
canal flinkcdc de... ogg
支持断点续传 也可以全量同步
十、ds 海豚调度器
1、什么时候执行
业务数据:00:10分钟开始执行
用户行为数据:00:30分钟开始执行
2、ds 里面的任务挂了
报警 发邮件,打电话(睿象云)(广东)
起床 =》 打开电脑 远程连接公司服务器
=》 尝试手动执行 还是不行; 把这个任务停止掉; 第二天去公司解决。
(小文件过度、 数据倾斜 )
3、ds的服务挂了
重启; (查看内存、查看磁盘、查看进程)
4、ds每天跑多少指标
平时 100个左右; 如果搞活动150-200个
十一、spark
1、入门
1)spark是解决什么问题的 海量数据的计算
hadoop 是解决海量数据的存储和计算
2)spark 为什么有自己的调度器 yarn出现的晚
3)spark的运行模式
(1)local 本地 调试
(2)standalone 用在 要求性能比较高的场景 国外使用
(3)yarn 在国内大量使用 解耦
(4)m 在国内几乎没有使用的 不会。
(5)k8s 在javaee里面用的比较多;在大数据场景下,问题非常多,
目前不是特别成熟,慎重使用
4)常用端口号
4040 spark shell
7077 hadoop 9820/9000/8020
8080 hadoop 8088
18080 hadoop 19888
5)手写wordcount
现在要求手写 flink wordcount topn
2、spark core
1)代码都是在哪运行
D E (和算子紧密相关的)
2)rdd的五大属性
(1)标记数据是哪个分区
(2)对数据进行计算
(3)分区器
(4)血缘依赖
(5)移动数据不如移动计算
3)转换算子
(1)单value
map
mapp
mappw
flatmap
filter
c true shuffle false 没有shuffle 缩减分区
repartition true shuffle 重写分区
(2)双value
交并差 拉链 zip
(3)keyvalue
partitionby
groupbykey 没有预聚合操作
reducebykey 有预聚合操作
reducebykey 没有初始值 分区内和分区间逻辑相同
foldbykey 有初始值 分区内和分区间逻辑相同
agg..bykey 有初始值 分区内和分区间逻辑可以不相同
combinebykey 有初始值(可以变换结构) 分区内和分区间逻辑可以不相同
4)行动算子
(1)reduce
(2)first
(3)take
(4)foreach
(5)foreachp ..
5)序列化
KRYO序列化
6)血缘
宽依赖 有shuffle (有聚合操作)
窄依赖 没有shuffle
7)cache 缓存 不会改变血缘依赖关系 内存、磁盘
checkpoint 会改变血缘依赖关系 第三方框架(HDFS 、HBase 、redis、mysql)
8)任务怎么切分的
(1)app sparkcontext
(2)job 行动算子个数
(3)stage shuffe的个数+1
(4)task 每个阶段,最后一个算子对应的 分区数
9)广播变量
10)累加器
3、spark sql
1)rdd df ds 三者之间的转换
2) 元数据 执行引擎 语法
hive on spark mysql rdd (慢) hive
spark on hive (spark sql) mysql df ds (快) spark sql
内置hive derby
外置hive mysql
4、sparkstreaming
(1)SparkStreaming是纯流式处理框架吗? 他的抽象是谁?
(2)背压机制原理
(3)Receiver和Direct模式原理
(4)kafka的offset维护在什么位置( 0.10)
(5)transform算子里面的代码都在什么端执行
(6)UpdateStateByKey状态保存在什么位置? 有什么缺点
(7)window有三个概念 用wordcount案例画图说明
5、内核源码
十二、Flink
十三、从0到1
什么也没有
从0-1搭建大数据平台(离线 实时)
你给我出一套大数据解决方案
你就是大数据组组长
1)都有什么需求啊?
第一批指标 通道打通 留转G复活
2)能出多少钱 什么方向
50万 离线实时都做 先做离线
5台服务器 * 4w =20w
3)数据量
增量 每天100g左右 历史数据 1T
4)能给我分配几个组员
就你1个
可以找人
5)需要的框架
6)物理机 还是云主机
云主机
7)离线大约你给我多久时间交工
1个月
再招人 建模消耗时间
十三、数仓建模准备
1、ER 模型 javaee 三范式
2、维度建模
星型模型(事实表周围一级维度) 减少join操作
雪花模型(事实表周期多级维度)
星座(多个事实表)
3、事实表
1)什么样的表是事实表;
有度量值的表; 可以累加的值(个数、件数、次数 、金额)
2)同步策略
数据量大: 同步时,通常采用 增量 有特殊的(加购 全量)
3)分类
(1)事务型事实表
找原子操作 点击(加购、下单、物流、退款)
①选择业务过程
②声明粒度
③确定维度
④确定事实
不足:
①统计连续性指标、库存类指标 周期型快照事实表
②多事实表的关联(最怕join 大表 join 大表)
统计下单 到 物流的 平均时长 累积型快照事实表
(2)周期快照事实表
①选择业务过程
②声明粒度 (天)
③确定维度
④确定事实
(3)累积型快照事实表
①选择业务过程 (选择多条业务线)
②声明粒度
③确定维度
④确定事实 (确定多个事实表)
4、维度表
1)什么样的表是维度表
没有度量值的表;通常都是一些描述信息(身高、体重 年龄、性别)
2)同步策略
数据量小: 同步时,通常采用 全量 有特殊的(用户表 增量)
3)维度整合 (星型模型 减少join )
商品表+ spu 表 + 商品品类表+ 商品一级分类、二级分类、三级分类=》 商品维度表
省份表 + 地区表 =》 地区维度表
活动信息表 + 活动规则表 =》 活动维度表
4)用户表 =》 拉链 (缓慢变化维)
十四、数仓建模(*****) 留存 转换率 GMV 复购 活跃
1、数据调研 (50%) 总时间1个月 1周(平台搭建) 2周(数据调研)3周(动手做)4周(bug)
1、熟悉公司的业务(javaee后台的表)
847张表 FM 喜马拉雅 (听书 加购 下单 支付 )
播放相关
入住的频道(10 、5 、6 )
图片、临时表 、权限表 (不选择)
2、需要找业务人员详细沟通
确认 表与业务之间的关系
3、和产品经理聊
指标:原子指标、派生指标、衍生指标
派生指标= 原子指标(业务过程 + 度量值 + 聚合逻辑) + 统计周期 + 统计粒度 + 业务限定
统一口径
2、明确数据域
用户域:登录、注册
流量域:页面、动作、故障、曝光、启动
交易域:加购、下单、取消下单、支付、取消支付、物流、退货
工具域:优惠卷领取、优惠卷使用(下单) 、优惠卷使用(支付)、
互动域:收藏、评论、点赞
3、构建业务矩阵
用户、商品、活动、优惠卷、地区、时间
用户域:
登录、 √
注册
流量域:
页面、
动作、
故障、
曝光、
启动
交易域:
加购、
下单、
取消下单、
支付、
取消支付、
物流、
退货
工具域:
优惠卷领取、
优惠卷使用(下单) 、
优惠卷使用(支付)、
互动域:
收藏、
评论、
点赞
4、建模
1)ODS层
(1)保持数据原貌不做任何修改。备份作用。
(2)采用分区表。 防止后续全表扫描
(3)采用压缩 。 减少磁盘空间
2)DIM层
(1)维度整合
商品表+ spu 表 + 商品品类表+ 商品一级分类、二级分类、三级分类=》 商品维度表
省份表 + 地区表 =》 地区维度表
活动信息表 + 活动规则表 =》 活动维度表
(2)用户拉链表(缓慢变化维)
3)DWD层
优先考虑采用 事务型事实表
(1)事务型事实表
找原子操作
①选择业务过程
选择感兴趣的, 产品经理要求的
图片、临时表 、权限表 (不选择)
②声明粒度
粒度:一行信息代表什么含义; 可以代表一次下单、一周下单、一个月下单
要求最小粒度
只要不做聚合操作;
③确定维度
未来统计的指标中需要: 用户、商品、活动、优惠卷、地区、时间
④确定事实
确定事实表的度量值 可以累加的值 (个数、件事、次数、金额)
(2)周期快照事实表 (连续性指标、库存)
(3)累积型快照事实表 (多事实表关联)
5、指标体系建设
ads层 要统计哪些指标 (一口气30个指标 日活、新增、留存、转化率、GMV 、复购率)
dws层:指标拆分
指标:原子指标、派生指标、衍生指标
派生指标= 原子指标(业务过程 + 度量值 + 聚合逻辑) + 统计周期 + 统计粒度 + 业务限定
交易总额(下单 + 金额 + sum) + 每天 + 省份 + 手机
每天各个省份购买手机的交易总额
找公共的信息 (业务过程 + 统计周期 + 统计粒度 )
6、报表可视化
十五、每层做了哪些事
1、ods层
1)保持数据原貌不做任何修改。备份作用。
2)采用分区表。 防止后续全表扫描
3)采用压缩。 减少磁盘空间
2、DIM 层 & DWD层
除了 维度整合、用户拉链 维度建模 (事务型事实表、周期快照、累积快照)
1)ETL数据清洗
清洗的手段 hql mr spark SQL Python kettle
清洗规则:
和钱相关的,数字:[0-9]
手机号
身份证号
网址URL的
数据解析:
核心字段不能为空:
超期数据删除;
重复数据 后续需要过滤
清洗掉多少日志算合适:
1万条日志 1 条(合理) 10 100 1000 9999条
压缩 减少磁盘空间
列式存储 加快查询速度
创建分区表: 防止后续全表扫描
2)对手机号、身份证号等敏感数据脱敏
(1)加**** 135 ****0013
(2)md5加密 1324242539 =》md5(1324242539) 342491234719(唯一标识)
(3)加权限 政府 银行 军工 1324242539
3、DWS层
指标体系建设
4、ADS层
一口气三十个指标
十六 、测试
测试的手段包括,边界值、等价类等。
sum(a,b)
a:1-100
b:1-10000000000000000000000000000
边界值: a:1 100,0 -1 101
等价类:b: 6896544456667 875555
编写测试用例:输入a=1 ,b=1 ,期望输出 2
测试报告:输入a=1 ,b=1 ,实际输出 1
测试程序员: 提bug 禅道、bugzila => 发邮件 =》 程序员 项目经理 测试经理
程序1.0 评审
程序员: 可以解释 这不是一个bug,
这是一个bug,下一个版本修改 1.1
瀑布式开发 (1-5年)
需求 100个 需求测试
系统总体设计 系统集成测试
软件概要设计 软件集成测试
软件详细设计 软件单元测试
代码编写 代码走查
敏捷开发 小步快跑
需求 5个
代码编写
测试
。。。。。
需求 5个
代码编写
测试
以上是关于大数据面试集锦的主要内容,如果未能解决你的问题,请参考以下文章