大数据面试简答题(三) -hive

文章目录

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中加载数据到hiveload  data local   inpath    ‘数据路径’    into  table    表名;
​	-- 2.从linux中加载数据到hive,并覆盖load  data local  inpath    ‘数据路径’   overwrite  into  table    表名;
	-- 3.​	从hdfs中加载数据到hiveload  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数量的因素

文件小的时候,文件的数量
文件大的时候,块的数量

最后:能力有限,如果有什么不对的地方欢迎给我留言.

发布了88 篇原创文章 · 获赞 114 · 访问量 2987

猜你喜欢

转载自blog.csdn.net/hongchenshijie/article/details/103289115
今日推荐