六、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
网友评论