1.hive 的使用, 内外部表的区别,分区做用, UDF 和 Hive 优化
(1)hive 使用:仓库、工具
(2)hive 内部表:加载数据到 hive 所在的 hdfs 目录,删除时,元数据和数据文件都删除
外部表:不加载数据到 hive 所在的 hdfs 目录,删除时,只删除表结构。
(3)分区做用:防止数据倾斜
(4)UDF 函数:用户自定义的函数 (主要解决格式,计算问题 ),须要继承 UDF 类
java 代码实现
class TestUDFHive extends UDF {
public String evalute(String str){
try{
return "hello"+str
}catch(Exception e){
return str+"error"
}java
}面试
} 负载均衡
(5)sort by和order by之间的区别?
函数
使用order by会引起全局排序;工具
select * from baidu_click order by click desc;
使用 distribute和sort进行分组排序优化
select * from baidu_click distribute by product_line sort by click desc;
distribute by + sort by就是该替代方案,被distribute by设定的字段为KEY,数据会被HASH分发到不一样的reducer机器上,而后sort by会对同一个reducer机器上的每组数据进行局部排序。spa
sort by的排序发生在每一个reduce里,order by和sort by之间的不一样点是前者保证在全局进行排序,然后者仅保证在每一个reduce内排序,若是有超过1个reduce,sort by可能有部分结果有序。code
注意:它也许是混乱的做为单独列排序对于sort by和cluster by。不一样点在于cluster by的分区列和sort by有多重reduce,reduce内的分区数据时一致的。 blog
(6)Hive 优化:看作 mapreduce 处理排序
排序优化: sort by 效率高于 order by。分区:使用静态分区 (statu_date="20160516",location="beijin") ,每一个分区对应 hdfs 上的一个目录,减小 job 和 task 数量:使用表连接操做,解决 groupby 数据倾斜问题:设置hive.groupby.skewindata=true ,那么 hive 会自动负载均衡,小文件合并成大文件:表链接操做,使用 UDF 或 UDAF 函数: