欢迎点击此处关注公众号。

1.说一下实习和学校做过什么事情,有什么收获。

问了一些细节。

2.Hive 怎么把 SQL 编译成 MapReduce

Hive 的基本流程:

  • UI 调用 DRIVER 的接口;

  • DRIVER 为查询创建会话句柄,并将查询发送到 COMPILER 生成执行计划;

  • COMPILER 从元数据存储中获取本次查询所需要的元数据,该元数据用于对查询树中的表达式进行类型检查,以及基于查询谓词修建分区;

  • COMPILER 生成的计划是分阶段的 DAG,每个阶段要么是 map/reduce 作业,要么是一个元数据或者 HDFS 上的操作。将生成的计划发给 DRIVER。如果是 map/reduce 作业,该计划包括 map operator trees 和一个 reduce operator tree,执行引擎将会把这些作业发送给 MapReduce。

  • 执行引擎将这些阶段提交给适当的组件。在每个 task(mapper/reducer) 中,从 HDFS 文件中读取与表或中间输出相关联的数据,并通过相关算子树传递这些数据。最终这些数据通过序列化器写入到一个临时 HDFS 文件中(如果不需要 reduce 阶段,则在 map 中操作)。临时文件用于向计划中后面的 map/reduce 阶段提供数据。

  • 最终的临时文件将移动到表的位置,确保不读取脏数据(文件重命名在 HDFS 中是原子操作)。对于用户的查询,临时文件的内容由执行引擎直接从 HDFS 读取,然后通过 Driver 发送到 UI。

编译 SQL 的任务是在上述的 COMPILER(编译器组件)中完成的。Hive 将 SQL 转化为 MapReduce 任务,整个编译过程分为六个阶段:

  1. 词法、语法解析:将 SQL 转化为抽象语法树 AST Tree;
  2. 语义解析:遍历 AST Tree,抽象出查询的基本组成单元 QueryBlock;
  3. 生成逻辑执行计划:遍历 QueryBlock,翻译为执行操作树 OperatorTree;
  4. 优化逻辑执行计划:逻辑层优化器进行 OperatorTree 变换,合并 Operator,达到减少 MapReduce Job,减少数据传输及 shuffle 数据量;
  5. 生成物理执行计划:遍历 OperatorTree,翻译为 MapReduce 任务;
  6. 优化物理执行计划:物理层优化器进行 MapReduce 任务的变换,生成最终的执行计划。

其中重点是第 5 点生成物理执行计划。举例说明:

例 1 join on:

select u.name, o.orderid
from order o
join user u on o.uid = u.uid;

关于 join:在 map 的输出 value 中为不同表的数据打上 tag 标记,在 reduce 阶段根据 tag 判断数据来源。

关于 on:on 后面的字段就是 key,shuffle 的时候相同的 key 会进入同一个 reducer 中。

最后同一个 reduce 中 tag 不同的进行组合即可。

例 2 Group By:

select rank, isonline, count(*)
from city
group by rank, isonline;

将 Group By 的字段组合为 map 的输出 key 值,利用 MapReduce 的排序,在 reduce 阶段保存 LastKey 区分不同的 key。MapReduce 的过程如下:

例 3 Distinct:

select dealid, count(distinct uid) num
from order
group by dealid;

当只有一个 distinct 字段时,如果不考虑 Map 阶段的 Hash Group By,只需要将 Group By 字段和 Distinct 字段组合为 map 输出 key,利用 mapreduce 的排序,同时将 Group By 字段作为 reduce 的 key,在 reduce 阶段保存 LastKey 即可完成去重。

3.Hive 调优用过哪些

小表大表Join(MapJoin)。

开启 Map 端聚合参数设置,防止数据倾斜。

一般 COUNT DISTINCT 使用先 GROUP BY 再 COUNT 的方式替换。

尽量避免笛卡尔积。

合理设置 Map 及 Reduce 数。

小文件进行合并。

严格模式:where 语句中含有分区字段过滤条件来限制范围,否则不允许执行。

JVM 重用。

压缩。

4.map join 的原理

