Hive-day08_hive常见面试题总结:
Hive 常见面试题总结:
1、Hive的HSQL转换为MapReduce的过程?
1、HiveSQL ->AST(抽象语法树) -> QB(查询块) ->OperatorTree(操作树)->优化后的操作树->mapreduce任务树->优化后的mapreduce任务树
2、请说明hive中 Sort By,Order By,Cluster By,Distrbute By各代表什么意思?
2、 order by:会对输入做全局排序,因此只有一个reducer(多个reducer无法保证全局有序)。只有一个reducer,会导致当输入规模较大时,需要较长的计算时间。
sort by:不是全局排序,其在数据进入reducer前完成排序。
distribute by:按照指定的字段对数据进行划分输出到不同的reduce中。
cluster by:除了具有 distribute by 的功能外还兼具 sort by 的功能。
3、Hive内部表和外部表的区别?
3、创建表时:创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。
删除表时:在删除表的时候,内部表的元数据和数据会被一起删除, 而外部表只删除元数据,不删除数据。这样外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据。
4、Hive 中的压缩格式TextFile、SequenceFile、RCfile 、ORCfile各有什么区别?
4、1、TextFile
默认格式,存储方式为行存储,数据不做压缩,磁盘开销大,数据解析开销大。可结合Gzip、Bzip2使用(系统自动检查,执行查询时自动解压),但使用这种方式,压缩后的文件不支持split,Hive不会对数据进行切分,从而无法对数据进行并行操作。并且在反序列化过程中,必须逐个字符判断是不是分隔符和行结束符,因此反序列化开销会比SequenceFile高几十倍。
2、SequenceFile
SequenceFile是Hadoop API提供的一种二进制文件支持,存储方式为行存储,其具有使用方便、可分割、可压缩的特点。
SequenceFile支持三种压缩选择:NONE,RECORD,BLOCK。Record压缩率低,一般建议使用BLOCK压缩。
优势是文件和hadoop api中的MapFile是相互兼容的
3、RCFile
存储方式:数据按行分块,每块按列存储。结合了行存储和列存储的优点:
首先,RCFile 保证同一行的数据位于同一节点,因此元组重构的开销很低;
其次,像列存储一样,RCFile 能够利用列维度的数据压缩,并且能跳过不必要的列读取;
4、ORCFile
存储方式:数据按行分块 每块按照列存储。
压缩快、快速列存取。
效率比rcfile高,是rcfile的改良版本。
总结:相比TEXTFILE和SEQUENCEFILE,RCFILE由于列式存储方式,数据加载时性能消耗较大,但是具有较好的压缩比和查询响应。
数据仓库的特点是一次写入、多次读取,因此,整体来看,RCFILE相比其余两种格式具有较明显的优势。
5、Hive的函数:UDF、UDAF、UDTF的区别?
5、 UDF:单行进入,单行输出
UDAF:多行进入,单行输出
UDTF:单行输入,多行输出
6、row_number(),rank()和dense_rank()的区别
6、row_number():根据查询结果的顺序计算排序,多用于分页查询
rank():排序相同时序号重复,总序数不变
dense_rank():排序相同时序号重复时,总序数减少
7、Hive如何实现分区
7、建表:create table tablename(col1 string) partitioned by(col2 string);
添加分区:alter table tablename add partition(col2=’202101’);
删除分区:alter table tablename drop partition(col2=’202101’);
8、Hive与传统数据库的区别?hive与mysql的区别?
8、Hive和数据库除了拥有类型的查询语言外,无其他相似
存储位置:Hive数据存储在HDFS上。数据库保存在块设备或本地文件系统
数据更新:Hive不建议对数据改写。数据库通常需要经常修改
执行引擎:Hive通过MapReduce来实现。数据库用自己的执行引擎
执行速度:Hive执行延迟高,但它数据规模远超过数据库处理能力时,Hive的并行计算能力就体现优势了。数据库执行延迟较低
数据规模:hive大规模的数据计算。数据库能支持的数据规模较小
扩展性:Hive建立在Hadoop上,随Hadoop的扩展性。数据库由于ACID语义[wh1] 的严格限制,扩展有限
9、数据倾斜怎么解决?什么是数据倾斜?数据倾斜是如何造成的?
详情请看上一篇博客
10、为什么要对数据仓库分层
1.用空间换时间:数仓的发展已经几十年了,在大数据技术出现之前,我们一般采用Oracle等一些关系型数据库来做数仓,但随着数据量的发展,特别是电信和银行业务的快速发展(那时候互联网企业还没起来),在进行一个数仓应用开发过程中,我们需要分很多步骤来进行,所以会考虑用空间来换时间,包括现在市面上也会有一些用空间换时间这样的OLAP产品。
2.减少重复开发:可以把一些指标用到的汇总数据进行抽象,建立一个或者多个模型,这些模型可以支撑我们建立多个数仓报表,这一步需要对业务非常了解,不然就会出现上面问题说的“ 还会经常有多层数据重复?”
3.复杂的问题简单化:做过传统数仓的都知道,以前Oracle的存储过程会写几千行,所以现在我们一般很少写几千行的业务ETL逻辑了,而是分为多个ETL过程,从明细层到应用层进行逻辑拆解,中间也会进行一些逻辑合并,形成模型层。
4.数据安全:通过分层,可以更方便地对不同层,不同的数据模型进行权限管理,特定业务场景下,对不同的开发人员和业务人员屏蔽一些敏感的数据。
11、Hive优化有哪些
详情请看上一篇博客
12、Hive的两张表关联,使用MapReduce怎么实现?
12、如果其中有一张表为小表,直接使用map端join的方式(map端加载小表)进行聚合。
如果两张都是大表,那么采用联合key,联合key的第一个组成部分是join on中的公共字段,
第二部分是一个flag,0代表表A,1代表表B,由此让Reduce区分客户信息和订单信息;
在Mapper中同时处理两张表的信息,将join on公共字段相同的数据划分到同一个分区中,进而传递到一个Reduce中,然后在Reduce中实现聚合。
13、说说对Hive桶表的理解?
桶表就是对数据进行hash取值,然后放在不同的文件中存储。
桶表加载数据,对字段进行hash取值,结果与桶的数量取模,取模的结果决定这些数据放在哪个桶中。物理上来讲,桶表就是表目录下的一个文件,桶表的数量和reduce任务数量是相等的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理