数仓面试求教

面试数仓岗位问题如下:
1.mapreduce中为何要hash partition分区
2.mapreduce中为何使用快拍和归并排序
3.两张表,译过来就是a为维表(不小),b为事实表,两表关联,如何优化?问后说关联是出现数据倾斜。
数仓只知道mapreduce的原理流程,具体环节没有深究,大佬有能给解答的吗#面试那些事##数据仓库工程师##面试题目#
全部评论
1. HashPartitioner 是默认的分区器,也可以用别的, 比如TotalOrderPartitioner, 也可以自定义开发。  第一个问题, 先回答为什么要分区  就是数据shuffle过程中的一种打散策略。   Hash散列化是最容易想到的。   2. 在MR当中会用到多次排序过程  特别是map输出到内存再溢写到磁盘时会产生大量的临时文件,这些小文件是不能直接交给Reducer处理的,而要进行一个合并的过程, 这个过程是带着map-key进行操作的 所以要用到归并排序。   在环形缓冲的内存区 使用快排, 原因我还没想到。  (https://blog.csdn.net/u010737756/article/details/114198358 ) 3.  先定义和回顾数据倾斜的概念, 然后再思考join这个过程的实现  (reduce把相同key分组做笛卡尔积)  如果大表小表的差异巨大, 表现为小表的数据量比较少但key却比较集中,导致分发到某一个或几个reduce上的数据比其他reduce多很多,易造成数据倾斜。  常常会采用mapjoin  优化这类问题
5 回复
分享
发布于 2022-05-04 16:18
1为了散列化分区(猜的) 2map端排序没有顺序所以是快排,之后分区合并后分区有顺序了所以归并 3小表在前大表在后
3 回复
分享
发布于 2022-04-25 14:25
滴滴
校招火热招聘中
官网直投
  1.mapreduce中为何要hash partition分区 默认是hash分区 为了打散数据 分布式处理  分区方式可以自己定义 实现分区器自定义实现; public class CustomPartitioner extends Partitioner<Text,Object>{ @Override  public int getPartition(Text key,Object value,int numPartitions){ //控制分区代码逻辑  返回int即可 return partition; } }   2.mapreduce中为何使用快拍和归并排序 快排:因为内存中排序比较快    数据在内存中是按照 entry1(k1v1),entry(k2v2),entry(k3v3) 这种方式排列的, kv组成一个entry 快排效率高 归并:对多个有序的小文件进行排序,不能单靠内存排,得借助磁盘 比如三个小文件分别是 1,4,6,8 1,5,8,8 0,3,7,11 同时打开所有小文件 分别使用迭代器取出第一个数 即1,1,0  此时0最小 将0追加写入新文件 并从三号文件通过迭代器拿出下一个数3 此事1最小 将1追加写入新文件 并从一号文件通过迭代器拿出下一个数4 直到所有文件都被迭代完 总的排序也就完成了 感觉会问你哪里用到排序了    1.map端的环形缓冲区用到快排    2.map端的小文件合并用到归并排序   3.reduce端将从map端拉取的文件进行归并排序 #数仓开发#
1 回复
分享
发布于 2022-07-01 10:49
2 一般来说小表join大表就把小表broadcast 出去,即mapjoin 。但是你这里说维表也挺大,可能需要走shuffle hash join. Join 过程中过滤好null 和空串的情况,如果还是会倾斜就需要具体分析. 倾斜不大就不用管了嘛,倾斜太大可以考虑对于这部分单独处理,使用加盐等策略
点赞 回复
分享
发布于 2022-06-18 01:58
3. 事实表关联维表 一般是大小表join 即事实表大维表小 或者 维表大 事实表属于增量数据 比较小 楼主说的情况 事实表很大 维表也很大 大数据处理其实不怕数据量大 而怕分布不均匀  数据倾斜是说事实表中数据有集中分布 情况1:   数据其实比较均匀 但经过hash后 某个分区数据就很多 可以尝试下调整分区数可能有效 虽然大多情况下没用 情况2:   事实表存在长尾效应 头部严重集中 比如淘宝的全体店铺的销售流水表 关联 店铺维表 头部店铺的销量一定是非常大的    对于这种的 可以分开处理   select     t1.*,t2.*   from    (     select * from fact_table where id in (1,2,3) -- 这三家店铺是头部单独处理    )t1    left join     (     select * from dim_table where id in (1,2,3) -- 此时维表就很小了 可以用mapjoin    )t2 on t1.id = t2.id   union all   select     t1.*,t2.*   from    (     select * from fact_table where id not in (1,2,3)    )t1    left join     (     select * from dim_table where id not in (1,2,3)   )t2 on t1.id = t2.id; 情况3:   数据量相当大 且不止是头部 头身都很大 只有少数数据比较少  想象的场景是物联网中 某个机具当天的心跳信息 关联 机具的基础信息 几乎每个机具的心跳信息都有上千万条  1.维表能不能先过滤 可能维表1kw条 但关联用到的只有100w 转为大小表join    select * from dim_table  where id in (select id from fact_table group by id)  2.如果两个表都很大 那不是数据倾斜 而是数据堆积 每个任务处理时间都很长     这种的不要以天级别做join 而是小时级别 每一个小时做一次 到时候如果再数据倾斜再考虑上面的方法  #数仓开发#
点赞 回复
分享
发布于 2022-07-01 10:54

相关推荐

Golang后端开发工程师-SDK工作职责业务介绍:SDK组负责米哈游发行能力建设,包括研发账号系统、支付系统、游戏启动器等,为游戏项目组提供一站式的发行服务。平台团队的游戏&nbsp;SDK&nbsp;集成了&nbsp;iOS、Android、Windows、PlayStation&nbsp;等多个平台,为《原神》、《崩坏3》等游戏的跨平台发行提供了坚实支撑,同时为游戏提供了公告、推送、社交分享等技术支持,减少了游戏项目组重复开发和维护的成本。此外,SDK组还负责PC启动器和云游戏app&nbsp;的平台开发。工作职责:‌1、负责米哈游面向用户的账号、支付、云游戏和游戏通用SDK的系统研发;‌2、负责业务系统的“三高”优化,推进系统容错及数据一致性等能力的升级;‌3、深度参与需求讨论及功能设计,通过技术创新推动产品发展,对产品质量和研发效率负责。任职要求1、计算机相关专业本科及以上学历,2年及以上后端开发经验;2、熟悉Go语言,有实际的Go项目开发经验;‌3、熟悉微服务架构下的研发体系,在服务治理、服务可观测等方面有相关经验;‌4、熟悉Web技术栈和Web应用开发,包括HTTP、安全、数据库、缓存、消息队列等;5、乐观细心,有强烈的责任心和&nbsp;Ownership&nbsp;意识,具备良好的跨团队协作和沟通能力,可以作为业务Business&nbsp;partner&nbsp;积极推动项目进展。投递链接https://jobs.mihoyo.com/?sharePageId=33869&amp;recommendationCode=NTAWnlu&amp;isRecommendation=true#/position/3375#内推##社招##后端##golang#
投递米哈游等公司8个岗位
点赞 评论 收藏
转发
工作职责业务介绍:旨在搭建符合米哈游特点的企业效能平台,包括办公协同套件、专业系统、基础系统能力等。工作职责:1.&nbsp;负责&nbsp;米哈游人事&amp;员工服务线&nbsp;的质量保障工作,及&nbsp;人事&amp;员工服务线&nbsp;QA团队的质量体系&nbsp;的规划与实施&nbsp;;2.&nbsp;负责&nbsp;米哈游人事&amp;员工服务线&nbsp;QA团队的建设和管理工作;3.&nbsp;深度参与各产品线(门户、商城、招聘系统等)开发制作过程,负责测试工作分配、进度跟进及技术指导;对全过程进度质量运营,不断提升交付质量;4.&nbsp;带领团队研究探索前沿技术,引入或者自研相关工具及平台,持续提升团队的测试效率及能力。任职要求1.&nbsp;大学本科及以上学历,5年以上&nbsp;QA工作经验,有10人以上团队管理经验;2.&nbsp;熟悉企业级人事线系统质量把控经验优先;有企业级服务线质量把控经验者优先;3.&nbsp;熟练使用一种脚本语言(Python/Go/Java)、各种测试工具(postman/jmeter,charles/fiddler)、有白盒QA能力;4.&nbsp;具有企业级应用项目的实践经验,负责过至少一条完整业务线的质量保障工作,具备良好的逻辑能力,能熟练故障定位,安全测试,性能优化;5.&nbsp;有较好的沟通能力和团队合作精神,对技术有激情,面对压力有很好的抗压能力和积极的心态,有良好的协调推进能力;6.&nbsp;主动总结提升质量保障过程,积极参与整理线上复盘,持续提升团队产出质量。面向对象常规社招投递链接https://jobs.mihoyo.com/?sharePageId=33869&amp;recommendationCode=NTAWnlu&amp;isRecommendation=true#/position/773#内推##社招##测试#
投递米哈游等公司8个岗位
点赞 评论 收藏
转发
4 30 评论
分享
牛客网
牛客企业服务