Hive重点面试题

文章目录

      • [Hive 面试重点题目及答案](#Hive 面试重点题目及答案)
        • [1. Hive的优缺点及使用场景](#1. Hive的优缺点及使用场景)
        • [2. Hive与数据仓库的区别](#2. Hive与数据仓库的区别)
        • [3. Hive的基本架构与元数据存储](#3. Hive的基本架构与元数据存储)
        • [4. Hive内外部表的区别及适用场景](#4. Hive内外部表的区别及适用场景)
        • [5. Hive数据倾斜原因与解决方法](#5. Hive数据倾斜原因与解决方法)
        • [6. Hive MapReduce的底层实现与优化方式](#6. Hive MapReduce的底层实现与优化方式)
        • [7. Hive窗口函数的使用场景](#7. Hive窗口函数的使用场景)
        • [8. Hive分区与分桶的区别](#8. Hive分区与分桶的区别)
        • [9. Hive的存储格式](#9. Hive的存储格式)
        • [10. Hive计算引擎(MapReduce, Tez, Spark)的对比](#10. Hive计算引擎(MapReduce, Tez, Spark)的对比)

Hive 面试重点题目及答案

1. Hive的优缺点及使用场景

问题:说下为什么要使用Hive?Hive的优缺点?Hive的作用是什么?

答案

  • 优点
    1. 类SQL语法,简单易学,开发成本低。
    2. 避免直接编写MapReduce程序,简化开发。
    3. 适合海量数据处理,特别是离线数据分析。
    4. 支持用户自定义函数(UDF)。
  • 缺点
    1. 延迟高,不适合实时计算。
    2. HQL表达能力有限,迭代算法支持较差。
    3. 不支持记录级别的更新、插入或删除。
  • 使用场景
    • 大数据分析
    • 海量日志数据的批量处理
    • 数据仓库的建立
2. Hive与数据仓库的区别

问题:Hive是什么?与传统数据仓库有什么区别?

答案

  • Hive:基于Hadoop的数据仓库工具,可以将结构化数据映射为表,并提供类似SQL的查询功能,其本质是将HQL转化为MapReduce程序。
  • 传统数据仓库:通常是单体数据库,面向高效的事务处理。
  • 区别
    1. Hive面向离线分析,传统数据仓库可支持实时查询。
    2. Hive构建于HDFS之上,适合处理大规模分布式数据,传统数据仓库不适合分布式存储。
    3. Hive性能受限于MapReduce,传统数据仓库性能更高。
3. Hive的基本架构与元数据存储

问题:Hive的基本架构和元数据存储在哪里?

答案

  • 基本架构
    1. 用户接口:CLI、JDBC/ODBC、WebUI。
    2. 元数据存储:Metastore,默认使用Derby数据库,推荐使用MySQL等外部数据库。
    3. 执行引擎:将HQL转为MapReduce/Spark任务并执行。
    4. 存储:数据存储在HDFS。
4. Hive内外部表的区别及适用场景

问题:Hive内部表和外部表有什么区别?

答案

  • 内部表
    1. Hive管理表和数据,删除表时数据也会被删除。
    2. 默认存储位置:/user/hive/warehouse
  • 外部表
    1. 数据由用户管理,删除表时数据保留。
    2. 创建时指定数据路径。
  • 场景:外部表适合共享数据或保留原始数据。
5. Hive数据倾斜原因与解决方法

问题:什么是数据倾斜?如何解决?

答案

  • 数据倾斜:MapReduce任务中某些Reducer处理的数据量远大于其他Reducer,导致任务延迟。
  • 原因
    1. Key分布不均。
    2. SQL语句设计不当。
  • 解决方案
    1. SQL调优:对倾斜的Key值增加随机前缀。
    2. 参数调节:设置hive.groupby.skewindata=true
    3. 使用Map Join处理小表。
    4. 对空值进行单独处理或随机分配。
6. Hive MapReduce的底层实现与优化方式

问题:Hive SQL是如何转化为MapReduce的?如何优化?

答案

  • 转化过程
    1. 解析器:将HQL转换为抽象语法树(AST)。
    2. 优化器:重写逻辑查询计划,减少不必要的Reduce。
    3. 执行器:生成物理计划并提交任务。
  • 优化方法
    1. 提前过滤数据,减少输入量。
    2. 合并小文件,使用CombineHiveInputFormat
    3. 启用Map Join,避免数据倾斜。
    4. 调整Reducer数量,确保合理的任务分配。
7. Hive窗口函数的使用场景

问题:Hive窗口函数(如row_number, rank, dense_rank)的作用是什么?

答案

  • 作用:用于在分组内排序、排名或累积计算。

  • 常用函数

    1. row_number(): 为每个分组生成唯一序号。
    2. rank(): 按排序字段排名,排名相同会跳过名次。
    3. dense_rank(): 类似rank,但排名连续。
    4. sum() over(...): 按分组累积求和。
  • 示例

    复制代码
    SELECT name, SUM(cost) OVER(PARTITION BY name ORDER BY order_date) AS cumulative_cost
    FROM orders;
8. Hive分区与分桶的区别

问题:Hive的分区和分桶有什么区别?

答案

  • 分区:将数据存储在不同的目录中,通过指定列值过滤数据。

  • 分桶:将分区内的数据进一步分组存储在多个文件中,基于Hash函数划分。

  • 区别

    1. 粒度:分区是目录级别,分桶是文件级别。
    2. 性能:分桶适合提高采样查询效率。
  • 创建语句

    复制代码
    CREATE TABLE students (
        id INT, name STRING
    ) PARTITIONED BY (class STRING) CLUSTERED BY (id) INTO 4 BUCKETS;
9. Hive的存储格式

问题:Hive有哪些存储格式?各自特点是什么?

答案

  • TEXTFILE:默认格式,按行存储,不支持压缩。
  • SEQUENCEFILE:行存储,支持压缩,二进制格式。
  • ORC:列存储,支持索引,压缩率高,适合大数据分析。
  • PARQUET:列存储,查询效率高,压缩率次于ORC。
  • 选择建议:大规模数据分析优先选择ORC或PARQUET。
10. Hive计算引擎(MapReduce, Tez, Spark)的对比

问题:Hive支持哪些计算引擎?它们的区别是什么?

答案

  • MapReduce
    1. 默认引擎,稳定,但延迟高。
    2. 不适合复杂DAG任务。
  • Tez
    1. 支持DAG作业,消除中间存储,提高效率。
    2. Hive 1.1+支持。
  • Spark
    1. 低延迟,高性能。
    2. 支持内存计算,适合交互式查询。
  • 设置引擎
sql 复制代码
SET hive.execution.engine=tez;  -- 配置Tez引擎
相关推荐
姬激薄2 小时前
HDFS概述
大数据·hadoop·hdfs
依年南台2 小时前
克隆虚拟机组成集群
大数据·hadoop
多多*3 小时前
Java反射 八股版
java·开发语言·hive·python·sql·log4j·mybatis
yyf9601266 小时前
hiveserver2与beeline进行远程连接hive配置及遇到的问题
数据仓库·hive
yyf9601266 小时前
hive在配置文件中添加了hive.metastore.uris之后进入hive输入命令报错
hive
jiedaodezhuti7 小时前
hive两个表不同数据类型字段关联引发的数据倾斜
数据仓库·hive·hadoop
IvanCodes8 小时前
五、Hive表类型、分区及数据加载
大数据·数据仓库·hive
镜舟科技9 小时前
什么是数据集市(Data Mart)?
数据仓库·olap·数据集市·多维数据模型·在线分析处理·定制化数据
计算机人哪有不疯的9 小时前
Hadoop的组成,HDFS架构,YARN架构概述
大数据·数据库·hadoop·spark
SelectDB技术团队1 天前
顺丰科技:从 Presto 到 Doris 湖仓构架升级,提速 3 倍,降本 48%
大数据·数据库·数据仓库·信息可视化·数据分析·doris·实时分析