UDF函数,hive调用java包简单方法

UDF函数,是hadoop在强大的大数据批量导入导出操作之余,为了满足复杂的数据逻辑操作留下的接口 

核心思想:不管是UDF函数还是自定义处理jar包,都是要放置在hadoop服务器上的,相当于hadoop多出了一个自定义的处理数据的方法

1)其中调用的不管是参数还是数据库都是以hadoop本身的服务器环境路径为本地路径,而不是自己操作的java环境

2)

现在记录下2种近期使用过的简单方法,非常简单。

1、函数调用

1)导入UDF架包,保证引用UDF时不会编译报错

2)java中建任意类继承UDF,然后重写其evaluate方法,参数为你想操作的字段的值

-- 建议单一修改字段值时但是hive自带函数不满足条件时使用  不建议处理复杂操作

3)将写好的java类编译为.class文件   可以使用eclipse或者intelij等IDE工具直接获取,或者使用jdk编译方式

-- jdk编译方式,将写好的java类拷贝出来放在1个路径简单的位置, win+R --cmd  打开命令窗口  cd到jdk的bin目录下  

javac + java文件位置   回车运行即可,若报错 检查bin目录下是否缺少javac组件或者文件路径是否写错 

4)打包  仍然可以使用eclipse或者intelij等IDE工具直接打包  也可以使用jar命令打包方式   保证2种方式打出来的包结构相同即可

-- jar打包方式  新建文件夹,名称英文即可,此处假设为com。将3)步生成好的class文件放入 假设为test.class 

cd 到com的同级目录   使用命令  jar -cvf testUdf.jar com    运行后会在com的同级目录中出现名称testUdf.jar的包 

5)将包上传到hadoop服务器上你可以找到的位置  假设为  /home/hadoop/soft/file/testUdf.jar

6)将包加入hive    进入hive环境,输入命令:add jar  /home/hadoop/soft/file/testUdf.jar;

1> 临时方式:create temporary function testFunction as 'com.test';  -- 只对当前session起效,即退出hive后,下次要使用需要再次创建

2>永久生效: 

《1》 上传到 hdfs,使用命令:hdfs  dfs -put /home/hadoop/soft/file/testUdf.jar /lib   

《2》 创建函数  create function functionTest as 'com.test' using jar 'hdfs:///lib/testUdf.jar';

2、 比较实用的 包jar调用,使用sh的脚本调用方式   实现方法更加简单 

1)不用实现UDF,直接像写正常的java类那样写一个你要处理数据的类,包含1个main函数即可

2)入参从main函数的 args中取,可以为任意类型,第1个为args[0],第2个为args[1] 以此类推

3)将写好的java程序打包,

这里需要注意的是:除了jdk的架包外,若还需要其他架包一起打包进jar‘。一般若是作数据处理是不需要其他包的,若有

需要特别处理的方法,可以自己写一个工具类然后把整个函数拷贝进去 

4)将打好的包上传到hadoop上自己熟悉的位置,使用sh脚本调用jar包,带上自己要使用的参数即可 

5)sh调用方式: 暂无

需要引起注意的地方: 1》  hadoop我使用的环境是原先配置的有jdk,若使用者没有需要自己配置

                2》  此方法适用于 使用参数 查询 hive数据进行复杂算法逻辑

原文地址:https://www.cnblogs.com/mzyy/p/9879696.html