数仓interview总结
一 数据库
1.1 数据库事务特性ACID
原子性Atomicity,一致性Consistency,隔离性Isolation,持续性Durability
1.2 锁有几种,及范围
从数据库系统角度分为三种:排他锁、共享锁、更新锁。按作用范围划分为:行锁、表锁。
S锁,也叫读锁,用于所有的只读数据操作。共享锁是非独占的,允许多个并发事务读取其锁定的资源。
X锁,也叫写锁,表示对数据进行写操作。如果一个事务对对象加了排他锁,其他事务就不能再给它加任何锁了。
U锁,在修改操作的初始化阶段用来锁定可能要被修改的资源,这样可以避免使用共享锁造成的死锁现象。
1.3 分区,索引有那些
范围分区(时间),列表分区(值很少的数据),hash分区
索引链接:http://www.cnblogs.com/sessionbest/articles/8689255.html
1.4 数据表的关联有几种(在优化器)
NESTED LOOP,HASH JOIN,SORT MERGE JOIN
1.5 数据库调优(主要sql优化思路)
- 数据模型优化
- 数据裁剪,减少每个阶段的数据量 (where分区裁剪,select列裁剪,join关联使用相同的key)
- 减少JOB数(map:input文件总大小,文件个数,集群文件块block大小;reduce:reduce个数=inputfilesize / bytes per reduce,reduce任务处理的数据量,默认为1G)
- 数据倾斜(空值,赋予空值新的key值;不同数据类型关联;mapjoin,当小表与大表JOIN时,采用mapjoin,即在map端完成,大表放最后可避免小表与大表JOIN产生的数据倾斜,有效减少内存溢出)
- 参数设置(本地local模式,并行执行,动态分区,map端聚合,小文件合并(小文件归档archive,重建表))
1.6 如何解决数据分布不均和数据重分布的问题
1.7 大表UPDATE,DELETE的方法
二 数据仓库
2.1 数据仓库架构,以及主题
数据分层:数据源层,主题层,基础汇总层,应用层
主题:用户,商品,商家,流量,订单,营销,供应链,配送,仓储,售后,财务
2.2 数据仓库建模方法
范式建模(3NF),维度建模(星形、雪花),实体建模(关系)
2.3 数据治理
数据治理包含:主数据管理,生命周期管理,业务流程管理,数据质量,数据安全,元数据
数据质量方法:
数据监控:准确性(行数和数量),及时性(设置完成时间)
数据清洗:清洗脏数据,标准化
错误预警:校验(0值,环比)
数据分析,发现及推动主数据
2.4 mapreduce工作原理
Map阶段
第一步: 通过FileInputFormat读取文件, 把输入文件按照一定的标准分片 (InputSplit),每个输入片的大小是固定的
第二步: 自定义Map逻辑, 对输入片中的记录按照一定的规则解析每对<key,value>,生成中间结果
Shuffle阶段
第三步: 对<key,value>进行分区,分区是基于key进行的
第四步: 对每个分区内的数据按照相同的key进行排序
第五步: 分组后的数据进行规约(combine操作),降低数据的网络拷贝(可选步骤)
第六步: 对排序后的数据, 将相同的key的value数据放入一个集合中
Reduce阶段
第七步: 对多个map的任务进行合并、排序. 自定义reduce逻辑,处理<key,value>进行输出
第八步: 通过FileOutputFormat输出处理后的数据, 保存到文件
2.5 谈谈调度机制,数据标准,元数据管理,以及实时数据技术
调度架构分为:NameNode,TaskNode,WEB管理,日志收集器
NameNode负责任务实例化、检查依赖、分配任务执行节点、处理任务执行结果、管理TaskNode节点;
TaskNode主动从NameNode按照一定的分配策略领取任务,并根据任务执行代理器,会监听进程执行结果并反馈给NameNode,同时接收任务日志输出到日志收集器
技术点包含:实例(任务到预定的执行时间时,会根据任务的配置,生成一个任务实例)
分配策略(轮询,并发数,机器资源)
跨周期依赖,数据依赖