『数据分析岗』面试高频题型——大数据技能知多少?

最近,各大厂的暑期面试正在如火如荼进行中!

本篇,讲讲数据分析岗,面试中的常见一大类题型 —— 大数据相关技能考核


先抛出一个高频面试case ↓ 你的答案是什么呢


问题:hive遇到数据倾斜,可能的原因是什么?该如何处理?


先说说 为啥 大数据相关技能 会作为数据分析师常见面试类型?

虽说,作为数据分析师,不要求像ETL那样,必须对数据开发相关底层原理、知识技巧做到了如指掌、运筹帷幄。
但是,因为天天和数据打交道,难免会碰到相关问题。
所以需要知道如何避免、如何解决,方便提升工作效率并节省资源.
因此,常常会被一些大厂面试官作为笔面试相关技能考核之一。
(ps. 中小厂更是如此,因为基础建设不完备,常常在服务器上直接跑数,更有求你的相关技能点要拉满,别拉胯~)

那,今天我们就先唠唠 “ hive数据倾斜 ” 这里的前因后果,以及该如何处理。

(温馨提示:想知道面试答案的可直接跳到第四部分😸 )

===========================================================================
另外,最近在集中梳理总结求职简历、笔试、面试相关文章,后续有更多日常学习干货。

建了一个 数据人的资源基地 ,分享 求职笔面试经验 & 日常学习 ,需要的可dd六哥 ( 见【评论区】)

为了方便帮助更多人,后续 会 将 系列文章 沉淀在公众号。

欢迎关注六哥  六哥他的工粽号  " 数据攻略 "
============================================================================

------正文手动分割线------

本文结构速览:
一、啥是数据倾斜?
二、数据倾斜的表现?
三、为啥会出现数据倾斜?
四、该如何解决 / 避免?
五、写到最后

一、啥是数据倾斜

通俗来讲,数据倾斜就是:
“数据的分布不平衡,有些Reducer节点被分配的key值特别多,有些Reducer节点被分配的特别少
导致在处理数据的时候,有些很快就处理完了,而有些又迟迟未能处理完,所以其他的 Reducer 都执行完了,都在等这个量大的 key 值,导致整体任务最终迟迟无法完成。”

→ 大白话即:
“活儿分配不均,导致一人忙死,其他人闲死,又因为是一个团队还得一起等,整体效率被拉低”,这种现象就是 数据倾斜

二、数据倾斜的表现?

常见表现就是map任务已执行完毕,个别reduce task,长时间卡在99%。
(可以看下你每次运行sql的进程)

三、为啥会出现数据倾斜?

根本原因是key的分布不均匀,进而导致数据倾斜的后果。

常见分布不均匀情况分为以下几种:
  1. 业务数据本身的特性。比如,某些业务数据作为key的字段本就很集中,含有大量重复值。
  2. 建表时考虑不周。比如,日志表某些字段信息丢失,导致含大量空值,如又作为join关联条件,就会碰到数据倾斜的问题。
  3. 某些SQL语句本身就有数据倾斜。比如计数时总喜欢用DISTINCT,COUNT(DISTINCT),如果某些特殊值过多,则该值会被分入同一个reduce,则会非常耗时。

四、该如何解决/避免?

1、设置常用参数

例如有:



2、SQL语句调整

2.1 少用 distinct

很多业务数据本身就有数据倾斜风险,
因此尽量采用sum group by的方式来替换 count(distinct) 完成计算。



2.2 保证关联条件数据类型一致


同数据类型关联时可能会产生数据倾斜现象。

例如,按照user_id对两个表Join操作时,因为连接时要进行user_id的比较,默认的Hash操作会按int型的id来进行分配,
这样会导致所有string类型id的记录都分配到一个Reducer中,可能会导致数据倾斜。



2.3 大小表Join:

可以使用map join让小维度表先进内存,即在map端完成join,不经过reduce。

2.4 大表Join大表:

  • 如果是不需要空值的内连接,有2种处理方法:
    1. 空值不参与关联:可以内层通过where条件筛选掉空值;

    2. 给空值分配随机的key值:可以对识别出的空值key变成一个字符串+随机数,这样就可以将原来集中的key分散开来,避免了数据倾斜的风险,且由于是无效数据无法关联上,因此不会出现在结果表中。

  • 如果需要空值的左连接,即需要保留主表的无效数据,只需要将上述方法得到的结果再与驱动表的这些无数据取并集就可以。如,


