2020网易大数据开发面试题整理 (提前批) (持续更新)

博主近期在整理各大厂面试题,每天会更新一点,没有答案的题目,表示博主也不知道,有答案的题目也不一定正确,希望各位同学自主判断,如果博主有写错的地方,欢迎在评论区补充

1.spark数据倾斜怎么引起的?该怎么解决?
产生原因:
    RDD的逻辑其实是表示一个对象集合,在物理执行期间,RDD会被分为一系列的分区,每个分区都是整个数据集的子集。当spark调度并运行任务的时候,spark会为每一个分区中的数据车床件一个任务。大部分的任务处理的数据量差不多,但是又少部分的任务处理的数据量很大,从而产生数据倾斜。
    数据倾斜只会发生在shuffle过程中。可能会触发shuffle操作的算子:distinct、groupByKey、reduceByKey、aggregateByKey、join、cogroup、repartition等。使用了这些算子,就有可能会出现数据倾斜。

解决方法:
    1.数据混洗的时候,使用参数的方式为混洗后的RDD指定并行度
    实现原理:提高shuffle操作的并行度,增加shuffle read task的数量,可以让原本分配给一个task的多个key分配给多个task,从而让每个task处理比原来更少的数据,举例来说,如果原本有5个key,每个key对应10条数据,这5个key都是分配给一个task的,那么这个task就要处理50条数据。而增加了shuffle read task以后,每个task就分配到一个key,即每个task就处理10条数据,那么自然每个task的执行时间都会变短了
    缺点:只是缓解了数据倾斜,没有彻底根除问题。在实际场景中运用较少,如果存在某个key对应的数据量有百万条,甚至更多,那么无论task增加到多少,这百万条的数据都会分配到一个task中处理,注定还是会发生数据倾斜

    2.使用随机key实现双重聚合(groupByKey、reduceByKey 比较适合使用这种方式)
    实现原理:将原本相同的key通过附加随机前缀的方式,编程多个不同的key,就可以让原本被一个task处理的数据分散到多个task上去做局部聚合,进而解决单个task处理数据量过多的问题。接着去除掉随机前缀,再次进行全局聚合,就可以得到最终的结果。

    3.过滤少数导致倾斜的key
    实现原理:如果我们判断那少数几个数据量特别多的key,对作业的执行和计算结果不是特别重要的话,可以直接过滤掉那少数几个key。将导致数据倾斜的key给过滤掉之后

  • 0
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值