文章目录
- Hive知识点总结
- 1、什么是Hive?
- 2、Hive的意义(最初研发的原因)?
- 3、Hive的内部组成模块,作用分别是什么?
- 4、Hive支持的数据格式?
- 5、进入Hiveshell窗口的方式?
- 6、Hive数据库、表在HDFS上存储的路径是什么?
- 7、like与rlike的区别?
- 8、内部表与外部表的区别?
- 9、分区表的优点是,分区字段的要求是?
- 10、分桶表的优点是,分桶字段的要求是?
- 11、数据导入表的方式?
- 12、数据导出表的方式?
- 13、order by与sort by的区别?
- 14、where 与having的区别?
- 15、distribute by何时使用,通常与哪个联合使用?
- 16、Cluster by何时使用?
- 17、distribute by+sort by(相同字段) 与Cluster by的区别?
- 18、hive -e/-f/-hiveconf分别是什么意思?
- 19、hive声明参数有哪些方式,优先级是什么?
- 20、编写hiveUDF代码,方法名称叫什么?
- 21、企业中hive常用的数据存储格式是什么?常用的数据压缩格式是什么?
- 22、hive自定义函数的类型?
- 23、Fetch抓取中设置more有什么效果,设置none有什么效果
- 24、本地模式有什么好处
- 25、当一个key数据过大导致数据倾斜时,如何处理
- 26、Count(distinct) 的替换语句如何编写
- 27、如何使用分区剪裁、列剪裁
- 28、如何理解动态分区调整
- 29、数据倾斜时,如何将众多数据写入10个文件
- 30、影响map数量的因素
- 31、reduce数量的计算是什么
- 32、并行执行有什么好处
- 33、严格模式不能执行哪些命令
- 34、JVM重用有什么好处
- 35、什么是MR本地模式
- 36、什么是MR本地计算
- 37、先join后过滤的优化方案
Hive知识点总结
1、什么是Hive?
Hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。Hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供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、HiveJDBC方式使用beeline连接hiveserver2
3、使用Hive命令参数直接执行hql语句
6、Hive数据库、表在HDFS上存储的路径是什么?
是由hive.site.xml当中的”hive,metastore.warehouse.dir“指定,默认在HDFS系统的 /user/hive/warehouse/ 文件夹下
7、like与rlike的区别?
like:like的内容不是正则,而是通配符(模糊匹配查询)
rlike:rlike的内容可以是正则,正则的写法与java一样。
8、内部表与外部表的区别?
未被external修饰的是内部表(managed table),被external修饰的为外部表(external table);
区别:
1、内部表数据由Hive自身管理,外部表数据由HDFS管理;
2、内部表数据存储的位置是hive.metastore.warehouse.dir(默认:/user/hive/warehouse),外部表数据的存储位置由自己制定(如果没有LOCATION,Hive将在HDFS上的/user/hive/warehouse文件夹下以外部表的表名创建一个文件夹,并将属于这个表的数据存放在这里);
3、删除内部表会直接删除元数据(metadata)及存储数据;删除外部表仅仅会删除元数据,HDFS上的文件并不会被删除;
4、对内部表的修改会将修改直接同步给元数据,而对外部表的表结构和分区进行修改,则需要修复(MSCK REPAIR TABLE table_name;)
9、分区表的优点是,分区字段的要求是?
优点:
1、可以减少数据冗余
2、提高指定分区查询分析的效率
分区字段绝对不能出现在数据表以有的字段中。
10、分桶表的优点是,分桶字段的要求是?
优点:获得了更高的查询处理效率,桶为表加上了额外的结构,Hive在处理有些查询时,能利用这个结构
分桶字段必须是表中的字段
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:每个MapReduce内部进行排序,对全局结果集来说不是排序。
14、where 与having的区别?
where 作用在 分组(group by)和聚集(sum等)计算之前
having作用在 分组(group by)之后,对分组后计算的数据进行过滤
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:当distribute by和sort by字段相同时,就等价于cluster by,可以指定排序规则ASC或DESC。
cluster by:除了具有distribute by的功能外还兼具sort by的功能。但是排序只能是正序排序,不能指定排序规则为ASC或者DESC。
18、hive -e/-f/-hiveconf分别是什么意思?
-e:从命令行执行指定的 HQL
-f:执行 HQL 脚本
-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;