2023.8.8巨人网络数据开发工程师面试复盘

1 概述 问题一览

总体感觉良好,通过面试官的介绍可知这个岗位偏向离线数仓。

1.自我介绍

2.询问了其中一段实习经历

3.讲下你说用过的Linux命令

4.讲下HIVE的内部表和外部表有什么不同

*5.讲下你使用过的Hive函数(好好在复习下多准备几个吧)

*6.请讲下维度建模和范式建模的区别(自上而下,自底而上,关系-实体,事实-维度)

*7.为什么关系型数据库更适合范式建模而数仓适合维度建模

8.讲下数据倾斜

*9.HIVE的分区和分桶(分区是放在不同目录下,分桶是放在不同文件中)

10.什么是Hive-on-mr什么是Hive-on-spark

11.又问了简历的另一段实习经历

*12.复述下你曾经做过的一个数据科学的项目,你做了多少,是不是你一个人做的(这个问题失误在于,没有挑典型项目讲,现在要准备下稿子)

12.这个岗位是实习岗,不会影响你秋招吗

12.经典的反问环节

2 题目总结

2.1 讲下HIVE的内部表和外部表有什么不同

  1. 未被external修饰的是内部表,被external修饰的为外部表。
  2. 内部表数据由Hive自身管理,外部表数据由HDFS管理;
  3. 内部表数据存储的位置是hive.metastore.warehouse.dir(默认:/user/hive/warehouse), 外部表数据的存储位置由自己设置;
  4. 删除内部表会直接删除元数据(metadata)及存储数据;删除外部表仅仅会删除元数据,HDFS上的文件并不会被删除。

2.2 讲下你使用过的Hive函数

HIVE 常用函数总结https://www.zhihu.com/tardis/zm/art/102502175?source_id=1005

  1. 向下取整函数: floor
  2. 指定精度取整函数: round
  3. 向上取整函数: ceil
  4. 取随机数函数: rand
  5. 绝对值函数: abs
  6. 日期转年函数: year
  7. 日期转月函数: month
  8. 日期转天函数: day

2.3 请讲下维度建模和范式建模的区别

数据仓库的两种建模方法(范式建模和维度建模)_数据仓库 数据建模_Happybigman的博客-CSDN博客数据仓库的两种建模方法范式建模Inmon提出的集线器的自上而下(EDW-DM)的数据仓库架构。操作型或事务型系统的数据源,通过ETL抽取转换和加载到数据仓库的ODS层,然后通过ODS的数据建设原子数据的数据仓库EDW,EDW不是多维格式的,不方便上层应用做数据分析,所以需要通过汇总建设成多维格式的数据集市层。优势:易于维护,高度集成;劣势:结构死板,部署周期较长范式建模应用在EDW层..._数据仓库 数据建模https://blog.csdn.net/baidu_20183817/article/details/104991764

2.4 为什么关系型数据库更适合范式建模而数仓适合维度建模

范式建模的优缺点

优点

  1. 节约存储(尤其是利用数据库进行数仓建设的时候)
  2. 规范化带来的好处是通过减少数据冗余提高更新数据的效率,同时保证数据完整性。
  3. 结构清晰,易于理解

缺点

  1. 构建比较复杂
  2. 查询复杂(需要很多的关联)
  3. 不适合在大数据环境下构建因为两点:1 查询复杂 2 存储很便宜

**总结:**由于建模方法限定在关系型数据库之上,在某些时候反而限制了整个数据仓库模型的灵活性,性能等,特别是考虑到数据仓库的底层数据向数据集市的数据进行汇总时,需要进行一定的变通才能满足相应的需求。

2.5 讲下数据倾斜

  • 空值引发的数据倾斜
    解决方案:
    第一种:可以直接不让null值参与join操作,即不让null值有shuffle第二种:因为null值参与shuffle时的hash结果是一样的,那么我们可以给null值随机赋值,这样它们的hash结果就不一样,就会进到不同的reduce中
  • 不同数据类型引发的数据倾斜
    解决方案:
    如果key字段既有string类型也有int类型,默认的hash就都会按int类型来分配,那我们直接把int类型都转为string就好了,这样key字段都为string,hash时就按照string类型分配了
  • 不可拆分大文件引发的数据倾斜
    解决方案:
    这种数据倾斜问题没有什么好的解决方案,只能将使用GZIP压缩等不支持文件分割的文件转为bzip和zip等支持文件分割的压缩方式。
    所以,我们在对文件进行压缩时,为避免因不可拆分大文件而引发数据读取的倾斜,在数据压缩的时候可以采用bzip2和Zip等支持文件分割的压缩算法。
  • 数据膨胀引发的数据倾斜
    解决方案:
    在Hive中可以通过参数 hive.new.job.grouping.set.cardinality 配置的方式自动控制作业的拆解,该参数默认值是30。表示针对grouping sets/rollups/cubes这类多维聚合的操作,如果最后拆解的键组合大于该值,会启用新的任务去处理大于该值之外的组合。如果在处理数据时,某个分组聚合的列有较大的倾斜,可以适当调小该值。
  • 表连接时引发的数据倾斜
    解决方案:
    通常做法是将倾斜的数据存到分布式缓存中,分发到各个Map任务所在节点。在Map阶段完成join操作,即MapJoin,这避免了 Shuffle,从而避免了数据倾斜。
  • 其他情况引发的数据倾斜
    解决方案:
    这类问题最直接的方式就是调整reduce所执行的内存大小。
    调整reduce的内存大小使用mapreduce.reduce.memory.mb这个配置。

2.6 HIVE的分区和分桶的区别

  • 分区是按照分区字段在HDFS上建立子文件夹,分区内的数据存放在子文件夹内,查询时不需要全局扫描,只扫描对应分区文件夹的数据。

  • 而分桶是按分桶字段对数据取hash值,值相同的放在同一个分桶文件里,分桶生成的是分桶文件,分区对应的是子文件夹。

相关推荐
找方案3 小时前
AI+人力资源:AI招聘面试的兴起与争议
人工智能·面试·职场和发展
测试老哥8 小时前
接口测试的测试用例应该怎么写?
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·接口测试
CC数分9 小时前
2026年HRBP岗位硬性要求和加分项
面试·职场和发展·数据分析
2601_962680229 小时前
数据分析面试常考的SQL题和业务题分别是哪几类?
sql·面试·数据分析
黄敬峰10 小时前
一文搞懂 Agentic RAG:用 LangGraph 打造会思考的智能检索架构
面试
晚安日记wanna11 小时前
SSR 为什么不适合登录态从水合冲突到缓存串号
前端·react.js·面试
晚安日记wanna11 小时前
压测 TPS 卡在 800CPU 只跑四成六步定位法
运维·面试·测试
晚安日记wanna11 小时前
批量请求失败只弹一个 Toast面试官想听五层
前端·面试·架构
晚安日记wanna11 小时前
TS const 类型参数一道面试题的四层追问
前端·面试·typescript
晚安日记wanna11 小时前
大表 DDL 面试翻车现场Online DDL 为什么还会锁死业务
数据库·面试·架构