目录
一:首先自我介绍
谈一谈为什么会选择这个岗位?
谈一谈你对大数据技术栈的认识?
难道真的是我热爱数据,喜欢钻研大数据技术吗?哈哈哈哈哈哈哈哈哈😂
目前对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)聚合倾斜
(局部聚合+全局聚合)