大数据学习之Hive UDF及优化23

情到浓时终转凉″ 提交于 2021-02-16 19:32:26

十一:UDF函数

自定义函数

之前使用hive自带函数sum/avg/max/min...

 

 

三种自定义函数:

UDF:一进一出(User-Defined-Function)

UDAF:多进一出 (count、max、min)

UDTF:一进多出

 

(1)导入hive依赖包 hive/lib下。编写自定义函数

 

 

 

2)上传 alt+p

3)添加到hive中 add jar /root/lower.jar;

 

(4)关联(注意是全类名)

create temporary function my_lower as "com.itstaredu.com.Lower";

 

(5) 使用

 select ename,my_lower(ename) lowername from empt;

 

十二:hive优化

 

1压缩

1)开启Map阶段输出压缩

开启输出压缩功能:

set hive.exec.compress.intermediate=true;

开启map输出压缩功能:

set mapreduce.map.output.compress=true;

设置压缩方式:

set mapreduce.map.output.compress.codec=org.apache.hadoop.io.compres

s.SnappyCodec;

 

(2)开启reduce输出端压缩

开启最终输出压缩功能

set hive.exec.compress.output=true;

开启最终数据压缩功能

set mapreduce.output.fileoutputformat.compress=true;

设置压缩方式

set mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoo

p.io.compress.SnappyCodec;

设置块压缩

set mapreduce.output.fileoutputformat.compress.type=BLOCK;

 

2存储

https://blog.51cto.com/14284607/2381714这篇文章进行了hive的存储格式对比。我觉得写得很清楚!!

Hive存储格式:TextFile/SequenceFile/orc/Parquet

orc:Index Data/row Data/stripe Footer

压缩比:

orc > parquet > textFile

查询速度:

orc > textFile

50s > 54s

3Group by优化

分组:mr程序,map阶段把相同key的数据分发给一个reduce,一个key的量很大。

解决方案:

map端进行聚合(combiner)

set hive.map.aggr=true;

设置负载均衡

set hive.groupby.skewindata=true;

4数据倾斜

1)合理避免数据倾斜

合理设置map数

合并小文件

set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;

合理设置reduce数

 

2)解决数据倾斜

map端进行聚合(combiner)

set hive.map.aggr=true;

设置负载均衡

set hive.groupby.skewindata=true;

 

3)JVM重用

mapred-site.xml

mapreduce.job.jvm.numtasks

10~20

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!