1、什么是Hive?
- Hive是基于Hadoop的一个数据仓库工具,能将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能,(能将SQL语句转变成MapReduce任务来执行。)
2、Hive的意义(最初研发的原因)?
- 降低程序员使用Hadoop的难度,降低学习成本,
3、Hive的内部组成模块,作用分别是什么?
- 元数据:描述数据的数据
- 内部执行流程:
- 解析器(解析器SQL语句)、编译器(把SQL语句编译成MapReduce程序)、优化器(优化MapRedue程序)、执行器(将## MapReduce程序运行的结果提交到HDFS)
4、Hive支持的数据格式?
- TextFile、SequenceFile、RCFile、ParquetFile、ORC
5、进入Hiveshell窗口的方式?
- 1、Hive命令直接进入HiveShell
- 2、
启动 hiveserver2
进入beeline窗口
链接:!connect jdbc:hive2://nodex:10000
6、Hive数据库、表在HDFS上存储的路径是什么?
- 默认在HDFS系统的 /user/hive/warehouse/ 文件夹下
7、like与rlike的区别?
- like:like的内容不是正则,而是通配符(模糊匹配查询)
- rlike:rlike的内容可以是正则,正则的写法与java一样。
8、内部表与外部表的区别?
- 3、删除内部表会直接删除元数据(metadata)及存储数据;删除外部表仅仅会删除元数据,HDFS上的文件并不会被删除;
(对内部表的修改会将修改直接同步给元数据,而对外部表的表结构和分区进行修改,则需要修复)
9、分区表的优点是,分区字段的要求是?
- 优点:
指定分区查询,可以提高查询,分析的效率
分区字段绝对不能出现在数据表以有的字段中。
10、分桶表的优点是,分桶字段的要求是?
- 优点:使用join 或 数据取样时能够起到优化的作用
- 分桶字段必须是表中的字段
11、数据导入表的方式?
- 1、load加载数据
(linux) load data local inpath ‘/export/servers/hivedatas/score.csv’ overwrite into table score partition(month=‘201806’);
(HDFS) load data inpath ‘/export/servers/hivedatas/score.csv’ overwrite into table score partition(month=‘201806’); - 2、直接向分区表中插入数据
insert into table score3 partition(month =‘201807’) values (‘001’,‘002’,‘100’); - 3、多插入模式
from score
insert overwrite table score_first partition(month=‘201806’) >select s_id,c_id
insert overwrite table score_second partition(month = >‘201806’) select c_id,s_score; - 4、查询语句中创建表并加载数据(as select)
create table tbname2 as select * from tbname1; - 5、创建表时通过location指定加载数据路径
create external table score6 (s_id string,c_id string,s_score int) row format delimited fields terminated by ‘\t’ location ‘/myscore6’;
12、数据导出表的方式?
- 1、将查询的结果导出到本地
insert overwrite local directory ‘/export/servers/exporthive/a’ select * from score; - 2、将查询的结果格式化导出到本地
insert overwrite local directory ‘/export/servers/exporthive’ row format delimited fields terminated by ‘\t’ collection items terminated by ‘#’ select * from student; - 3、将查询的结果导出到HDFS上(没有local)
insert overwrite directory ‘/export/servers/exporthive’ row format delimited fields terminated by ‘\t’ collection items terminated by ‘#’ select * from score; - 4、Hadoop命令导出到本地
dfs -get /export/servers/exporthive/000000_0 /export/servers/exporthive/local.txt; - 5 、 hive shell 命令导出
bin/hive -e “select * from yhive.score;” > /export/servers/exporthive/score.txt - 6、export导出到HDFS上(全表导出)
export table score to ‘/export/exporthive/score’; - 7、SQOOP导出(后面再学)
13、order by与sort by的区别?
- order by:全局排序,一个MapReduce
- sort by:每个分区内进行排序,对全局结果集来说不是排序。
14、where 与having的区别?
- where 作用在 数据表的字段上
- having作用在 查询的字段上(结果字段上)
15、distribute by何时使用,通常与哪个联合使用?
- 当需要根据某个字段进行分区时使用
- 通常与sort by结合使用(先分区后排序)
- Hive要求DISTRIBUTE BY语句要写在SORT BY语句之前。
16、Cluster by何时使用?
- 需要按照某个字段分区同时也按照这个字段进行排序时使用cluster by
17、distribute by+sort by(相同字段) 与Cluster by的区别?
- distribute by+sort by:可以指定排序规则ASC或DESC。
- cluster by:只能是正序排序,不能指定排序规则。
18、hive -e/-f/-hiveconf分别是什么意思?
- -e:后面跟操作语句(“” ‘’)
- -f:后面跟文件
- -hiveconf:hive相关配置属性
19、hive声明参数有哪些方式,优先级是什么?
- 参数声明 > 命令行参数 > 配置文件参数
20、编写hiveUDF代码,方法名称叫什么?
- evaluate()
21、企业中hive常用的数据存储格式是什么?常用的数据压缩格式是什么?
- 常用的数据存储格式是:ParquetFile、ORC
- 常用的数据压缩格式是:Snappy
22、hive自定义函数的类型?
- 1、UDF(User-Defined-Function)
一进一出 - 2、UDAF(User-Defined Aggregation Function)
聚合函数,多进一处 - 3、UDTF(User-Defined Table-Generating Functions)
一进多出
23、Fetch抓取中设置more有什么效果,设置none有什么效果
- 简单的查询语句不会转化成为MR程序
- 设置为none后所有查询语句都要转化成为MR程序
24、本地模式有什么好处
- 在小数据量的前提下 提高了查询效率
25、当一个key数据过大导致数据倾斜时,如何处理
- 开启Map端聚合和功能。
- 开启局部聚合后 hive会创建两个MR 程序 第一个进行数据的局部聚合 第二个进行数据的最终汇总
26、Count(distinct) 的替换语句如何编写
- 先去重,再求总数量
SELECT count(DISTINCT id) FROM bigtable; - 替换方案
SELECT count(id) FROM (SELECT id FROM bigtable GROUP BY id) a;
27、如何使用分区剪裁、列剪裁
- 列剪裁: 只拿需要的列
- 分区剪裁:只拿需要的分区
- 要什么 拿什么
28、如何理解动态分区调整
- 以第一个表的分区规则,来对应第二个表的分区规则,将第一个表的所有分区,全部拷贝到第二个表中来,第二个表在加载数据的时候,不需要指定分区了,直接用第一个表的分区即可
29、数据倾斜时,如何将众多数据写入10个文件
- 众人拾柴火焰高(将一个大的任务拆分成多个小任务,再次执行)
- 设置reduce数量10
- 1:distribute by (字段)
- 2:distribute by rand()
30、影响map数量的因素
文件很小时候:影响map数量的因素是文件数量
文件很大时候:影响map数量的因素是块的数量
31、reduce数量的计算是什么
- 公式:
N=min(参数2,总输入数据量/参数1) - 参数1:每个Reduce处理的最大数据量
- 参数2:每个任务最大Reduce数量
32、并行执行有什么好处
- 并行执行使得多个没有依赖关系的任务同时执行,起到了提高查询效率的作用
33、严格模式不能执行哪些命令
- 1、不允许扫描所有分区
- 2、使用了order by语句查询,要求必须使用limit语句
- 3、限制笛卡尔积的查询
34、JVM重用有什么好处
- 允许多个task使用一个jvm
- 降低了任务启动的开销,提高了任务的执行效率
- 但是,在整个任务结束前,jvm不释放,长时间占用。导致资源不足时,资源浪费
35、什么是MR本地模式
- 任务在提交SQL语句的节点上“本地”执行,任务不会分配到集群
36、什么是MR本地计算
- 数据存储到HDFS后,编写分析代码实现计算程序,程序在进行分发时,优先分发放到这个程序所使用到的数据所在的节点上。
37、先join后过滤的优化方案
- 1、SELECT a.id FROM ori a LEFT JOIN bigtable b
ON (b.id <= 10 AND a.id = b.id); - 2、SELECT a.id FROM bigtable a RIGHT JOIN (SELECT id FROM ori WHERE id <= 10 ) b ON a.id = b.id;