本文是笔者在面试过程中被问到次数最多的一些问题,特此记录
1.什么是Hive?
-
hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。
-
hive能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成MapReduce任务来执行
2.使用过hive的排序吗?有哪些?可以说下吗?
在hive语法中,常用的排序有:sort by,order by,cluster by,distribute by
-
sort by:数据在进入reduce前就进行排序,数据量过大的情况下,性能优于order by
order by:对输入的数据进行排序,是一个全局的排序,只会产生一个reduce,如果数据量庞大,则会导致运行速度变得非常慢
distribute by:按照指定的字段进行划分到不同reduce中
cluster by:相当于sort by + distribute by
3.hive自定义函数?
hive自定义函数分为三类:UDF UDAF UDTF
- UDF 一进一出
- UDAF 多进一出
- UDTF 一进多出
4.hive HQL执行顺序?
- 解释器->编译器->优化器->执行器
5.hive内部表和外部表的区别?
- 创建表:
创建表的时候,如果创建的是内部表,数据来源会被剪切掉表中
如果创建的是外部表,数据来源不会丢失,相当于是copy到表中
- 删除表:
内部表的元数据和数据都是由表本身保存,删除表后元数据和数据都会丢失
外部表的元数据是保存在hdfs之上,数据由表保存,删除表后数据不会丢失,但是元数据会丢失
6.安装hive之前为什么要安装mysql?
安装mysql的原因是因为我们要将hive的元数据给保存到MySQL中,hive元数据默认是保存在hive自带的数据库derby中,derby的缺陷是只允许单用户访问,而且只有2M的大小,并不符合我们的要求,所以我们要将元数据给保存到MySQL中
7.为什么说hive是基于Hadoop的?
Hadoop分为HDFS和MR以及yarn,hive是建立在hdfs上进行数据分析的数据仓库,而hive提供的hql可以将sql语句转化为MR在集群中执行,数据存储用的是HDFS,数据计算用的是MR