0


大数据面试八股文之 hive 篇

👉👉👉 哈喽!大家好,我是【大数据的奇妙冒险】的作者 ,具有 Java 以及大数据开发经验,目前是一位大数据领域项目经理。
擅长 Java、大数据开发、项目管理等。持有 PMP 和 系统架构设计师证书,可以说是持证上岗了😀
如果有对【大数据】感兴趣的朋友,欢迎关注 公 众 号【大数据的奇妙冒险】

前言:网上大数据开发工程师的面试题相对较少,且比较杂乱分散,有的甚至没有答案。为了广大数据人着想,总结了大数据面试题,并给出答案,希望能有所帮助。

目录

为什么要使用 Hive? hive 的优缺点?Hive的作用是什么?

这几个问题比较类似,实际上就是要你回答 hive 的特点:

  • 提供类SQL查询,容易上手,开发方便;
  • 封装了很多方法,尽量避免了开发MapReduce程序,减少成本;
  • 适用于处理大规模数据,小数据的处理没有优势;
  • 执行延迟较高,适合用于数据分析,不适合对时效性要求较高的场景。

说下Hive是什么? 跟数据库区别?

hive 是用于大数据分析处理的工具,存储基于 HDFS,计算基于 MapReduce 或 Spark,提供类 SQL 查询。

hive 除了可以通过类 SQL 查询这一点和数据库有点关系外,其它基本没啥关联。

  • 数据库支持事务,可读可写;而hive一般不支持事务(高版本除外),一般用于读多写少的情况,不建议改动数据,因为数据存储在HDFS中,而HDFS的文件不支持修改;
  • hive延迟比较大,因其底层是MapReduce,执行效率较慢。但当数据规模较大的情况下,hive的并行计算优势就体现出来了,数据库的效率就不如hive了;
  • hive不支持索引,查询的时候是全表扫描,这也是其延迟大的原因之一。

Hive内部表和外部表的区别?

  • 外部表在建表的时候需要加关键字 EXTERNAL;
  • 创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径, 不对数据的位置做任何改变;
  • 删除内部表会直接删除元数据【metadata】及存储数据,删除外部表仅仅删除元数据,HDFS上的文件不会被删除;
  • 内部表数据存储在hive.metastore.warehouse.dir【默认:/user/hive/warehouse】,外部表数据存储位置由用户自己决定。

Hive建表语句?创建表时使用什么分隔符?

CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name
[(col_name data_type [COMMENT col_comment], ...)]
[COMMENT table_comment]
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
[CLUSTERED BY (col_name, col_name, ...)
[SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
[ROW FORMAT row_format]
[STORED AS file_format]
[LOCATION hdfs_path]
[TBLPROPERTIES (property_name=property_value, ...)]
[AS select_statement | like⑩ table_name]

Hive数据倾斜以及解决方案

参考:浅谈数据倾斜的原因及解决办法

Hive的三种自定义函数是什么?它们之间的区别是什么?

  • UDF:用户自定义函数,user defined function。一对一的输入输出。
  • UDTF:用户自定义表生成函数。user defined table-generate function.一对多的输入输出。
  • UDAF:用户自定义聚合函数。user defined aggregate function,多对一的输入输出比如count sum等。

Hive的cluster by、sort by、distribute by、order by区别?

  • order by:全局排序,一个reducer;
  • sort by:分区内排序;
  • distribute by:控制map结果的分发,相同值会被分发到同一个map;
  • cluster by:当distribute by和sort by用的同一个字段,可以用这个关键字,不能指定排序顺序。

Hive分区和分桶的区别

分区针对的是数据的存储路径;分桶针对的是数据文件。

参考:hive从入门到放弃(四)——分区和分桶

Hive的执行流程

1.(执行查询操作)Execute Query
命令行或Web UI之类的Hive接口将查询发送给Driver(任何数据库驱动程序,如JDBC、ODBC等)以执行。
2.(获取计划任务)Get Plan
Driver借助查询编译器解析查询,检查语法和查询计划或查询需求
3.(获取元数据信息)Get Metadata
编译器将元数据请求发送到Metastore(任何数据库)。
4.(发送元数据)Send Metadata
Metastore将元数据作为对编译器的响应发送出去。
5.(发送计划任务)Send Plan
编译器检查需求并将计划重新发送给Driver。到目前为止,查询的解析和编译已经完成
6.(执行计划任务)Execute Plan
Driver将执行计划发送到执行引擎。
7.(执行Job任务)Execute Job
在内部,执行任务的过程是MapReduce Job。执行引擎将Job发送到ResourceManager,
ResourceManager位于Name节点中,并将job分配给datanode中的NodeManager。在这里,查询执行MapReduce任务.
7.1.(元数据操作)Metadata Ops
在执行的同时,执行引擎可以使用Metastore执行元数据操作。
8.(拉取结果集)Fetch Result
执行引擎将从datanode上获取结果集;
9.(发送结果集至driver)Send Results
执行引擎将这些结果值发送给Driver。
10.(driver将result发送至interface)Send Results
Driver将结果发送到Hive接口

Hive SQL优化处理

  • 优先过滤,过滤后的结果集再进行处理;
  • count(distinct) 改成 sum + group by 的组合;
  • 大小表注意 MapJoin;
  • 使用分区;
  • 注意数据倾斜相关的问题,可参考:

Hive的存储引擎和计算引擎

存储:HDFS; 计算引擎:MR 或 Spark

Hive的文件存储格式都有哪些?

参考:hive从入门到放弃(五)——数据存储格式

介绍下知道的Hive窗口函数,举一些例子

参考:通俗易懂:窗口函数 | 全是案例

Hive的union和union all的区别?

  • Union:将多个结果合并为一个,且结果去重且排序
  • Union all:将多个结果合并为一个,且结果不去重不排序

Hive的join操作原理?

在 Map 阶段将 on 的字段设为 key,然后将选择的字段集作为 value;
在 Reduce 阶段将相同 key 值的数据分发到同一个 Reducer。

Hive如何优化join操作

  • 若有大量 null key,则过滤掉或者赋随机值;
  • 若大小表 join,可使用 MapJoin;
  • 若两张大表 join ,可将倾斜的 key 过滤出来单独 join,则会分散到多个 task 进行 join 操作,最后再进行 union

Hive的mapjoin

mapjoin 会将小表数据加载到内存中,在 Map 阶段完成 join 操作。

Hive有哪些保存元数据的方式,都有什么特点?

  • 内嵌模式:将元数据保存在本地内嵌的derby数据库中,内嵌的derby数据库每次只能访问一个数据文件,也就意味着它不支持多会话连接。
  • 本地模式:将元数据保存在本地独立的数据库中(一般是mysql),这可以支持多会话连接。
  • 远程模式:把元数据保存在远程独立的mysql数据库中,避免每个客户端都去安装mysql数据库。

内存数据库derby,占用空间小,但是数据存于内存,不稳定;

mysql数据库,数据存储模式可自己设置,持久化好,查看方便。

Hive SOL实现查询用户连续登陆,讲讲思路

参考:面试官:“如何用 SQL 查询每个用户最大连续登录日期?”

row_number,rank,dense_rank的区别

  • row_number 表示行数,每行都是前面基础加1;
  • rank 是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内)
  • dense_rank 是连续排序,有两个第二名时仍接下来即使第三名。

Hive count(distinct)有几个reducer,海量数据会有什么问题

如果没有 group by 就是一个 Reducer,海量数据用一个reducer执行效率过慢,甚至造成内存溢出。

开窗函数中加Order By和不加Order By的区别?

当为排序函数,如row_number(),rank()等时,over中的order by只起到窗口内排序作用。

当为聚合函数,如max,min,count等时,over中的order by不仅起到窗口内排序,还起到窗口内从当前行到之前所有行的聚合,不加则整个分区聚合。

Hive里metastore是干嘛的?

客户端连接 metastore,metastore 再去连接 MySQL 存取元数据。

使得多个客户端可以同时连接,且这些客户端无需知道 MySQL 数据库的用户名密码,只需连接 metastore 服务即可。

parquet文件优势

可参考:hive从入门到放弃(五)——数据存储格式


以上的 hive 篇先总结到这,如果觉得文章对你有帮助,可以点个小赞加收藏。如果有误,欢迎大家指正,谢谢!

后续如果有新的题目,会继续更新。同时后续有空会继续更新其它篇章的内容,欢迎大家关注工 z 号【大数据的奇妙冒险

标签: 大数据 hive 面试

本文转载自: https://blog.csdn.net/weixin_43596734/article/details/128276047
版权归原作者 大数据的奇妙冒险 所有, 如有侵权,请联系我们删除。

“大数据面试八股文之 hive 篇”的评论:

还没有评论