Hive面试汇总(2021)
Hive解析成MR的过程:
Hive通过给用户提供一系列交互接口,接收到用户的指令(sql语句),结合元数据(metastore),经过Driver内的解析器,编译器,优化器,执行器转换成mapreduce(将sql转换成抽象语法树AST的解析器,将AST编译成逻辑执行计划的编译器,在对逻辑执行计划进行优化的优化器,最后将逻辑执行计划转换成mapreduce),提交给hadoop中执行,最后将执行返回的结果输出到用户交互接口。
存储位置:Hive数据存储在HDFS上。数据库保存在块设备或本地文件系统
数据更新:Hive不建议对数据改写。数据库通常需要经常修改
执行引擎:Hive通过MapReduce来实现。数据库用自己的执行引擎
执行速度:Hive执行延迟高,但它数据规模远超过数据库处理能力时,Hive的并行计算能力就体现优势了。数据库执行延迟较低
数据规模:hive大规模的数据计算。数据库能支持的数据规模较小
扩展性:Hive建立在Hadoop上,随Hadoop的扩展性。数据库由于ACID语义[wh1] 的严格限制,扩展有限
3. Hive内部表和外部表的区别
存储:外部表数据由HDFS管理;内部表数据由hive自身管理
存储:外部表数据存储位置由自己指定(没有指定location则在默认地址下新建);内部表数据存储在hive.metastore.warehouse.dir(默认在/uer/hive/warehouse)
创建:被external修饰的就是外部表;没被修饰是内部表
删除:删除外部表仅仅删除元数据;删除内部表会删除元数据和存储数据
4. Hive中order by,sort by,distribute by和cluster by的区别
order by:对数据进行全局排序,只有一个reduce工作
sort by:每个mapreduce中进行排序,一般和distribute by使用,且distribute by写在sort by前面。当mapred.reduce.tasks=1时,效果和order by一样
distribute by:类似MR的Partition,对key进行分区,结合sort by实现分区排序
cluster by:当distribute by和sort by的字段相同时,可以使用cluster by代替,但cluster by只能是升序,不能指定排序规则
在生产环境中order by使用的少,容易造成内存溢出(OOM)
生产环境中distribute by和sort by用的多
row_number():根据查询结果的顺序计算排序,多用于分页查询
rank():排序相同时序号重复,总序数不变
dense_rank():排序相同时序号重复时,总序数减少
select name,subject,score
row_number() over(partition by subject order by score desc) rn,
rank() over(partition by subject order by score desc) r,
dense_rank() over(partition by subject order by score desc) dr
from student_score;
name
subject
score
rn
r
dr
Zhang
English
84
1
1
1
Qian
English
84
2
1
1
Shun
English
78
3
3
2
Li
English
69
4
4
3
…
Math
…
…
…
…
本地:load data local inpath ‘/root/student.txt’ into table student;
HDFS:load data inpath ‘/user/hive/data/student.txt’ into table student;
2. Insert方式,往表里插入
insert into table student values(1,’zhanshan’);
3. As select方式,根据查询结果创建表并插入数据
create table if not exists stu1 as select id,name from student;
4. Location方式,创建表并指定数据的路径
create external if not exists stu2 like student location ‘/user/hive/warehouse/student/student.txt’;
5. Import方式,先从hive上使用export导出在导入
import table stu3 from ‘/user/export/student’;
0星
超过10%的资源
44KB
下载
1. Insert方式,查询结果导出到本地或HDFS
Insert overwrite local directory ‘/root/insert/student’ select id,name from student;
Insert overwrite directory ‘/user/ insert /student’ select id,name from student;
2. Hadoop命令导出本地
hive>dfs -get /user/hive/warehouse/student/ 000000_0 /root/hadoop/student.txt
3. hive Shell命令导出
]$ bin/hive -e ‘select id,name from student;’ > /root/hadoop/student.txt
4. Export导出到HDFS
hive> export table student to ‘/user/export/student’;
5. Sqoop导出
over():指定分析函数工作的数据窗口大小随行变化(跟在聚合函数 [wh2]后面,只对聚合函数有效)
current row 当前行
n preceding 往前n行数据
n following 往后n行数据
unbounded:
unbounded preceding 从前面开始 |————>
unbounded following 直到终点 ————>|
java面试题
docx
0星
超过10%的资源
377KB
下载
lag(col,n) 往前第n行数据
lead(col,n) 往后第n行数据
ntile(n) 把有序分区中的行分化到n个数据组中,各组的编号从1开始,ntile会返回每行所属的组编号(n为int类型)
举例说明:
select name,orderdate,cost,
sum(cost) over() as sp1, --所有行相加
sum(cost) over(partition by name) as sp2, --按名字分组,组内相加
sum(cost) over(partition by name order by orderdate) as sp3, --按名字分组并按时间排序
sum(cost) over(partition by name order by orderdate
rows between unbounded preceding and current row)as sp4,–由起点到当前行的聚合
sum(cost) over(partition by name order by orderdate
rows between 1 preceding and current row)as sp5, --由当前一行到当前行的聚合
sum(cost) over(partition by name order by orderdate
rows between 1 preceding and 1 following)as sp6, --由当前行到前后一行的聚合
sum(cost) over(partition by name order by orderdate
rows between current row and unbouded following)as sp7–由当前行到后面所有行的聚合
from business;
*注:sp3和sp4结果一样,因为根据order by升序逐渐依次增加
查看顾客上次和下次的购买时间
select name,orderdate,cost,
lag(orderdate,1) over(distribute by name sort by orderdate)as sp1,–上次购买时间
lead(orderdate,1) over(distribute by name sort by orderdate)as sp2–下次购买时间
from business;
查询前20%时间的订单信息
select * from (
select name,orderdate,cost, ntile(5) over(order by orderdate) sorted
from business
) t
where sorted = 1;
自定义UDF:继承UDF,重写evaluate方法
自定义UDTF:继承GenericUDTF,重写3个方法,initialize(自定义输出的列名和类型),process(将结果返回forward(result)),close
[wh1]A(atomicity)原子性:事务操作要么全部做完,要么不做
C(consistency)一致性:事务运行期间,数据对象依然完整性
I(isolation)独立性:并发事务之间不会相互影响
D(durability)持久性:一旦事务提交后,修改将永久保存在数据库上
[wh2]聚合函数:count,sum,avg,min,max
————————————————
版权声明:本文为CSDN博主「「已注销」」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wushuoyouting/article/details/113120237