3、特殊情况特殊处理

有时,group by时维度过小的话,数据过于集中,数据自身倾斜,
在SQL逻辑优化效果的不大情况下,有时候是可以将倾斜的key单独拿出来处理,即将大key和其他key分开处理,最后union回去。


业务情景举例:
比如 上海的用户比其它地方的用户多很多,此时可以把上海的数据单独处理,先把的数据分成N块,每块的数据进行局部统计,再将每块的局部统计结果进行汇总,最终统计出结果。

例如:



五、写到最后


校招面试数据分析岗的你,
按照以上框架,分情况答出一二(重点掌握第二部分——SQL语句逻辑优化)面试官定对你刮目相看~

有疑问想交流,评论区见~求职加油

如果感兴趣,可来工粽 号  " 数据攻略 ",原创文章分类更清晰。

最近在集中输出简历、笔试、面试相关干货文章,后续有更多日常学习case。

#数据分析##春招##实习##面经##秋招##面试题目##数据分析师#
全部评论
感谢,弥补了我对SQL知识的短板
1 回复 分享
发布于 2022-04-26 11:18
{"pureText":"","imgs":[{"width":"1440.0","src":"https://uploadfiles.nowcoder.com/images/20220510/581007507_1652170187109/900E855E49E4C7928139F5CE04255C04","height":"360.0","alt":"Cdwki5qAuWnF6dXKVuAEc2teQEpBDTf2.jpg"}]}
点赞 回复 分享
发布于 2022-05-10 16:09
{"pureText":"","imgs":[{"src":"https://uploadfiles.nowcoder.com/images/20220510/581007507_1652173074487/BA3EBEFC9C759DF5F09D4C57D03A525A","width":"1440.0","alt":"9PbDn5R4S0QveGfLviOZ9AzRnFK2RXVh.jpg","height":"891.0"}]}
点赞 回复 分享
发布于 2022-05-10 16:57
国企、央企、上市公司高薪招聘金融数据分析师 工作地点:全国一、二线为主的城市(主要在银行) 学历:全日制大专及以上学历,理工科,计算机相关专业优先 年龄:22~30周岁 薪资待遇:北方城市,五险一金,到手6000--8000起;南方城市,五险一金,到手10000--15000起,每年工资上调,双休、法定节假日等 入职方式:短期培训后面试上岗(包就业,服务三年)
点赞 回复 分享
发布于 2022-06-14 09:47

相关推荐

秋招进行到现在终于能写总结了。完全没想到战线会拉这么长,过程会如此狼狈,不过更应该怪自己太菜了。好在所有的运气都用在了最后,也是有个去处。背景:双2本硕科班,无竞赛,本科一段研究所实习,硕士一段大厂暑期实习但无转正。技术栈是C++ & Golang,实习是客户端音视频(而且是鸿蒙端开发),简历两个C++项目一个Golang项目。主要投递岗位:后端,cpp软开,游戏服务端,测开,以及一些不拘泥于Java的岗位。从8月起总共投递123家公司,笔试数不清了,约面大约30家。offer/oc/意向:友塔游戏(第一个offer,面试体验很好,就是给钱好少南瑞继保(计算机科班点击就送(限男生),不...
乡土丁真真:佬很厉害,羡慕~虽然我还没有到校招的时候,也想讲一下自己的看法:我觉得不是CPP的问题,佬的背书双2,技术栈加了GO,有两段实习。投了123,面了30.拿到11个offer。这个数据已经很耀眼了。这不也是CPP带来的吗?当然也不止是CPP。至少来说在这个方向努力过的也会有好的结果和选择。同等学历和项目选java就会有更好的吗?我个人持疑问态度。当然CPP在方向选择上确实让人头大,但是我觉得能上岸,至于最后做什么方向,在我看来并不重要。至于CPP特殊,有岗位方向的随机性,java不是不挑方向,只是没得选而已。也希望自己以后校招的时候能offer满满
点赞 评论 收藏
分享
努力学习的小绵羊:我反倒觉得这种挺好的,给不到我想要的就别浪费大家时间了
点赞 评论 收藏
分享
10-06 12:46
门头沟学院 Java
跨考小白:定时任务启动
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-27 10:46
点赞 评论 收藏
分享
评论
12
102
分享
牛客网
牛客企业服务