Hive知识点总结(面试)

         目录

Hive元数据为何不存放在内置的derby数据库中?

Hive中的四种排序?

Hive与MySQL数据库区别?

HQL的执行流程?

Hive 工作原理?

内部表与外部表?

Hive分组排序的方式?

Hive中的文件格式?

Hive中的分区和分桶?

lateral view 与 explode函数?

Hive表关联查询时的数据倾斜?

Hive中的谓词下推(PPD)?

Hive中Mapper与Reducer的数量?

Hive中有哪些复合数据类型?


Hive元数据为何不存放在内置的derby数据库中?

Hive 将元数据存储在 RDBMS 中,一般常用 MySQL 和 Derby。默认情况下,Hive 元数据保存在内嵌的 Derby 数据库中,只能允许一个会话连接,只适合简单的测试。实际生产环境中不适用, 为了支持多用户会话,则需要一个独立的元数据库,使用 MySQL 作为元数据库,Hive 内部对 MySQL 提供了很好的支持。

内置的derby主要问题是并发性能很差,可以理解为单线程操作。Derby还有一个特性,元数据保存在当前目录下,也就说更换目录执行操作,会找不到相关表,比如在/usr下执行创建表,在/usr下可以找到这个表。在/etc下执行查找这个表,就会找不到。


Hive中的四种排序?

order by

全局排序,因此只有一个reducer,会导致当输入规模较大时,需要较长的计算时间。

set hive.mapred.mode默认为nonstrict,在strict模式下使用order by必须执行limit,否则报错

sort by

如果用sort by进行排序,并且设置mapred.reduce.tasks>1, 则sort by只保证每个reducer的输出有序,不保证全局有序。

distribute by

按照指定的字段对数据进行划分到不同的输出reduce中。通常与sort by搭配使用,比如对同一年份中的温度进行排序:distribute by year sort by temperature,distribute by保证了同一reducer中接受到的是同一年份的数据,而sort by是对reducer排序

cluster by

当distribute by和sorts by的字段相同时,可以使用cluster by方式;cluster by 同时具有 distribute by 和 sort by 的功能。 但是排序只能是升序排序,不能够指定。


Hive与MySQL数据库区别?

1)产品定位

Hive是数据仓库,是为海量数据的离线分析设计的,实时性查。所以不支持OLTP(联机事务处理)所需的关键功能ACID,而更接近于OLAP(联机分析技术),适合离线处理大数据集,虽然还未满足OLAP中OL部分;

而MySQL是关系型数据库,是为实时业务设计的。

2)存储的文件系统 / 可扩展性

Hive中的数据存储在HDFS(Hadoop的分布式文件系统),metastore元数据一般存储在独立的关系型数据库中,而MySQL则是服务器本地的文件系统;因此Hive具有良好的可扩展性,数据库由于ACID语义的严格限制,扩展性十分有限。

3)读写模式

MySQL为写时模式,数据在写入数据库时对照模式检查。写时模式有利于提升查询性能,因为数据库可以对列进行索引。

Hive为读时模式,数据的验证则是在查询时进行的,这有利于大数据集的导入,读时模式使数据的加载非常迅速,数据的加载仅是文件复制或移动。

4)数据更新

Hive是针对数据仓库应用设计的,而数仓的内容是读多写少的,Hive中不支持对数据进行改写,所有数据都是在加载的时候确定好的;而数据库中的数据通常是需要经常进行修改的。

5)数据格式

Hive中数据格式可以由用户指定,用户定义数据格式需要指定三个属性:列分隔符(通常为空格、"\t"、"\x001")、行分隔符("\n")以及读取文件数据的方法(Hive中文件格式: TextFile,SequenceFile、RCFILE、ORCFile)。

而在MySQL数据库中,不同的数据库有不同的存储引擎,定义了自己的数据格式。所有数据都会按照一定的组织存储,因此,数据库加载数据的过程会比较耗时。

6)索引

Hive只提供了有限的索引功能,可以为一些字段建立索引,一张表的索引数据存储在另外一张表中。由于数据的访问延迟较高,Hive不适合在线数据查询;数据库在少量的特定条件的数据访问中,索引可以提供较低的延迟。

Hive要访问数据中特定数据时,需要全表扫描,因此访问延迟较高。由于MapReduce的引入,Hive可以并行访问数据,在大数据的访问上仍然具有优势。

7)计算模型

Hive使用的模型是MapReduce(也可以 on spark),而MySQL使用的是自己设计的Executor计算模型


HQL的执行流程?

1)输入一条HQL查询语句

2)解析器对这条Hql语句进行语法分析

3)编译器对这条Hql语句生成HQL的执行计划。

4)优化器生成最佳的Hql的执行计划。

5)执行这条最佳Hq

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值