本文是笔者在面试过程中被问到次数最多的一些问题,特此记录

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