文章目录
- 1、什么是Hive
- 2、Hive的意义(最初研发的原因)
- 3、Hive的内部组成模块,作用分别是什么
- 4、Hive支持的存储格式
- 5.Hive支持的数据类型
- 6、进入Hiveshell窗口的方式
- 7、Hive数据库、表在HDFS上存储的路径时什么
- 8、like与rlike的区别
- 9、内部表与外部表的区别
- 10、分区表的优点是?分区字段的要求是?
- 11、分桶表的优点是? 分桶字段的要求是? 分桶规则是?
- 12、数据导入表的方式
- 13、数据导出表的方式
- 14、order by与sort by的区别
- 15、hive中where 与having的区别
- 16、distribute by何时使用,通常与哪个联合使用
- 17、Cluster by何时使用
- 18、distribute by+sort by(相同字段) 与Cluster by的区别
- 19、hive -e/-f/-hiveconf分别是什么意思
- 20、hive声明参数有哪些方式,优先级是什么
- 21、编写hiveUDF代码,方法名称叫什么
- 22、企业中hive常用的数据存储格式是什么?常用的数据压缩格式是什么?
- 23、hive自定义函数的类型
- 24、Fetch抓取中设置more有什么效果, 设置none有什么效果
- 25、本地模式有什么好处
- 26、当一个key数据过大导致数据倾斜时,如何处理
- 27、Count(distinct) 的替换语句如何编写
- 28、如何使用分区剪裁、列剪裁
- 29、如何理解动态分区调整
- 30、数据倾斜时,如何将众多数据写入10个文件设置
- 31、reduce数量是怎么计算的
- 32、并行执行有什么好处
- 33、严格模式不能执行哪些命令
- 34、JVM重用有什么优点和不足
- 35、什么是Hive本地模式
- 36、什么是MR本地计算
- 36、先join后过滤的优化方案
- 37、影响map数量的因素
1、什么是Hive
hive是一个基于hadoop的数据库工具,可以将结构化数据映射成一张数据表,并提供类SQL的查询功能.
2、Hive的意义(最初研发的原因)
降低程序员的开发工作量.降低学习成本.
3、Hive的内部组成模块,作用分别是什么
元数据
解析器:解析器SQL语句
编译器:把SQL语句编译成MapReduce程序
优化器:优化MapRedue程序
执行器:将MapReduce程序运行的结果提交到HDFS
4、Hive支持的存储格式
hive支持的存储格式包括TextFile、SequenceFile、ParquetFile、RCFile、ORC Files、(Avro Files)。
5.Hive支持的数据类型
Hive支持原始数据类型和复杂类型,原始类型包括数值型,Boolean,字符串,时间戳。复杂类型包括array,map,struct,union。
原始数据类型(基本数据类型):
类型名称 | 大小 | 备注 |
---|---|---|
TINYINT | 1字节整数 | 45Y |
SMALLINT | 2字节整数 | 12S |
INT | 4字节整数 | 10 |
BIGINT | 8字节整数 | 244L |
FLOAT | 4字节单精度浮点数 | 1.0 |
DOUBLE | 8字节双精度浮点数 | 1.0 |
DECIMAL | 任意精度带符号小数 | DECIMAL(4, 2)范围:-99.99到99.99 |
BOOLEAN | true/false | TRUE |
STRING | 字符串,长度不定 | “abcaa” 不区分单引号和双引号 |
VARCHAR | 字符串,长度不定,有上限 | 0.12.0版本引入 |
CHAR | 字符串,固定长度 | “a” 不区分单引号和双引号 |
BINARY | 存储变长的二进制数据 | |
TIMESTAMP | 时间戳,纳秒精度 | 122327258765 |
DATE | 日期 | ‘2019-011-28’ |
复杂类型:
类型名称 | 大小 | 示例 |
---|---|---|
ARRAY | 存储同类型数据 | ARRAY< data_type> |
MAP | key-value,key必须为原始类型,value可以是任意类型 | MAP< primitive_type, data_type> |
STRUCT | 类型可以不同 | STRUCT< col_name : data_type [COMMENT col_comment], …> |
UNION | 在有限取值范围内的一个值 | UNIONTYPE< data_type, data_type, …> |
6、进入Hiveshell窗口的方式
1.在配置好环境变量的前提下 直接使用
hive
命令
2.使用hive --service hiveserver2 =>进入打开beline => !connect jdbc:hive2://hadoop01:10000
7、Hive数据库、表在HDFS上存储的路径时什么
默认存储在 /user/hive/warehouse
8、like与rlike的区别
like 是模糊查询
rlike 支持正则表达式
9、内部表与外部表的区别
在删除内部表时:内部表删除将表的元数据和数据同时删除。
在删除外部表时:外部表的元数据被删除,数据本身不删除。
10、分区表的优点是?分区字段的要求是?
优点:
1、改善查询性能,提高查询速度
(对分区对象的查询可以仅搜索自己关心的分区,提高检索速度)。
2、增强可用性
(如果表的某个分区出现故障,表在其他分区的数据仍然可用);
3、维护方便
如果表的某个分区出现故障,需要修复数据,只修复该分区即可;
4、均衡I/O
(可以把不同的分区映射到不同磁盘以平衡I/O,改善整个系统性能)。
要求:
分区字段不能出现在数据表以有的字段中。
分区字段不要有中文(否则会报错).
11、分桶表的优点是? 分桶字段的要求是? 分桶规则是?
优点:
1、提高join查询效率(前提是,join字段设置为分桶字段)
2、提高抽样效率
要求:
分桶字段必须是表中的字段
分桶规则:
先对分桶字段值进行哈希,然后对桶的个数求余,余几就放在哪个桶中.
12、数据导入表的方式
-- (以下四种都是直接向表中导入数据)
-- 1.从linux中加载数据到hive
load data local inpath ‘数据路径’ into table 表名;
-- 2.从linux中加载数据到hive,并覆盖
load data local inpath ‘数据路径’ overwrite into table 表名;
-- 3. 从hdfs中加载数据到hive
load data inpath ‘数据路径’ into table 表名;
-- 4.从hdfs中加载数据到hive,并覆盖
load data inpath ‘数据路径’ overwrite into table 表名;
-- 5、直接向分区表中插入数据
insert into table score3 partition(month =‘201807’) values (‘001’,‘002’,‘100’);
-- 6、多插入模式
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;
--7、查询语句中创建表并加载数据(as select)
create table tbname2 as select * from tbname1;
--8、创建表时通过location指定加载数据路径
create external table score6 (s_id string,c_id string,s_score int)
row format delimited fields
terminated by ‘\t’ location ‘/myscore6’;
13、数据导出表的方式
-- 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导出
14、order by与sort by的区别
order by 排序出来的数据是
全局有序
的,但是只能有一个
partition分区
sort by 排序出来的数据是局部有序
的,但是全局无序
,可以有多个
partition分区
15、hive中where 与having的区别
1.where是在分组之前对数据进行过滤,having是对分组之后进行数据过滤
2.where 后不能跟聚合函数,having后可以跟聚合函数(因为where执行顺序大于聚合函数,而having的执行顺序小于聚合函数)
3.where可以对任意的列进行过滤 , hive只能对查询的列结果进行过滤
16、distribute by何时使用,通常与哪个联合使用
需要对某个字段进行分区时使用,distribute by经常和sort by配合使用
17、Cluster by何时使用
需要对某个字段进行分区并对这个字段进行排序时使用Cluster by.
18、distribute by+sort by(相同字段) 与Cluster by的区别
Cluster by 排序只能是正序,不能指定排序规则为ASC或者DESC
19、hive -e/-f/-hiveconf分别是什么意思
hive -e ‘sql’ 运行引号内sql查询语句
hive -f file 运行文件中的sql语句
hive -hiveconf 设置运行时的相关配置属性
20、hive声明参数有哪些方式,优先级是什么
参数声明 > 命令行 > 配置文件
参数声明: set param=value;
命令行: hive --hiveconf param=value;
配置文件: 修改hive-site.xml
21、编写hiveUDF代码,方法名称叫什么
evaluate()
22、企业中hive常用的数据存储格式是什么?常用的数据压缩格式是什么?
在实际的项目开发当中,hive表的数据存储格式一般使用ORC Files和Parquet,压缩方式一般选择snappy.
23、hive自定义函数的类型
自定义函数分为三个类别:
UDF(User Defined Function):一进一出
UDAF(User Defined Aggregation Function):聚集函数,多进一出(例如count/max/min)
UDTF(User Defined Table Generating Function):一进多出,如lateral view explode()
24、Fetch抓取中设置more有什么效果, 设置none有什么效果
设置为none会把所有的sql语句都转化成MapReduce程序
设置为more以后,基本的查询语句会直接执行,不会转化成MapReduce程序
25、本地模式有什么好处
在小数据量的前题下,提高查询效率
26、当一个key数据过大导致数据倾斜时,如何处理
开启(Map)局部聚合功能,hive会创建两个MapReduce程序,第一个进行数据的局部聚合,第二个进行数据的最终汇总.
将一个大文件分割成多个小文件
27、Count(distinct) 的替换语句如何编写
-- 先去重,再求总数量
select count(distinct id) from bigtable;
-- 替换方案
select count(id) from (select id from bigtable group by id) a;
28、如何使用分区剪裁、列剪裁
分区剪裁:只拿需要的分区
列剪裁:只拿需要的剪裁
用什么拿什么
29、如何理解动态分区调整
以第一个表的分区规则,来对应第二个表的分区规则,将第一个表的所有分区全部拷贝到第二个表中来,第二个表在加载数据的时候,不需要指定分区,直接用第一个表的分区即可.
30、数据倾斜时,如何将众多数据写入10个文件设置
设置reduceTask的数量为10
1:distribute by (字段)
2 distribute by rand()
31、reduce数量是怎么计算的
公式:
N=min(参数2,总输入数据量/参数1)
参数1:每个Reduce处理的最大数据量
参数2:每个任务最大Reduce数量
32、并行执行有什么好处
在没有依赖的前提下,使得整个job的执行时间缩短,提高查询效率
33、严格模式不能执行哪些命令
1.限制笛卡尔积的查询
2.使用了order by语句的查询,要求必须使用limit语句
3.用户不允许扫描所有分区
34、JVM重用有什么优点和不足
优点:1.降低任务启动的开销,提高任务的执行效率.
2.允许多个task使用一个jvm
不足:整个任务结束前jvm不释放,长时间占用,导致资源不足时,资源(占用而不使用)浪费
35、什么是Hive本地模式
任务在提交SQL语句的节点上“本地”执行,任务不会分配到集群
36、什么是MR本地计算
数据存储到HDFS后,编写分析代码实现计算程序,程序在进行分发时,优先分发放到这个程序所使用到的数据所在的节点上。
36、先join后过滤的优化方案
-- 1.先关联再过滤
select a.id from bigtable a join bigtable b on (b.id>10 and a.id =b.id);
-- 2.先过滤再关联
select a.id from bigtable join (select id from bigtable where id > 10) b on a.id = b.id;
37、影响map数量的因素
文件小的时候,文件的数量
文件大的时候,块的数量
最后:能力有限,如果有什么不对的地方欢迎给我留言.