『数据分析岗』面试高频题型——大数据技能知多少?
  最近,各大厂的暑期面试正在如火如荼进行中!
 
 本篇,讲讲数据分析岗,面试中的常见一大类题型 —— 大数据相关技能考核
   
  
先抛出一个高频面试case ↓ 你的答案是什么呢
问题:hive遇到数据倾斜,可能的原因是什么?该如何处理?
  先说说 为啥 大数据相关技能 会作为数据分析师常见面试类型?
 
   
   虽说,作为数据分析师,不要求像ETL那样,必须对数据开发相关底层原理、知识技巧做到了如指掌、运筹帷幄。
但是,因为天天和数据打交道,难免会碰到相关问题。
所以需要知道如何避免、如何解决,方便提升工作效率并节省资源.
 但是,因为天天和数据打交道,难免会碰到相关问题。
所以需要知道如何避免、如何解决,方便提升工作效率并节省资源.
  因此,常常会被一些大厂面试官作为笔面试相关技能考核之一。  
   (ps. 中小厂更是如此,因为基础建设不完备,常常在服务器上直接跑数,更有求你的相关技能点要拉满,别拉胯~)
 
   
   那,今天我们就先唠唠 “ hive数据倾斜 ” 这里的前因后果,以及该如何处理。
 
   
   (温馨提示:想知道面试答案的可直接跳到第四部分😸 )  
 ===========================================================================另外,最近在集中梳理总结求职简历、笔试、面试相关文章,后续有更多日常学习干货。
建了一个 数据人的资源基地 ,分享 求职笔面试经验 & 日常学习 ,需要的可dd六哥 ( 见【评论区】)
为了方便帮助更多人,后续 会 将 系列文章 沉淀在公众号。
欢迎关注六哥 六哥他的工粽号 " 数据攻略 "============================================================================
------正文手动分割线------
本文结构速览:  一、啥是数据倾斜? 
   二、数据倾斜的表现? 
   三、为啥会出现数据倾斜? 
   四、该如何解决 / 避免? 
   五、写到最后 
 一、啥是数据倾斜
   通俗来讲,数据倾斜就是:   
     “数据的分布不平衡,有些Reducer节点被分配的key值特别多,有些Reducer节点被分配的特别少   
     导致在处理数据的时候,有些很快就处理完了,而有些又迟迟未能处理完,所以其他的 Reducer 都执行完了,都在等这个量大的 key 值,导致整体任务最终迟迟无法完成。”   
      “活儿分配不均,导致一人忙死,其他人闲死,又因为是一个团队还得一起等,整体效率被拉低”,这种现象就是 数据倾斜。  
 二、数据倾斜的表现?
  常见表现就是map任务已执行完毕,个别reduce task,长时间卡在99%。  
   (可以看下你每次运行sql的进程)
 
 三、为啥会出现数据倾斜?
  根本原因是key的分布不均匀,进而导致数据倾斜的后果。  
   常见分布不均匀情况分为以下几种:      
       例如有: 
 - 业务数据本身的特性。比如,某些业务数据作为key的字段本就很集中,含有大量重复值。
- 建表时考虑不周。比如,日志表某些字段信息丢失,导致含大量空值,如又作为join关联条件,就会碰到数据倾斜的问题。
- 某些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种处理方法:     -       空值不参与关联:可以内层通过where条件筛选掉空值; 
-       给空值分配随机的key值:可以对识别出的空值key变成一个字符串+随机数,这样就可以将原来集中的key分散开来,避免了数据倾斜的风险,且由于是无效数据无法关联上,因此不会出现在结果表中。 
 
-       
- 如果需要空值的左连接,即需要保留主表的无效数据,只需要将上述方法得到的结果再与驱动表的这些无数据取并集就可以。如,
3、特殊情况特殊处理
  有时,group by时维度过小的话,数据过于集中,数据自身倾斜,  
   在SQL逻辑优化效果的不大情况下,有时候是可以将倾斜的key单独拿出来处理,即将大key和其他key分开处理,最后union回去。      
         
         
         
         
         
         
         
       
           
      
     
    业务情景举例:   
     比如 上海的用户比其它地方的用户多很多,此时可以把上海的数据单独处理,先把的数据分成N块,每块的数据进行局部统计,再将每块的局部统计结果进行汇总,最终统计出结果。   
     例如:   
  五、写到最后
   校招面试数据分析岗的你,   
     按照以上框架,分情况答出一二(重点掌握第二部分——SQL语句逻辑优化)面试官定对你刮目相看~  
     有疑问想交流,评论区见~求职加油  
      如果感兴趣,可来工粽 号  " 数据攻略 ",原创文章分类更清晰。   
       最近在集中输出简历、笔试、面试相关干货文章,后续有更多日常学习case。   
 
 查看23道真题和解析
查看23道真题和解析