1、什么是Hive?

是一个基于hadoop的数据仓库工具,可以将结构化数据映射成一张数据表,并提供类SQL的查询功能。

2、Hive的意义(最初研发的原因)

降低使用hadoop的难度
降低学习成本

3、Hive的内部组成模块,作用分别是什么

解释器:解释 SQL 语句
编译器:将sql语句转化成  MR
优化器: 优化 MR 
执行器:将优化过的MR提交到集群

4、Hive支持的数据格式

TextFile
SequenceFile
ParquetFile
ORC
RCFILE

5、进入Hiveshell窗口的方式

1.hive + 回车
2.	开启hiveserver2服务 (hive --service hiveserver2 &)
	在另一个窗口进入beeline的Shell窗口
	输入!connect jdbc:hive2://开启hiveserver2服务的节点ip+10000端口

6、Hive数据库、表在HDFS上存储的路径时什么

/user/hive/warehouse

7、like与rlike的区别

like是模糊查询
rlike可以通过正则表达式条件查询

8、内部表与外部表的区别

内部表:删除表数据将表的元数据和数据同时删除
外部表:删除表数据将表的元数据被删除,数据不会删除

9、分区表的优点是,分区字段的要求是

将数据按区域划分开,查询时不用扫描无关的数据,加快查询速度
分区字段绝对不能出现在数据表已有的字段中

10、分桶表的优点是,分桶字段的要求是

对于join的需求,能够起到优化加速的作用(前提是,join字段设置成分桶字段)
用于数据取样(提取样本数据)

11、数据导入表的方式

1.直接向分区表中插入数据
	insert into table 表名 partition(分区字段=值)values(数据1,数据2,数据n...);
2.通过查询插入数据
	(linux) load data local inpath 'linux数据的路径' overwrite into table 表名
	(HDFS) load data inpath 'HDFS数据的路径' overwrite into table 表名
3.多插入模式
	form 表名
	insert overwrite table 表1 partition(分区字段=值) select 字段1,字段2
	insert overwrite table 表2 partition(分区字段=值) select 字段3,字段4
4.查询语句中创建表并加载数据(as select)
	create table 表名 as select * from 目标表名
5.创建表时通过location指定加载数据路径
	create external table 表名(字段 类型) row format delimited fileds terminated by '分割符' location 'HDFS存放数据的路径'

12、数据导出表的方式

1.将查询的结果导出到本地
	insert overwrite local directory 'linux路径' 查询语句;
2.将查询的结果格式化导出到本地
	insert overwrite local directory 'linux路径' row format delimited fileds terminated by '分隔符' collection items terminated by '#' 查询语句;
3.将查询的结果导出HDFS上
	insert overwrite directory 'HDFS路径' row format delimited fileds terminated by '分隔符' collection items terminated by '各个items之间的分隔符' 查询语句;
4.hadoop 命令导出到本地
	dfs -get HDFS存放数据的路径  目标路径
5.hive shell 命令导出
	hive -e '查询语句' > linux文件
6.export 导出到HDFS上 (全表导出)
	export table 表名 to 'HDFS路径'
7.Sqoop导出

13、order by与sort by的区别

order by 全局排序
sort by 分区内排序

14、where 与having的区别

where是根据表中的字段进行条件过滤,后面不能跟分组函数的字段
having是根据结果表中的字段进行条件过滤,后面可以跟聚合函数的字段(一般和group by 联合使用)

15、distribute by何时使用,通常与哪个联合使用

当要根据特定的字段进行分区的时候

sort by

16、Cluster by何时使用

当要根据特定的字段进行分区,并且还要按照这个字段进行排序时,使用Cluster by

17、distribute by+sort by(相同字段) 与Cluster by的区别

cluster by 只能做正序排序
distribute by + sort by 既可以正序  也可以倒叙排序

18、hive -e/-f/-hiveconf分别是什么意思

-e 从linux命令行执行指定的HQL
-f 执行sql文件
-hiveconf 用于设置hive相关的配置属性

19、hive声明参数有哪些方式,优先级是什么

参数声明 -> 命令行声明 -> 配置文件

20、编写hiveUDF代码,方法名称叫什么

evaluate()

21、企业中hive常用的数据存储格式是什么?常用的数据压缩格式是什么?

存储格式:orc丶parquet
压缩格式:snappy

22、hive自定义函数的类型

UDF() -- 一进一出
UDAF() -- 聚合函数,多进一出
UDTF() -- 一进多出

23、Fetch抓取中设置more有什么效果

设置none有什么效果
more: 简单的查询语句不转化成MR程序直接执行
none: 无论是简单的难得语句都转化成MR程序

24、本地模式有什么好处

在小量数量的前提下,提高查询效率

25、当一个key数据过大导致数据倾斜时,如何处理

开启局部(Map)聚合功能,开启局部聚合后,hive会出创建两个MR程序,第一个进行数据的局部聚合,第二个进行数据的最终汇总。

26、Count(distinct) 的替换语句如何编写

先去重,再求总数量
举个例子: select count(distinct id) from 表;
替换方案: select count(id) from (select id from 表 group by id) as 别名;

27、如何使用分区剪裁、列剪裁

用哪个,拿那个

28、如何理解动态分区调整

以第一个表的分区规则,来对应第二个表的分区规则,将第一个表的所有分区,全部拷贝到第二个表中来,第二个表在加载数据的时候,不需要指定分区了,直接用第一个表的分区即可

29、数据倾斜时,如何将众多数据写入10个文件

众人拾柴火焰高(将一个大的任务拆分成多个小任务,再次执行)
前提:设置reduce数量10
	1.distribute by(字段)
	2.distribute by rand()

30、reduce数量的计算是什么

Num = min(最大的reduce数量,总输入量/每个reduce处理的数据量)

31、并行执行有什么好处

开启并行执行,使得多个没有依赖关系的任务同时执行,起到提高查询效率的作用

32、严格模式不能执行哪些命令

不允许扫描所有分区
使用了order by语句的查询,要求必须使用limit语句
限制笛卡尔积的查询

33、JVM重用有什么好处

允许多个task使用一个jvm
降低任务启动的开销,提高任务的执行效率

34、什么是MR本地计算

数据存储到HDFS后,编写分析代码实现计算程序,程序在进行分发时,优先分发到这个程序所使用的数据所在的节点上。

35、先join后过滤的优化方案

先过滤再join

36、影响Map数量的因素

文件较小时:文件数量的个数
文件较大时:块的数量

37、什么是MR本地模式

数据存储到HDFS后,编写代码实现计算程序,程序在进行分发时,优先分发到这个程序锁使用到的数据所在的节点上。