Hive知识点总结

20 篇文章 1 订阅

Hive知识点总结

什么是Hive?

Hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。Hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成MapReduce任务来执行。

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

降低程序员使用Hadoop的难度,降低学习成本

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

元数据:描述数据的数据
内部执行流程:
解析器(解析器SQL语句)、编译器(把SQL语句编译成MapReduce程序)、优化器(优化MapRedue程序)、执行器(将MapReduce程序运行的结果提交到HDFS)

Hive支持的数据格式?

TextFile、SequenceFile、RCFile、Parquet

进入Hiveshell窗口的方式?

1、Hive命令直接进入HiveShell
2、HiveJDBC方式使用beeline连接hiveserver2
3、使用Hive命令参数直接执行hql语句

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

是由hive.site.xml当中的”hive,metastore.warehouse.dir“指定,默认在HDFS系统的 /user/hive/warehouse/ 文件夹下

like与rlike的区别?

like:like的内容不是正则,而是通配符(模糊匹配查询)
rlike:rlike的内容可以是正则,正则的写法与java一样。

内部表与外部表的区别?

未被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;)

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

优点:
1、可以减少数据冗余
2、提高指定分区查询分析的效率
分区字段绝对不能出现在数据表以有的字段中。

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

优点:获得了更高的查询处理效率,桶为表加上了额外的结构,Hive在处理有些查询时,能利用这个结构
分桶字段必须是表中的字段

数据导入表的方式?

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’;

数据导出表的方式?

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导出(后面再学)

order by与sort by的区别?

order by:全局排序,一个MapReduce
sort by:每个MapReduce内部进行排序,对全局结果集来说不是排序。

where 与having的区别?

where 作用在 分组(group by)和聚集(sum等)计算之前
having作用在 分组(group by)之后,对分组后计算的数据进行过滤

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

当需要根据某个字段进行分区时使用
通常与sort by结合使用(先分区后排序)
Hive要求DISTRIBUTE BY语句要写在SORT BY语句之前。

Cluster by何时使用?

需要按照某个字段分区同时也按照这个字段进行排序时使用cluster by

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。

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

-e:从命令行执行指定的 HQL
-f:执行 HQL 脚本
-hiveconf:hive相关配置属性

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

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

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

evaluate()

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

常用的数据存储格式是:ParquetFile、ORC
常用的数据压缩格式是:Snappy

hive自定义函数的类型?

1、UDF(User-Defined-Function)
一进一出
2、UDAF(User-Defined Aggregation Function)
聚合函数,多进一处
3、UDTF(User-Defined Table-Generating Functions)
一进多出

Fetch抓取中设置more有什么效果,设置none有什么效果

简单的查询语句不会转化成为MR程序
设置为后所有查询语句都要转化成为MR程序

本地模式有什么好处

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

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

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

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

先去重,再求总数量
SELECT count(DISTINCT id) FROM bigtable;
替换方案
SELECT count(id) FROM (SELECT id FROM bigtable GROUP BY id) a;

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

列剪裁: 只拿需要的列
分区剪裁:只拿需要的分区
要什么 拿什么

如何理解动态分区调整

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

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

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

影响map数量的因素

文件很小时候:影响map数量的因素是文件数量
文件很大时候:影响map数量的因素是块的数量

reduce数量的计算是什么

公式:
N=min(参数2,总输入数据量/参数1)
参数1:每个Reduce处理的数据量
参数2:每个任务最大Reduce数量

并行执行有什么好处

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

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

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

JVM重用有什么好处

允许多个task使用一个jvm
降低了任务启动的开销,提高了任务的执行效率
但是,在整个任务结束前,jvm不释放,长时间占用。导致资源不足时,资源浪费

什么是MR本地模式

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

先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;

该文档来源于传智专修学院大数据12班

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值