前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Hive面试题

Hive面试题

作者头像
刘浩的BigDataPath
发布2021-04-13 12:10:21
2.3K0
发布2021-04-13 12:10:21
举报
文章被收录于专栏:大数据那些年大数据那些年
代码语言:javascript
复制
1、什么是Hive
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类		SQL查询功能(HQL)

2、Hive的意义(最初研发的原因)
避免了去写MapReduce,提供快速开发的能力,减少开发人员的学习成本。 

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

元数据:Metastore
	元数据包括:表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等;
	默认存储在自带的derby数据库中,推荐使用MySQL存储Metastore

   (1)解析器(SQL Parser):解析HQL语义
   (2)编译器(Physical Plan):将语HQL根据语义转换成MR程序
   (3)优化器(Query Optimizer):对逻辑执行计划进行优化。(对MR程序进行优化)
   (4)执行器(Execution):把任务提交到hadoop集群

4、Hive支持的数据格式
	可支持Text,SequenceFile,ParquetFile,ORC格式RCFILE等

5、进入Hiveshell窗口的方式
	1.hive
	2.	启动服务 hiveserver2
		beeline 
		! connect jdbc:hive2://主机名:10000

6、Hive数据库、表在HDFS上存储的路径是什么
	/user/hive/warehouse

7、like与rlike的区别
	like的内容不是正则,而是通配符。
	rlike的内容可以是正则,正则写法与Java一样。	
	
8、内部表与外部表的区别

删除内部表会直接删除元数据(metadata)及存储数据;删除外部表仅仅会删除元数据,HDFS上的文件并不会被删除;

9、分区表的优点是,分区字段的要求是
提高特定(指定分区)查询分析的效率
分区字段的要求:分区字段不能出现在表中已有的字段内	

10、分桶表的优点是,分桶字段的要求是
使取样(sampling)和join 更高效
分桶字段的要求:分桶字段必须是表中已有的字段
	
11、数据导入表的方式
1.直接向表中插入数据
	insert into table 表名 values (数据);
2.通过load方式加载数据
	覆盖:
	load data local inpath '本地数据路径' overwrite into table 表名 partition(分区字段='值');
	load data  inpath 'HDFS数据路径' overwrite into table 表名 partition(分区字段='值');
	添加:
	load data local inpath '本地数据路径'  into table 表名 partition(分区字段='值');
	load data  inpath 'HDFS数据路径'  into table 表名 partition(分区字段='值');
3.通过查询插入数据
	insert overwrite table 表名1 partition(分区字段='值') select 指定字段 from 表名2;
4.多插入模式
	from 原始表 
	insert overwrite table 被插入表1 partition(分区字段='值'') select 指定字段 
	insert overwrite table 被插入表2 partition(分区字段='值')  select 指定字段;	
5.查询语句中创建表并加载数据
	create table 表1 as select 指定字段 from 表2;
6.创建表时通过location指定加载数据路径
	create external table 表1 (表1字段...) row format delimited fields terminated by '分隔符' location 'HDFS路径';

12、数据导出表的方式
1.将查询的结果导出到本地
	insert overwrite local directory '本地路径' select 指定字段 from 表名;
2.将查询的结果格式化导出到本地或HDFS
	LOCAL:
	insert overwrite local directory '本地路径' row format delimited fields terminated by '分隔符' collection items terminated by '分隔符' select 指定字段 from 表名;
	HDFS:
	insert overwrite local directory '本地路径' row format delimited fields terminated by '分隔符' collection items terminated by '分隔符' select 指定字段 from 表名;
3.Hadoop命令导出到本地
	dfs -get /export/servers/exporthive/000000_0 /export/servers/exporthive/local.txt;
	dfs -get 表中数据在HDFS上的存储位置 本地路径;
4.hive shell 命令导出
	hive -e "select * from myhive.score;" > /export/servers/exporthive/score.txt
	hive -e "select 指定字段 from 表名;" > 本地路径;
5.export导出到HDFS上
	export table score to '/export/exporthive/score';
	export table 表名 to '本地路径';


13、order by与sort by的区别
	order by 是全局排序,一个MapReduce,而 sort by 是局部分区内部进行排序

14、where 与 having的区别
1.where是作用在表的所有字段,having是作用在查询的字段上。
2.在where子句中不能使用聚组函数,在having语句中可以使用聚组函数

15、distribute by何时使用,通常与哪个联合使用
按照指定的字段进行分区时,对数据进行分区时使用
通常和sort by联合使用,Hive要求distribute by语句要写在sort by语句之前

16、Cluster by何时使用
要根据某个字段进行分区,并且以这个字段进行排序时使用Cluster by

17、distribute by+sort by(相同字段) 与Cluster by的区别
	 cluster by 不能定义排序规则,只能正序排列,而 distribute by+sort by 可以定义排序规则
	
18、hive -e/-f/-hiveconf分别是什么意思
	hive -e 后面的参数是‘命令行’
	hive -f 后面的参数是文件
	hive -hiveconf 设置hive运行时候的参数配置
	
	
19、hive声明参数有哪些方式,优先级是什么
	配置文件(配置文件参数)
	hive -hiveconf (命令行参数)
	在hive的shell窗口set(参数声明)	
	
	参数声明>命令行参数>配置文件参数
	
20、编写hiveUDF代码,方法名称叫什么
	evaluate

21、企业中hive常用的数据存储格式是什么?常用的数据压缩格式是什么?
	在实际的项目开发当中,hive表的数据存储格式一般选择:orc或parquet。压缩方式一般选择snappy。

22、hive自定义函数的类型
1.UDF(User-Defined-Function) 一进一出
2.UDAF(User- Defined Aggregation Funcation) 聚集函数,多进一出。Count/max/min
3.UDTF(User-Defined Table-Generating Functions) 一进多出,如lateral view explore)

