UDAF
继承UDAF
内部定义一个静态类,实现UDAFEvaluator接口
实现init,iterate,terminatePartial,merge,terminate五个方法
编写代码完成后install打包
Rz -bye 上传到本地
Hdfs dfs -put -f **** * /**/**
上传到hdfs
Add jar hdfs:// jar包所在路径
Create temporary function 函数名称 as ‘主类路径’
Hive sql中调用udaf函数
注意 缓存问题,可先退出再重新执行或更改jar包名称
UDTF
解决一行输入多行输出,即1:n,即行转列应用
往往被lateral view explode+udf等替代实现,比直接用udtf会更简单、直接、更灵活一些
关于MapJoin的问题剖析
概念说明
将join的本来应该是reduce进行关联查找的过程,改成由纯map端进行关联查找。
特点特征
减少了reduce的处理,全部放到map端进行操作。
减少了数据移动,提升了IO和计算效率。
应用场景
大表join小表的时候,
大数据块join小数据块的时候。
代码实现
在hive当中已经默认开启了该功能。
关于数据倾斜的问题剖析
概念说明
在大数据处理环境下,数据处理过程出现明显的倾斜现象,导致任务整体迟迟不能完全结束。
特点特征
在作业或是任务在分布式执行时,经常出现大部分Task任务很快结速,而很少一部分Task,往往是1个或是1-2个一直卡在99%的情况下。
典型的木桶原理,任务的执行完成时间,取决于最后一个Task的完成时间。
应用场景
假倾斜场景
实际数据并没有倾斜,而是由于人为代码原因导致的倾斜。
比如:
数据格式设置不对,导致没有发挥分布式处理的优势
:比如说设置成gzip,snappy。
SQL编写不合理-计算用户uv数
如:select count(distinct uid) from user;
改成:
select count(1) from (select 1 from user group by uid) temp;
代码优化就可以了
真倾斜场景
即数据或是任务本身真的存在客观的倾斜性
比如:VIP会员数据的倒卖倒买问题,导致极少数VIP帐号对应的数据量极多,而正常帐号较少。
解决方法:只能分而治之,将倾斜的数据分类,将正常数据分类,然后进行分别计算。
比如:硬件机器本身配置不均衡导致的计算能力倾斜问题。
解决方法:
第1种是硬性解决即让硬件更加均衡。
第2种是通过NodeLabel方式。
代码实现
参考如上的解决方法即可。
关于二次排序的问题剖析
概念说明
在map到reduce的处理过程当中,按照2个字段进行升序排列,而不是像默认的一次排序那样,只按照key一个字段排序。
特点特征
2个字段排序,第1个字段若有比较结果则按第1个字段排序,若相等,则按第2个字段升序排列。
应用场景
当单个字段不能够满足排序要求时,均可使用二次排序。