vlambda博客
学习文章列表

Impala UDF的使用与一次报表异常






















     背景今天是五一最后一天,本来快快乐乐回到家玩,走到门口,突然听到业务群里有甲方在抱怨报表异常。瞬间进入到工作状态(当然是假的-.-)。看到Azkaban调度没有明显报错,只是简单一句Error when run script script.1。这就奇了怪了,怎么会发生这种怪事呢 ?
























       这个时候,作为一个新人,最需要的就是脑洞大开,到底怎么解决这个问题呢?





核心思路

 一般解决问题的思路呢就是尽可能地让你的代码跑起来,而在本次问题中的调度跑的就是SQL,准确来说是Impala SQL,但是局限于数据量又不能直接跑啊,聪明的读者肯定想到了用explain语法,这样可以暴露出脚本中的bug,而又不触发大量的运行压力。

Impala UDF的使用与一次报表异常



结果,真给我找出来了,就是其中的一个自定义函数失效了。



Impala UDF的使用与一次报表异常

那么,这类就要涉及到impala中的udf函数了。为甚魔UDF函数会失效呢?



接下来,请做好笔记:

1


impala udf函数的创建函数有两种语法,一种是显式地声明返回值类型,一种是隐式不声明返回值类型,而这并不是他们最大的区别,他们最大的区别是:创建之后是否持久化,也就是临时函数跟永久函数的区别了。

那么,具体如何创建并使用呢?




02 首先,将自定义的函数大成jar包上传到hdfs指定目录,比如,我的是hdfs:///user/hadoop/MD5.jar. 



03 接下来,重启impala,在shell界面运行以下脚本即可.
-- 创建临时udf(重启后function消失)
create function if not exists md5(String) returns String location "hdfs:///user/hadoop/MD5.jar" SYMBOL="com.stark.decode";

--创建永久udf(重启后function不消失)

create function if not exists md5

location "hdfs:///user/hadoop/MD5.jar"

SYMBOL="com.stark.decode";



本萌新就是这么修改的,重跑调度之后数据恢复正常,报表也能正常显示了,萌新也能继续欢乐的小长假时光了。






NOW我们走吧




       仅以此次解决异常的新路历程分享给各位大佬,希望给位读者在开发的路上能够收获愈多,发现工作中的有趣的细节,欢迎在留言处分享,或者你有什么小建议,想看的技术都可以私信留言,看到会及时回复的。
















本文由Robin Zhang编辑。唯一版权属于蔚来大数据私人所有,未经授权,禁止转载,谢谢!