大数据--面经--2021年字节跳动大数据研发岗面试复盘

本文作者复盘了在字节跳动大数据研发岗位的面试经历,重点讨论了数据倾斜的概念、原因、后果及分类,并分享了编程题目(寻找最小k个数)的解题思路,涉及优先队列与堆的实现。同时,还探讨了SQL题目,包括如何在每个自然周中找出新用户完播率前5的网页跳转来源。
摘要由CSDN通过智能技术生成

目录

一:首先自我介绍

二:数据倾斜

       2.1.是什么?

       2.2.为什么

      2. 3.导致后果?

      2. 4.分类?

      2.5 数据倾斜分类补充

三:写编程题目:数组中最小k 个数

3.1 两种方法

3.2此处涉及优先队列实现堆知识点总结:

 3.3.自定义比较类知识总结

四:写SQL

4.1两种方法解决

4.2实战该题目

五:问简历,问项目

六:总结


一:首先自我介绍

       谈一谈为什么会选择这个岗位?

       谈一谈你对大数据技术栈的认识?       

       难道真的是我热爱数据,喜欢钻研大数据技术吗?哈哈哈哈哈哈哈哈哈😂

       目前对Hadoop生态了解比较多,但是钻研不够深入,后续着重学习hive基础,技术,hql深入那种,熟悉Hadoop,

       然后牢记mapreduce,flume,Kafka,组件等原理概念。也要尽快着手学习spark技术栈的学习

二:数据倾斜

        什么是数据倾斜?

        为什么会产生数据倾斜?

        你在实际应用中是否遇到过数据倾斜的问题?怎么解决数据倾斜?

       2.1.是什么?

            任务进度长时间维持在99%,查看监控页面发现只有某几个reduce子任务尚未完成。

       2.2.为什么

          为什么会出现数据倾斜这种情况呢?简单来讲,例如wordcount中某个key对应的数据量非常大的话,就会产生数据倾斜

         一般由什么操作导致?一般由于count(distinct *), group by(),  join()操作引起,导致某个reduce处理的数据过多,

                                             引起处理时间非常耗时

        1)group by()    

注:group by 优于 distinct group
情形:group by 维度过小,某值的数量过多
后果:处理某值的 reduce 非常耗时
解决方式:采用 sum() group by 的方式来替换 count(distinct)完成计算。

        2) count(*)

count(distinct)
情形:某特殊值过多
后果:处理此特殊值的 reduce 耗时;只有一个 reduce 任务
解决方式:count distinct 时,将值为空的情况单独处理,比如可以直接过滤空值的行,
在最后结果中加 1。如果还有其他计算,需要进行 group by,可以先将值为空的记录单独处
理,再和其他计算结果进行 union。

       3)不同数据类型关联产生数据倾斜

情形:比如用户表中 user_id 字段为 int,log 表中 user_id 字段既有 string 类型也有 int 类
型。当按照 user_id 进行两个表的 Join 操作时。
后果:处理此特殊值的 reduce 耗时;只有一个 reduce 任务
默认的 Hash 操作会按 int 型的 id 来进行分配,这样会导致所有 string 类型 id 的记录都分配
到一个 Reducer 中。
解决方式:把数字类型转换成字符串类型
select * from users a 
left outer join logs b
on a.usr_id = cast(b.user_id as string)

      2. 3.导致后果?

             拖慢整个job执行时间,(其他以已经完成的结点都在等这个还在做的结点)

      2. 4.分类?

       (借鉴spark中数据倾斜举例)(不属于HQL中知识,后期再看这块)

      2.5 数据倾斜分类补充

         1)聚合倾斜

              (局部聚合+全局聚合)

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值