mapJoin 适用于大表 join 小表,使用 DistributedCache 机制将小表存储到各个 Mapper 进程所在机器的磁盘空间上,各个 Mapper 进程读取不同的大表分片,将分片中的每一条记录与小表中所有记录进行合并。
合并后直接输出 map 结果即可得到最终结果。不需要进行 shuffle 流程,也不需要 reduce 处理。

5.从头到尾搭建数仓的环境,会有什么问题

框架选型:Apache、CDH、云服务器,各组件的兼容性。

服务器选型:数据量、预算、多久不扩容,算出需要对 CPU、内存、磁盘,集群规模。

节点功能规划:哪些机器部署哪些框架。

  • 消耗内存的分开;
  • kafka 、zk 、flume 传输数据比较紧密的放在一起;
  • 客户端尽量放在一到两台服务器上,方便外部访问;
  • 有依赖关系的尽量放到同一台服务器。

6.Linux 常用命令?一台新电脑要看配置(内存、磁盘、CPU)怎么看

常用命令

命令 命令解释
top 查看内存
df -h 查看磁盘存储情况
iotop 查看磁盘IO读写
iotop -o 直接查看比较高的磁盘读写程序
netstat -tunlp | grep 端口号 查看端口占用情况
uptime 查看报告系统运行时长及平均负载
ps -ef 查看进程

linux 查看 cpu 信息的方法:使用 “cat /proc/cpuinfo” 命令。

7.JVM 的内存模型

8.查看 JVM 信息的命令

  • jps:查看本地正在运行的 Java 进程和进程 ID(pid)。
  • jinfo pid:查看指定 pid 的所有 JVM 信息。
    • jinfo -flags pid:查询虚拟机运行参数信息。
    • jinfo -flag name pid:查询具体参数信息。
  • jmap:
    • jmap -heap pid:输出堆内存设置和使用情况
    • jmap -histo pid:输出 heap 的直方图,包括类名,对象数量,对象占用大小
    • jmap -histo:live pid:同上,只输出存活对象信息
    • jmap -clstats pid:输出加载类信息
    • jmap -help:jmap 命令帮助信息
  • jstat:Java 虚拟机统计工具,全称 “Java Virtual Machine statistics monitoring tool”。可以用于监视 JVM 各种堆和非堆内存大小和使用量。
  • jstat -class pid:输出加载类的数量及所占空间信息。
  • jstat -gc pid:输出 gc 信息,包括 gc 次数和时间,内存使用状况(可带时间和显示条目参数)。
  • jstack:用于打印指定 Java 进程、核心文件或远程调试服务器的 Java 线程的 Java 堆栈跟踪信息。jstack 命令可以生成 JVM 当前时刻的线程快照。线程快照是当前 JVM 内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。

9.别人写了一个 Java 程序,CPU 占用 100%,怎么查问题

上面的 6、7、8 都是这一问的铺垫。问题都是循序渐进的。

思路:定位 Java服务进程 → 定位 Java 线程 → 定位代码块。

  1. 通过 top 命令可查看是哪个服务 cpu 使用率较高。
  2. 使用 ps 来分析进程和线程的占用情况。
  3. 采用 jstack 来进行虚拟机栈的区分。通过 16 进制的 TID 查找问题所在的代码块。

10.你相比于别人,工作上有什么优势。

该题是下面三个题的铺垫。

11.你怎么证明你的优势。

12.你要处理一个别人从来没解决过的问题,你怎么办。

13.假如昨天开源了一个大数据组件,没人知道应用场景,你怎么快速了解其应用场景。

