千家信息网

如何自定义hive永久函数

发表于:2024-10-02 作者:千家信息网编辑
千家信息网最后更新 2024年10月02日,这篇文章给大家分享的是有关如何自定义hive永久函数的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。需求原因:hive本身提供一个nvl的函数,但是该函数只对null值起作用
千家信息网最后更新 2024年10月02日如何自定义hive永久函数

这篇文章给大家分享的是有关如何自定义hive永久函数的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

需求原因:

hive本身提供一个nvl的函数,但是该函数只对null值起作用,现在的需求是不只是对null起作用,对""这样的空值也要起作用,所以需要自定义一个名叫nvls的函数,并集成到hive当中去。

具体步骤:

1:先写好java文件内容如下:

package org.apache.hadoop.hive.ql.udf;

import org.apache.hadoop.hive.ql.exec.UDF;

import org.apache.hadoop.io.Text;

public class MyNvl extends UDF {

public Text evaluate(final Text t,final Text x) {

if(t!=null){

if(t.toString().equals("")){

return x;

}

}else{

return x;

}

return t;

}

}

2:测试:

2.1:先打成jar包名叫lixiyuan.jar,然后上传到服务器上。本人账户是zb_test。

Jar包放到/data/zb_test目录下。

然后进入hive

选测试的数据库:

Use test

然后添加jar包

Add jar /data/zb_test/lixiyuan.jar

然后创建函数

Create temporary function nvls as 'org.apahce.hadoop.hive.ql.udf.MyNvl';

然后就可以测试了

测试成功以后我们就要把集成到hive中去。

3:把函数集成到hive中去

先说一下添加永久函数的思路:首先hive里的函数是跟hive-exec-0.12.0-cdh6.0.0.jar个jar包有关的

具体的说就是我们要做两件事:

1:先修改环境变量vi ./.bashrc。内容修改为为如下:

把CLASSPATH改成如下:

export CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$SQOOP_HOME/lib:/opt/boh-2.0.0/hadoop/share/hadoop/tools/lib/*:/opt/boh-2.0.0/hadoop/share/hadoop/common/lib/*:/opt/boh-2.0.0/hadoop/share/hadoop/common/*:/opt/boh-2.0.0/hive/li

(为一行)

把刚刚写的java文件编译成class文件,然后添加到hive-exec-0.12.0-cdh6.0.0.jar解压后的udf目录下

2:修改hive-exec-0.12.0-cdh6.0.0.jar里的exec目录下的FunctionRegistry文件,但是我们解压出来的是都人家编译好的,所以得需要我们找到源码,找到FunctionRegistry.java文件后,往里面添加:

import org.apache.hadoop.hive.ql.udf.MyNvl;

registerUDF("nvls", MyNvl.class,false);

完成这两个步骤就可以了。

但是问题来了:

完成第一个步骤是简单的,完成第二个步骤就复杂一点了,因为咱们修改了FunctionRegistry.java文件后得编译成class文件以后才能用来替换原来的FunctionRegistry.class文件。所以现在解决的是怎么编译FunctionRegistry.java文件。

3:如何编译FunctionRegistry.java文件:

因为FunctionRegistry.java里面有:import org.apache.hadoop.hive.ql.udf.MyNvl;

registerUDF("nvls", MyNvl.class,false);这样的信息。

所以我们先把刚刚先新建这样的一个目录:

Org/apache/hadoop/hive/ql/udf然后往里面放MyNvl.class文件。

然后把这个org的目录打成jar包。名叫hello.jar

Jar -cvf /data/zb_test/hello.jar /data/zb_test/org/

接着,修改环境变量:

把CLASSPATH改成如下:

export CLASSPATH=/data/zb_test/hello.jar:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$SQOOP_HOME/lib:/opt/boh-2.0.0/hadoop/share/hadoop/tools/lib/*:/opt/boh-2.0.0/hadoop/share/hadoop/common/lib/*:/opt/boh-2.0.0/hadoop/share/hadoop/common/*:/opt/boh-2.0.0/hive/li

然后这样就可以编译FunctionRegistry.java文件了

Javac ./FunctionRegistry.java

然后用生成的FunctionRegistry.class文件替换原来的文件。然后重新把解压的东西打包成:

hive-exec-0.12.0-cdh6.0.0.jar替换hive里原来的就ok了。

感谢各位的阅读!关于"如何自定义hive永久函数"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

文件 函数 编译 目录 内容 步骤 测试 永久 作用 变量 更多 环境 篇文章 需求 有关 不错 复杂 实用 成功 一行 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 乐章幻城和哪个服务器合并了 南京英泰立软件开发 网络安全基石有哪些 如何快速批量修改数据库表 网络安全周手抄报小学生 网络安全的可利用性 深渊服务器手机版我的世界 手机用什么软件开发网站 软件设计数据库流程 千年战国服务器无极仙道 三元达网络技术有限公司 估值 华为路由网络安全设置 马鞍山软件开发培训怎么样 娄底市委网络安全委员会 我的世界国土安全服务器打怪 湖南信息化软件开发过程服务标准 网络安全课程的目标 网络安全文明有关的就行 网络安全大赛和机器人格斗大赛 一诺商城系统软件开发 风口下的网络安全吗 会员功能在数据库如何实现 路由器能作为服务器吗 数据库偶尔出现08001 高要无线网络技术在线咨询 大学本科关于数据库的课程 软件开发小微企业税率 温州网络安全平台 软件开发计算机培训学校可靠吗 通讯网络技术osi
0