面试常问:Hive

2022-04-15  本文已影响0人  那就这样吧丶xx

六、Hive

1、Hive组成

元数据默认存储在derby数据库,但只支持单客户端,修改mysql数据库,支持多客户端访问
编译器 解析器 优化器 执行器
默认执行引擎MR
存储HDFS

2、与mysql区别

                 hive                              mysql
    数据量   大                                   小
    速度   大=》快 (查询)      小=》快 (增删改查)

3、内部表与外部表区别

内部表删除数据:删除元数据和原始数据
外部表删除数据:删除元数据

什么时候用内部表?什么时候用外部表?

绝大多数表都是外部表;
只有自己使用的临时表,内部表

4、4个by

order by         全局排序=》容易发生数据倾斜
sort by         排序
distribute by         划分分区 sort by + distribute by =>分区内排序
cluster by         sort by + distribute by 字段相同时,为 cluster by

5、系统函数

日(date_add、date_sub)、周(next_day)、月(date_format、lastday)
解析json(get_json_object)

6、自定义函数 UDF/UDTF/UDAF

1)自定义UDF

解析公共字段;

2)自定义UDTF

解析事件字段

3)不用自定义函数行不行?

可以不用,用解析json的函数;那你为什么要用呢?方便定位bug

4)自定义UDF步骤

定义类 继承UDF,重写evaluate方法;

5)自定义UDTF步骤

定义类 继承UDTF,重写3个方法,
分别是初始化(定义返回值的名称和类型)、process、关闭
打包=》上传到HDFS路径=》在hive的客户端创建永久函数

6)UDF/UDTF/UDAF的区别

UDF:用户定义(普通)函数,只对单行数值产生作用
UDAF:用户定义聚合函数,可对多行数据产生作用;等同与SQL中常用的SUM(),AVG(),也是聚合函数 多进一出
UDTF:用户定义表生成函数,用来解决输入一行输出多行

7、窗口函数

rank over topn

8、优化

1)mapjoin 默认打开,不要关闭
2)行列过滤:join+where => where+join
3)创建分区表(天),防止后续全盘扫描
4)小文件相关处理
(1)CombinehiveInputformat => 减少切片个数,减少maptask个数
(2)JVM重用
(3)merge 如果是maponly任务,默认打开
            执行完任务后,会产生大量小文件,默认会帮你开启一个job,将小于16m的文件,合并到256m
           如果是mapreduce任务,需要将该功能开启。
5)压缩
6)列式存储
7)替换引擎
            mr    基于磁盘    速度慢    可靠性搞     效率低    数据量大    计算时间比较长    周、月、年
            tez    基于内存     速度快    可靠性差    效率高    临时调试代码使用    即席查询
            spark    基于内存+磁盘    可靠性居中    效率居中    每天的定时任务
8)在map端提前开启Combiner(不影响最终业务逻辑)
9)合理设置map个数、reduce个数
max(0,min(块大小,Long的最大值)
128m数据 =》1g

9、数据倾斜

10、杂七杂八

上一篇下一篇

猜你喜欢

热点阅读