hive的面试题

1、什么是Hive
Hive是一个语句Hadoop的一个数据仓库工具,是将结构化数据文件映射成为一个数据表,并提供类SQL的查询功能。
2、Hive的意义(最初研发的原因)
在hadoop是个好软件,但是不好使用(学习成本太高,坡度陡,难度大)的前提下降低了程序员使用hadoop的学习成本,降低了难度。
3、Hive的内部组成模块,作用分别是什么
解释器-> 编译器(会使用到元数据)->优化器->执行器
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、内部表与外部表的区别
1.内部表数据由Hive自身管理,外部表数据由HDFS管理;
2.内部表数据存储的位置是hive.metastore.warehouse.dir(默认:/user/hive/warehouse),外部表数据的存储位置由自己指定;
3.删除内部表会直接删除元数据(metadata)及存储数据;删除外部表仅仅会删除元数据,HDFS上的文件并不会被删除;
4.对内部表的修改会将修改直接同步给元数据,而对外部表的表结构和分区进行修改,则需要修复(MSCK REPAIR TABLE table_name;)
9、分区表的优点是,分区字段的要求是.
分区字段绝对不能出现在表已有的字段内。
优点:提高查询效率
10、分桶表的优点是,分桶字段的要求是
​对分桶字段取哈希,用这个哈希值与桶的数量取余,余几,这个数据就放在哪个桶内。
优点:提高join效率和用于数据取样。
11、数据导入表的方式
有5种方式

1、直接向分区表中插入数据
insert into table score3 partition(month =‘201807’) values (‘001’,‘002’,‘100’);
2、通过查询插入数据
insert overwrite table score4 partition(month = ‘201806’) select s_id,c_id,s_score from score;
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、查询语句中创建表并加载数据
create table score5 as select * from score;
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、数据导出表的方式
有7种方式
5
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 myhive.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的区别
1.where是对分组前数据进行过滤,having是对分组后数据进行过滤
2.在where子句中不能使用聚组函数,在having语句中可以使用聚组函数

15、distribute by何时使用,通常与哪个联合使用
对数据进行分区时使用,指定字段,默认根据字段的采用哈希算法后与reduce数量取余算出分区,余数相同的分到一个区。
通常和sort by联合使用,Hive要求distribute by语句要写在sort by语句之前
== 16、Cluster by何时使用==
当distribute by和sort by字段相同时,可以使用cluster by方式。
17、distdistribute by+sort by 指定同一字段时,可使用Cluster by代替
不过 cluster by 的结果有限制,只能倒序排列,而 distribute by+sort by 可根据需求进行排序ribute by+sort by(相同字段) 与Cluster by的区别
18、hive -e/-f/-hiveconf分别是什么意思
1、-e从命令行执行指定的HQL
2、-f 执行HQL脚本
3、hive -hiveconf 设置hive运行时候的参数配置
19、hive声明参数有哪些方式,优先级是什么
三种方法:
1、配置文件(配置文件参数)
2、hive -hiveconf (命令行参数)
3、在hive shell窗口 设置( 参数声明)
set mapred.reduce.tasks=100;
优先级: 参数声明 > 命令行参数 > 配置文件参数(hive)
=20、编写hiveUDF代码,方法名称叫什么
valuate
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有什么效果设置none有什么效果
设置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重用,每个task都需要独立的开启、关闭jvm(开启、关闭需要1s),任务的开销会很大
开启jvm重用,启动阶段开启部分jvm,这些jvm不关闭,等待被使用,后面的任务需要使用jvm时直接调用,就任务的开销会很小
34、什么是MR本地计算
本地计算:数据存储后,计算这批数据的程序已经写完,程序在进行分发时,优先将程序分发到程序所用到数据所在的节点。
35、先join后过滤的优化方案
join时通常是先join 后过滤优化方案是先过滤后join

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值