hive面试题(一)

1 hive sql提交流程和各组件的作用

  1. 用户提交 SQL 语句:用户通过 Hive 客户端提交 SQL 语句到 Hive 服务器。

  2. 解析器(Parser):Hive 服务器接收到 SQL 语句后,由解析器对其进行语法分析和解析。

  3. 语法树(AST)生成:通过解析器生成语法树,即 AST(Abstract Syntax Tree)。

  4. 查询优化器(Optimizer):对语法树进行优化,如去除无用的表、列、分区等,以提高查询效率。

  5. 查询计划生成器(Plan Generator):将优化后的语法树生成执行计划,即 DAG(有向无环图)。

  6. 执行计划执行器(Execution Engine):执行计划主要包括 MapReduce、Tez 等执行引擎,在这里会将执行计划翻译成相应的 MapReduce 或 Tez 作业,并提交到 Hadoop 集群中执行。

2 hive的metastore服务是做什么,hiveserver服务做什么

metastore负责管理hive的元数据信息,并将元数据存储在关系型数据库中。Hive metastore 服务主要提供了以下功能:

  1. 元数据存储:将 Hive 的元数据信息存储到关系型数据库中,实现了 Hive 的元数据管理。

  2. 元数据访问:提供元数据查询、修改、删除等 API 接口。

  3. 权限控制:通过元数据信息来进行权限控制,限制用户对数据的访问权限。

  4. 数据类型管理:维护 Hive 支持的所有数据类型信息,以支持数据的转换和操作。

HiveServer 服务则是 Hive 的客户端程序和服务器程序之间的桥梁,它主要负责接收来自客户端的请求,将请求转换成 HQL 查询语句,并将查询结果返回给客户端。HiveServer 主要具备以下功能:

  1. 提供 SQL 接口:HiveServer 通过提供 SQL 接口,允许其他应用程序连接到 Hive 并通过 SQL 语句进行查询、更新数据等操作。

  2. 多用户并发处理:允许多个用户同时连接到 HiveServer,执行 Hive 查询。

  3. 安全认证:HiveServer 支持 Kerberos 认证,可以保证安全访问 Hive。

  4. 查询缓存:HiveServer 可以通过缓存查询结果来提高查询性能和减轻系统负载。

  5. 安全审计:记录每个请求的用户、执行时间、执行结果等信息,实现对数据操作的审计和监控。

3 hive语句执行慢,怎么排查?如何解决?

  1. 检查sql,是否存在不合理的情况

  2. 数据分区:是否有做分区裁剪,避免全表扫描浪费时间

  3. 列裁剪:不要使用select *或者不参与计算的字段

  4. 数据序列化方式:选择orc和parquet支持列式存储,提高计算效率

4 hive调优?hive的null值一定会发生数据倾斜吗?大小表join一定会发生数据倾斜吗?

hive调优:

  1. 调整MapReduce参数:提高map、reduce内存大小

  2. 数据分区:选择合理的key,让数据可以均匀分布到不同的分区

  3. 使用map join让小表加载到内存中,提高关联计算效率

对于 null 值是否一定会发生数据倾斜的问题,答案是否定的。如果某个字段的 null 值占比非常高,那么可能会导致数据倾斜,但并不是一定会出现数据倾斜的情况,具体还要根据数据分布情况来判断。

对于大小表 join 是否一定会发生数据倾斜的问题,答案也是是否定的。大小表 join 本身并不会导致数据倾斜,但当 join 的字段分布不均匀时,就会导致数据倾斜问题。因此,需要根据实际情况进行调整和处理。如可以尝试使用 Map Join、使用分区表等措施来优化,从而避免数据倾斜问题的发生

5 hive数据倾斜解决办法

  1. 数据倾斜诊断:在确定出现数据倾斜的原因后,需要先对倾斜的源头进行诊断。可以使用如 CountByKey、Sampling、Profile 等多种方法来分析异常 key 的分布情况。

  2. 数据预处理:如果出现数据倾斜,可以通过数据预处理的方式提前处理掉部分数据,或者把一些数据划分到不同的表或者分区中,从而让数据分布均匀。

  3. 增加 reducer: 通过增加 reducer 的数量来提高并行度,从而避免数据倾斜问题。但是,增加 reducer 的数量可能会带来资源和性能消耗。

  4. 改进查询计划:针对具体的查询,可以针对 SQL 语句及其执行计划进行调整。例如,可以使用 Map-Join 来不采用 reduce 阶段,或者使用 Semi-Join 来减少关联表的大小,从而减轻倾斜源的压力。

  5. 动态处理:当出现数据倾斜时,可以在运行时动态地调整执行计划,从而减轻倾斜源的压力。例如,在 reduce 阶段对异常 key 进行单独处理、用 Combiner 去掉一部分重复的数据等。

6 hive分区损坏,如何恢复

  1. 针对分区损坏的表,首先需要查看表的元数据,找出哪些分区存在问题。可以使用 describe 命令查看表的元数据信息。

  2. 对于损坏的分区,尝试使用修复工具进行修复。例如,可以使用 MSCK REPAIR TABLE 命令对整个表进行修复,或者使用 ALTER TABLE ... RECOVER PARTITIONS 命令来修复指定的分区。

  3. 如果修复工具无法正常修复分区,则需要手动重建分区。根据分区的特点,可以使用如 HDFS 命令、Hive 命令等多种方式来手动重建分区。

  4. 在手动重建分区的过程中,需要注意分区的存储格式和数据源的一致性。确保重建后的分区和其他分区存储格式相同,并且数据源和其他分区一致。

  5. 重建分区后,需要执行元数据更新操作,使得 Hive 的元数据信息与实际情况一致。可以使用 msck repair table 命令或者 alter table ... add partition...命令来更新元数据。

7 hive内部表和外部表的区别

  1. 数据存储位置:内部表的数据存储在 Hive 的 Warehouse 目录下,而外部表的数据则可以存储在任意位置,例如 HDFS、S3、本地文件系统等。也就是说,内部表的数据是 Hive 自己管理的,而外部表的数据则由用户自行管理。

  2. 管理方式:Hive 内部表的创建、删除都会把对应目录下的数据文件一同删除,而外部表的删除只会删除 Hive 中相关的元数据信息,而不会删掉数据文件。

8 hive元数据放在哪里,HD集群hive等元数据放在哪里?

hive元数据默认是放在derby中,也可以通过修改参数放到其他关系型数据库中,比如mysql

HD集群hive元数据放在DBServer中

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

罗少说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值