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数据进行复杂算法逻辑