离职9个月了,面试的时候一问三不知,现在记下面试问题重新学习吧。
一篇最多一千字,没写完,只好分上下两篇
一、自我介绍
二、大数据中,什么是数据倾斜和怎么优化
数据倾斜数据在每个节点上的分配不均,其中个别节点处理的数据量远大于其他节点,原因是某一个key中重复的条数比其他key要多,而这条key所在的reduce节点所处理的数据量比其他节点就大很多,从而导致某几个节点迟迟运行不完。
优化方法:
1. 升级spark的版本,目前spark3已经有系统自带的优化方法,将倾斜的数据再一次分割到其他的节点中,减少倾斜的数据量,从而减少数据倾斜导致的运算时间过长。
2. 过滤多余的数据。部分倾斜数据是测试数据,例如imei=123456789或者imei=888888888等明显不符合实际的数据,或者是0、null、"NULL"等污染数据,这部分数据可以咨询业务是否需要过滤。
3. 将倾斜的key单独捞出来并添加随机字符来打散数据,运行完后再用union on函数进行结合。一般情况下一个节点中推荐处理1000w条数据,那么如果倾斜数据为10亿条,那么就在这个key后面增加随机数 int(radom(100)) 分成100份。
三、大数据sql的底层执行流程
sql在提交到集群中执行之前,会先经过优化器转化成RDD。而在优化器中,会先进行SQL解析,再进行优化,最后执行。
四、Spark的任务调度流程
(太复杂看不懂乱写的,而且之前工作时基本上没用到也没学到相关知识)
因为我们公司使用的是on yarn模式,首先spark作业提交后,会在yarn集群的core节点中拉起appmaster,而appmaster中又会拉起driver。drive向集群的master请求资源,而master会根据资源到work节点中拉起executor。之后driver中会拉起TaskScheduler和DAGScheduler会分别对task和stage进行调度。