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任务数量是相等的。

posted @   a-tao必须奥利给  阅读(176)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示