Apache Hive 面试问答题


在这篇博文中,我们将看看面试中出现的一些最常见的 apache hive 面试问题和答案。
1. 什么是Apache Hive?
Apache Hive 是一个构建在 Hadoop 之上的数据仓库基础设施,并在HDFS(Hadoop 分布式文件系统)中的数据之上提供表抽象,如其官方页面所述。用于为大数据集提供数据汇总、查询和分析。
 
2、我们为什么要使用Hive?
Hive 用于摘要、即席分析和数据挖掘、垃圾邮件检测和广告优化。Hive 的主要优点之一是它本质上是SQL。Hive 将其数据库元数据存储在 Hive Metastore 中。

它最适合用于处理大量不可变数据(如服务器日志或访问日志)的批处理作业。Hive 是读取模式而不是写入模式。这意味着它不会在加载期间检查数据,但会在发出查询时进行检查。
 
3. Hive 数据模型有哪些组件?
Apache Hive 数据模型具有以下组件。

  • 数据库:

它们是将表和其他数据单元与命名冲突分开的命名空间。
  • 表:  

Hive 表是具有相同模式的同类数据单元。这些表类似于关系数据库 (RDBMS),可以连接、联合并可以应用过滤器。Hive 表也有类似于 RDBMS 表的行和列。hive 中的表存储在 Hadoop 分布式文件系统 (HDFS) 中。
表的一个例子可以是视图表,其中每一行可以包含以下列(模式):

{timestamp: INT, userid: BIGINT, page_url: STRINGTYPE, referer_ur: STRINGTYPE, IP address: STRINGTYPE

  • 分区

配置单元中的分区是我们可以按某些标准划分表的方式。我们可以使用诸如日期之类的 hive 表列并相应地划分数据。下表显示了employee 根据列进行分区的hive 表employee_start_date

SELECT * FROM school_db.employee where employee_start_date='20211225';

在 Hive 表中,我们可以进一步将分区划分为称为桶的间隔。每个存储桶都是根据用作存储桶标准的列的哈希计算的。Hive 为分区的每个桶创建一个单独的文件。
 
4、Hive在Hadoop生态中有什么用?
Apache Hive 提供了一个类似于 SQL(结构化查询语言)的接口,称为 Hive 查询语言(HQL)来与存储在 HDFS 中的数据进行交互。使用这个接口,我们可以像时尚一样组织和查询数据库中的数据,并编写类似 SQL 的查询。我们可以在 HDFS 之上创建表并将数据存储在 Hadoop 生态系统中。尽管 Hive 在内部涵盖了对 MapReduce 作业的所有查询,但它在隐藏复杂性方面做得很好。Apache hive 查询也可用于与 Apache Hbase 表无缝交互。
 
5. 我们可以运行 Hive 的不同模式是什么?
Hive 可以在三种模式下运行。

  • 本地模式

在这种模式下,Hive 在用户机器上本地运行。这是 Hadoop 提供的默认模式。
  • 伪分布式模式

在这种模式下,开发人员通常会在将代码部署到生产环境之前对其进行测试。这里所有的 Hadoop 守护进程都在同一个虚拟机中运行。如果我们想快速编写脚本并在有限的数据集上测试代码,我们可以使用这种模式。
  • 分布式模式

这是 Hive 在分布式模型中运行的生产级模式。所有 Hadoop 贬义词,如 NameNode、DatanOde、Jobtracker 和 TaskTracker,都在单独的机器上运行。
 
6. Hive 中有哪些不同类型的表?
Hive 管理的表和外部表主要有两种类型。
  • 托管表:托管或内部表由 Hive 管理,其中 Hive 管理数据和架构。如果我们删除 Hive 管理的表,它会删除该表以及其中的数据。
  • 外部表:在这种表类型中,数据存储在 HDFS 中,而架构仅由 Hive 管理。这意味着如果我们删除外部 hive 表,我们只会丢失表,而不是数据本身。

 
7、什么是Hive中的托管表或内部表?
Hive 中的托管表或内部表是其中的数据、元数据和架构由内部 Hive 进程管理的表。

Hive 默认创建托管表。当我们删除托管表或分区时,所有元数据和与之关联的数据也会被删除。当用户希望 Hive 管理表生命周期时,使用 Hive 中的托管表。要知道一个表是托管表还是外部表,我们可以通过下面的命令。

DESCRIBE FORMATTED <Table_Name>

 
8. Hive中的Metastore是什么意思?
Metastore 是 hive 中的存储系统,其中包含 hive 表定义、映射和其他元数据。这可以存储在任何关系数据库管理系统(RDBMS)中,如 MySQL、MS SQL Server、JPOX(Java 持久对象)支持的 Oracle。

hive 中的元数据有两部分:Metastore Service 和 Metastore Database

  • Metastore 服务:它提供了一个接口,进程或用户可以通过该接口与 hive 进行交互。
  • Metastore数据库:该数据库存储与 Hive 表相关的数据映射、表定义和其他元数据。在生产环境中,Hive 元数据保存在 MySQL 等外部数据库中。