第七题引用致谢:
https://blog.csdn.net/qq_38989232/article/details/103860618
《Hive》小节测评
1.Hive的内部表和外部表的区别是什么?
(1)外部表只删除元数据,不删除实际数据,可得5分
(2)内部表都删掉即可,可得5分
2.Hive分区表的作用?静态分区和静态分区的区别是什么?
(1)分区表实际上就是对应一个HDFS文件系统上的独立的文件夹,大意正确即可得4分
(2)动态分区在插入数据时,不指定具体的分区列值,而是仅仅指定分区字段,大意正确可得6分
3.Order by,sort by,distribute by,cluster by的区别是什么?
(1)order by:全局有序,只有一个reduce,可得4分
(2)sort by:分区有序,多个reduce,可得4分
(3)distribute by:类似MR中的partition,可得3分
(4)cluster by:等价于distribute by + sort by,可得4分
4.什么是视图?视图的应用场景有哪些?
(1)①只是一个逻辑结构,②只保存定义不存储数据,可得4分
(2)①将特定的列提供给用户,②查询复杂,隐藏子查询,可得6分
5.Hive中UDF函数需继承哪一个类?重写哪一个方法?
(1)继承UDF类或GenericUDF类(5分)
(2)重写evaluate方法(5分)
6.列举5个聚合考试
sum()求和
avg()平均值
max()最大值
min()最小值
count()计数
7.常见的Hive优化方式有哪些?
(1)本地模式:
有时Hive的输入数据量是非常小的。在这种情况下,为查询触发执行任务消耗的时间可能会比实际job的执行时间要多的多
(2)JVM重用
对于很难避免小文件的场景或task特别多的场景,这类场景大多数执行时间都很短,JVM的启动过程可能会造成相当大的开销
(3)并行执行
Hive会将一个查询转化成一个或者多个阶段。某个特定的job可能包含众多的阶段,而这些阶段可能并非完全互相依赖的,也就是说有些阶段是可以并行执行的,这样可能使得整个job的执行时间缩短。
(4)查询优化(Map端join等)
如果不指定MapJoin或者不符合MapJoin的条件,那么Hive解析器会将Join操作转换成Common Join,即:在Reduce阶段完成join。容易发生数据倾斜。可以用MapJoin把小表全部加载到内存在map端进行join,避免reducer处理。
(5)采用压缩格式
压缩可以节约磁盘的空间,压缩可以增加吞吐量和性能量(减小载入内存的数据量),
8.如何防止数据倾斜?
增加jvm内存
自定义分区
重新设计key
调整map数
小文件使用combinner合并,减少map数
复杂文件增加map数
调整reduce数
9.使用Hive计算num列的sum值
item | num | sum |
---|---|---|
A | 1,2,3,4 | |
B | 2,5,1 |
建表语句
create table test2(
item string,
num string
)
stored as textfile;
插入数据
insert into test2 values("A","1,2,3,4");
insert into test2 values("B","2,5,1");
查询语句(查询语句写正确即可, 无需建表和插入数据)
select item,num,
sum (c) as sum
from test2 lateral view explode(split(num,",")) tmp as c
group by item,num