【面经】联想大数据开发面经相关推荐

  1. 大数据开发面试题总结-超详细

    1.文件上传: 总结: 客户端上传请求--->namenode检查,返回响应--->客户端真正的文件上传请求,包括文件名,文件大小--->namenode返回上传节点--->客 ...

  2. 双非硕士阿里大数据开发面经(已拿offer)

    自我介绍 感谢群主峰哥秋招过程中的帮助,在年底前对秋招做一个总结分享给其他同学.先说一下本人情况,本人本硕都是双非高校计算机专业,秋招拿了商汤科技.阿里等多个大数据offer,主要是想给来自双非高校计 ...

  3. 2021年超全超详细的最新大数据开发面试题,附答案解析

    版本 时间 描述 V1.0 2020-12-18 创建 V1.2 2021-01-17 新增 spark 面试题 V1.3 2021-01-18 新增 kafka 面试题 V1.4 2021-01-2 ...

  4. 双非硕士阿里大数据开发面经(已拿offer)(建议收藏)

    推荐阅读: #秋招失利,如何把握春招?(大四.研三) #大三.研二的秋招备战路线(Java.大数据) ------ 自我介绍 感谢群主峰哥秋招过程中的帮助,在年底前对秋招做一个总结分享给其他同学.先说 ...

  5. 字节跳动大数据开发面试题-附答案

    此面试题来自牛客网友分享的字节跳动应届一面,面试时长一小时. 网友情况:985 本硕. 参考答案由本公众号提供.如有错误,欢迎指正! 以下为面试过程中提问,岗位为大数据开发: 自我介绍+项目介绍 为什 ...

  6. 2020网易大数据开发面试题整理 (提前批) (持续更新)

    博主近期在整理各大厂面试题,每天会更新一点,没有答案的题目,表示博主也不知道,有答案的题目也不一定正确,希望各位同学自主判断,如果博主有写错的地方,欢迎在评论区补充 1.spark数据倾斜怎么引起的? ...

  7. 2023秋招—大数据开发面经—网易云音乐

    一面 1.实习的工作内容是什么? 2.有写过UDF吗?如何实现UDF? 3.UDF要成为永久函数怎么做?如果不加temperory,函数下次还能用吗? 4.UDTF了解吗? 5.Hive的窗口函数有了 ...

  8. 2023秋招—大数据开发面经—多益网络

    一面 hr面:问个人情况,问官网投递时回答的一些问题 二面--技术面 1.实习的工作是什么? 2.SQL调优有哪些? 3.介绍一下项目,主要做什么工作?(项目介绍还不顺畅) 4.为什么学大数据? 5. ...

  9. 【面经】Thoughtworks 大数据开发面经

    1.自我介绍 2.结对编程 面试之前会给一个 GitHub 仓库,需要提前下载,配置环境,运行代码,熟悉代码. 2.1 讲一下代码是干什么的 提前熟悉理解即可. 2.2 知道 TDD 吗 测试驱动开发 ...

最新文章

  1. Visual Paradigm 教程[UML]:如何在序列图中应用消息编号?
  2. github生成密钥
  3. NPOI 菜鸟实践行之根据指定的模板生成Excel 2003格式的文件 (一)
  4. mac/windows 端口占用解决记录
  5. 使用日志审计查看MaxCompute执行过哪些操作
  6. 开源贡献 计算_现在贡献开源的3个理由
  7. Compose Multiplatform 正式官宣,与 Flutter 必有一战?
  8. Excel 将换行符替换为空
  9. java类中静态变量自增_Java中静态变量(类变量)、实例变量、局部变量和成员变量...
  10. 【生信】统计学基础知识
  11. imx6ull设备树
  12. python代码格式化神器_牛逼啊!一个随时随地写Python代码的神器
  13. python爬虫---如何爬取京东商品评论并进行数据存储
  14. a股用计算机模拟走势,告诉你A股今后几天惊现千股涨停
  15. Pyhton之模拟石头剪子布游戏篇
  16. 苹果微信点开才会收到信息_安卓版微信黑暗模式来了!这次你会更新吗?附微信7.0.13安装包...
  17. windows添加右键菜单
  18. jquery input change事件
  19. VUE开发环境下mock模拟数据与后端接口对接示例
  20. 西工大数据库实验大作业 火锅店菜品管理系统

热门文章

  1. android路由框架的好处,严选 Android 路由框架优化(下篇)
  2. 个人bashrc配置
  3. javascript数组去重
  4. 婚姻是一幅波澜壮阔的画卷,不要让它成为没完没了的战争
  5. COP-Digit_chapter6.1_190422
  6. 为什么说混合云是新基建的流行架构?
  7. iOS简单的手写汉字识别
  8. 树莓派盒子性能监控管理
  9. 快速搭建K8S学习环境(二)
  10. ARM base instruction -- ldm