Hive高频面试题及参考答案.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

Hive高频面试题及参考答案

一、基础概念类

1.什么是Hive?它和传统数据库的区别是什么?

答案:Hive是基于Hadoop的数仓工具,本质是“SQL解析引擎”,把SQL翻译成MapReduce/Tez/Spark任务执行,不存储数据(数据存在HDFS),也不负责数据计算(依赖分布式计算框架)。

和传统数据库(如MySQL)的核心区别:

维度

Hive

传统数据库(MySQL)

存储层

依赖HDFS(分布式存储)

本地文件系统/专有存储

计算层

MapReduce/Tez/Spark

自身计算引擎

延迟

高(批处理)

低(实时查询)

数据规模

PB级

GB级以下

事务支持

弱(Hive3.0后支持ACID)

强(ACID完整支持)

适用场景

离线数据分析

在线事务处理(OLTP)

2.Hive的元数据(MetaStore)是什么?默认存在哪里?怎么修改存储位置?

答案:元数据是Hive表的“说明书”,记录表名、字段类型、分区信息、数据存储路径、分隔符等核心信息,Hive执行SQL时先查元数据才能定位数据。

默认存储在Derby数据库(嵌入式数据库,缺点:单会话访问,多用户同时用会报错)。

修改存储位置:用MySQL存储元数据(生产环境常用),步骤:

安装MySQL,创建hive元数据库(如hive_meta);

拷贝MySQL驱动包到Hive的lib目录;

修改hive-site.xml,配置MySQL连接信息(URL、用户名、密码)。

3.Hive中的内部表(ManagedTable)和外部表(ExternalTable)的区别?怎么选择?

答案:核心区别在“数据控制权”和“删除行为”:

内部表:Hive完全管理数据,删除表时会同时删除HDFS上的原始数据,元数据和数据绑定紧密;

外部表:Hive只管理元数据,删除表时只删元数据,不删HDFS数据,数据可被其他工具(如Spark)共享。

选择原则:

若数据是Hive专属,无需共享,用内部表(如临时中间表);

若数据需多工具共享(如Hive和Spark共用一份数据),或担心误删表导致数据丢失,用外部表(生产环境优先外部表)。

二、SQL实操类

4.Hive中怎么创建分区表?分区表的作用是什么?

答案:分区表是按指定字段(如日期、地区)将数据拆分存储的表,目的是减少查询时扫描的数据量(只扫描目标分区,不用全表扫描)。

创建语法(以按日期dt分区为例):

--单分区表

createexternaltableifnotexistslog_table(

user_idstring,

actionstring,

timestring

)

partitionedby(dtstring)--分区字段(非数据原有字段,是目录划分依据)

rowformatdelimitedfieldsterminatedby\t

location/user/hive/warehouse/log_table/;

--插入数据(指定分区)

insertintolog_tablepartition(dt=2024-05-20)

selectuser_id,action,timefromraw_logwheredt=2024-05-20;

--查询指定分区(高效)

select*fromlog_tablewheredt=2024-05-20;

注意:分区字段是“虚拟字段”,数据文件中没有该字段,存储时HDFS会按“dt=2024-05-20”创建子目录,查询时通过过滤分区字段快速定位目录。

5.Hive中怎么处理数据倾斜?常见场景和解决方案?

答案:数据倾斜是MapReduce任务中,某几个Reduce任务处理的数据量远超其他,导致整个任务卡顿(“长尾效应”),核心原因是key分布不均(如某key对应100万条数据,其他key仅几千条)。

常见场景及解决方案:

场景1:join时大表和小表关联,小表数据量极小

解决方案:用MapJoin(将小表加载到内存,在Map端完成join,无需Reduce),Hive默认自动开启MapJoin(阈值可通过hive.auto.convert.join=true配置),也可手动指定:

select/*+MAPJOIN(small_table)*/a.*,b.*

frombig_tableajoinsmall_tablebona.id=b.id;

场景2

文档评论(0)

151****9429 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档