23、Fetch抓取中
    设置more有什么效果
	执行某些查询语句,不会执行mapreduce程序
	设置none有什么效果
	执行查询语句,所有的查询都会执行mapreduce程序
		   
24、本地模式有什么好处
	在数据量较小时,提高查询效率
原因:
	查询数据的程序运行在提交查询语句的节点上运行(不提交到集群上运行),

25、当一个key数据过大导致数据倾斜时,如何处理
当发生数据倾斜时,使用局部聚和可以起到性能调优的效果(在Map端进行聚合)
当发生倾斜时,查询语句会转化成至少两个MR程序,第一个程序进行局部聚和,第二个MR程序进行最终聚和。

26、Count(distinct) 的替换语句如何编写
使用嵌套查询
例:
select count(distinct id) from score;
	转|换
select count(id) from (select id from score group by id) a;

27、如何使用分区剪裁、列剪裁
什么是分区剪裁:需要哪个分区,就获取哪个分区的数据
什么是列剪裁:需要哪个列,就获取哪个列的数据

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

29、数据倾斜时,如何将众多数据写入10个文件
1.设置reduce数量10,使用id,对id进行分区distribute by 
2.设置reduce数量10,然后使用 distribute by rand()
rand字段为随机数 ,从而随机的将数据写入到文件中 

30、reduce数量的计算是什么
决定reduce数量的因素,
参数1:每个Reduce处理的最大数据量 
参数2:每个任务最大的reduce数
计算reducer数的公式
N=min(参数2,总输入数据量/参数1)

31、并行执行有什么好处
在没有依赖的前提下,开启并行执行(多任务多阶段同时执行),从而起到优化执行效率的作用

32、严格模式不能执行哪些命令
1、用户不允许扫描所有分区
2、使用了order by语句的查询,要求必须使用limit语句
3、限制笛卡尔积的查询

33、JVM重用有什么好处
重复利用JVM,以减少JVM开启和关闭的次数,减少任务开销,提高效率

34、什么是MR本地计算
数据存储后,计算这批数据的程序已经写完,程序在进行分发时,优先将程序分发到程序所用到数据所在的节点。

35、先join后过滤的优化方案

 先过滤后关联(join)
 
	例如
SELECT a.id   FROM bigtable a   LEFT **JOIN ori b ON a.id = b.id**   WHERE **b.id <= 10;**
优化方案
1、SELECT a.id   FROM ori    LEFT JOIN bigtable b ON **(b.id <= 1**0 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;


36、影响Map数量的因素
当文件大小很小时,影响map的数量的因素是文件的个数
当文件大小很大时,影响map的数量的因素是数据块的数量

37、什么是MR本地模式
任务提交时,运行在提交HQl 所在的节点,不提交到集群。(本地计算提交到集群。本地模式不提交到集群)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/11/29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据保险箱
数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档