面试思路

问:你们现在系统里有用消息队列么?

答:有

这是一个面试官给你埋坑的开始!!大量的系统都有引入使用消息队列,也是目前业内比较流行的。还有比如 ZooKeeper、Redis、Dubbo 等等,都是目前比较热门的技术。在这里要小心了!面试官此时想慢慢过渡到你具体的业务场景中去了,关心你3个点:解耦、异步和削峰。

问:为什么要在系统中使用消息队列呀?

答:emmm… 老板做好架构设计、技术选型之后,然后就让我们落地实现

兄弟!千万别脱离了需求分析、架构设计、技术选型和资源评估,只是关心技术的落地实现,往往是没经过深度思考的朋友才干的事儿。只是为了用而用,不知道在此架构设计下为啥会用某些技术。

问:系统中引入了消息队列,会不会有啥隐患?

答:还没遇到过…

这里就惨了!!如果没做过深度技术调研,盲目地直接在系统中引入不熟悉的技术,这就坑爹了,也是挖坑小能手经常干的事儿。比如,可能会遇到这两个问题:第一,链路变长,造成请求响应时间变长,影响用户体验。第二,MQ本身高可用很重要,不然造成整个系统的瘫痪。

问:消息队列的产品有 RabbitMQ、RocketMQ、Kafka 等,你们选用哪个?技术调研后的依据是啥?

答:&%#@*…!/(ㄒoㄒ)/~~

MapReduce的考点

简述执行过程

  1. 5个步骤,input(split)->map->shuffle->reduce->output

  2. Shuffle ,分为Map端(partition、sort、spill、merge,在sort和spill之间可选combine,merge之前可选combine)、Reduce端(copy、merge,merge之前可选combine)

  3. combine的场景是,将多个有序数组合并到一个数组,算法两层,外循环为主数组,内循环的逻辑是从一个有序数组中进行查询,二分查找是最优算法,算法复杂度为logn

    所以,MapReduce的sort看起来是比较有用的,但是也比较损耗性能

  4. spark的udaf实现

    initialize -> update -> merge -> evaluate

  5. hive的udaf实现
    • map+reduce = PARTIAL1(mapper) , FINAL(reducer)
    • map+reduce+combine = PARTIAL1(mapper),PARTIAL2(combiner),FINAL(reducer)
    • map = COMPLETE(mapper)
  6. partition,默认是HashPartition,也可自定义,所以部分数据倾斜问题是出在key的hash碰撞

  7. Map个数,与文件数、hdfs的block默认大小、mapred.map.tasks参数相关

  8. 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

弹性

  1. 可存储在内存或磁盘
  2. 分区可以改变

分布式

多个分区,可并行运算

数据集

stage的划分

application -> 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

hive2es的画像应用性能优化

原理: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