面试思路
问:你们现在系统里有用消息队列么?
答:有
这是一个面试官给你埋坑的开始!!大量的系统都有引入使用消息队列,也是目前业内比较流行的。还有比如 ZooKeeper、Redis、Dubbo 等等,都是目前比较热门的技术。在这里要小心了!面试官此时想慢慢过渡到你具体的业务场景中去了,关心你3个点:解耦、异步和削峰。
问:为什么要在系统中使用消息队列呀?
答:emmm… 老板做好架构设计、技术选型之后,然后就让我们落地实现
兄弟!千万别脱离了需求分析、架构设计、技术选型和资源评估,只是关心技术的落地实现,往往是没经过深度思考的朋友才干的事儿。只是为了用而用,不知道在此架构设计下为啥会用某些技术。
问:系统中引入了消息队列,会不会有啥隐患?
答:还没遇到过…
这里就惨了!!如果没做过深度技术调研,盲目地直接在系统中引入不熟悉的技术,这就坑爹了,也是挖坑小能手经常干的事儿。比如,可能会遇到这两个问题:第一,链路变长,造成请求响应时间变长,影响用户体验。第二,MQ本身高可用很重要,不然造成整个系统的瘫痪。
问:消息队列的产品有 RabbitMQ、RocketMQ、Kafka 等,你们选用哪个?技术调研后的依据是啥?
答:&%#@*…!/(ㄒoㄒ)/~~
MapReduce的考点
简述执行过程
-
5个步骤,input(split)->map->shuffle->reduce->output
-
Shuffle ,分为Map端(partition、sort、spill、merge,在sort和spill之间可选combine,merge之前可选combine)、Reduce端(copy、merge,merge之前可选combine)
-
combine的场景是,将多个有序数组合并到一个数组,算法两层,外循环为主数组,内循环的逻辑是从一个有序数组中进行查询,二分查找是最优算法,算法复杂度为logn
所以,MapReduce的sort看起来是比较有用的,但是也比较损耗性能
-
spark的udaf实现
initialize -> update -> merge -> evaluate
- hive的udaf实现
- map+reduce = PARTIAL1(mapper) , FINAL(reducer)
- map+reduce+combine = PARTIAL1(mapper),PARTIAL2(combiner),FINAL(reducer)
- map = COMPLETE(mapper)
-
partition,默认是HashPartition,也可自定义,所以部分数据倾斜问题是出在key的hash碰撞
-
Map个数,与文件数、hdfs的block默认大小、mapred.map.tasks参数相关
- Reduce个数,hive.exec.reducers.bytes.per.reducer 相关
Hive的考点
数据倾斜
资源分配不均的问题,体现在MapReduce阶段的Map个数、shuffle的原理、reduce的个数
hive.groupby.skewindata
https://www.cnblogs.com/wanfeng1937/p/10755178.html
这是个南非荷兰语
针对count distinct的场景提供优化,负载均衡
hive.map.aggr
map端聚合
SQL执行过程
Parser -> LogicPlan -> Optimizer ->PhsicalPlan
语法词法解析器 -> 逻辑执行计划 -> 优化器 -> 物理执行计划
SQL -> AST(abstract syntax tree) -> Task(MapRedTask,FetchTask) -> QueryPlan(Task集合) -> Job(Yarn)
理解Explain的结果:stage的序列、stage的依赖、stage的具体描述
SQL操作类型对应的MR流程
Join
count+groupby
文件格式和压缩
Spark的考点
RDD
弹性
- 可存储在内存或磁盘
- 分区可以改变
分布式
多个分区,可并行运算
数据集
stage的划分
application -> job -> stage
- transformation,延迟运行;action,立即运行;以此将application划分为多个job
- rdd的依赖关系分为宽依赖(有shuffle)、窄依赖(无shuffle),以此将job划分为多个stage
对MR的优化
broadcast的实现原理
driver在本地创建一个文件夹来存储broadcast的data,Executor要用的时候拉取一份到本地,本地所有Task共享该数据
不会OOM:默认MEMORY_AND_DISK的存储级别
性能优化
https://tech.meituan.com/2016/04/29/spark-tuning-basic.html
Flink的考点
与spark streaming的对比
基于savepoint的任务代码升级
ElasticSearch考点
性能优化
https://www.cnblogs.com/technologykai/articles/10899582.html
原理:hive外部表,insert过程是map读取源表然后bulk导入数据到es的过程
https://blog.51cto.com/cloumn/blog/44
https://mp.weixin.qq.com/s?__biz=MzUyNDkzNzczNQ==&mid=2247486795&idx=1&sn=c70b58c147e9be49b4df67bd1c473977&chksm=fa24f223cd537b35baee6de9ecd99671bc18d52a5fb74c9d684ca3870e5485945f36127d6b93&scene=21#wechat_redirect
搭建数仓
https://mp.weixin.qq.com/s/WqeaczXpZFSZpjUu-pMtNA