Hive1.2开发MD5用户自定义函数UDF

简介: 因为公司使用的Hive版本是1.2,没有自带md5函数, 于是通过开发udf函数来实现该功能。我们使用IDEA和Maven来开发和构建。

因为公司使用的Hive版本是1.2,没有自带md5函数, 于是通过开发udf函数来实现该功能。我们使用IDEA和Maven来开发和构建。

创建项目

打开IntelliJ IDEA。
File => New => Project =>Maven =>勾选 Create from archetype => org.apache.maven.archetypes:maven-archetype-quickstart。
自己配置好groupId和artifactId。

开发编译

添加dependency

<dependency>
  <groupId>org.apache.hive</groupId>
  <artifactId>hive-exec</artifactId>
  <version>0.13.0</versioin>
</dependency>
<dependency>
  <groupId>org.apache.hadoop</groupId>
  <artifactId>hadoop-common</artifactId>
  <version>2.4.0</versioin>
</dependency>

编写代码

package com.company.udf;

import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.hive.ql.exec.UDF;

import java.security.MessageDigest;

public class MD5 extends UDF {

    public String evaluate (final String str) {
        if (StringUtils.isBlank(str)){
            return "";
        }
        String digest = null;
        StringBuffer buffer = new StringBuffer();
        try {
            MessageDigest digester = MessageDigest.getInstance("md5");
            byte[] digestArray = digester.digest(str.getBytes("UTF-8"));
            for (int i = 0; i < digestArray.length; i++) {
                buffer.append(String.format("%02x", digestArray[i]));
            }
            digest = buffer.toString();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return digest;
    }
}

测试MD5

可以在上面的类代码中添加如下代码:

public static void main (String[] args ) {
    MD5 md5 = new MD5();
    System.out.println(md5.evaluate("hello"));
}

编译打包

mvn clean package -DskipTests

注册到Hive

上传jar包到hdfs

在这之前,我们一般会把jar上传到Hive机器的本地文件系统,记住要使用二进制传输方式。如果使用的secureCRT的rz命令,默认为勾选ascii方式,需要取消这个选项。

我们可以用一下命令查看jar包中的类,不报错就说明上传没问题。

jar tf xxx.jar

使用如下命令上传到hdfs:

hadoop fs -put MD5.jar /tmp/udf/

将jar包添加到hive

后面的路径为jar包所在的绝对路径。

hive> add jar hdfs:///tmp/udf/MD5.jar

创建临时UDF

hive> create temporary function md5 as 'com.company.udf.MD5';

创建永久UDF

hive> create function md5 as 'com.company.udf.MD5' using jar 'hdfs:///tmp/udf/MD5.jar';

测试UDF

select md5('hadoop');
--结果: 3abb766da6c2c2d7739f3cb7799a4caa
--删除临时函数
DROP TEMPORARY FUNCTION [IF EXISTS] function_name;
--删除永久函数
DROP FUNCTION [IF EXISTS] function_name;
--重新加载函数 hive1.2.0之后支持
RELOAD FUNCTION;
相关文章
|
6月前
|
SQL 存储 Java
Hive UDF UDTF UDAF 自定义函数详解
Hive UDF UDTF UDAF 自定义函数详解
126 2
Hive UDF UDTF UDAF 自定义函数详解
|
2月前
|
SQL JavaScript 前端开发
用Java来开发Hive应用
用Java来开发Hive应用
36 7
|
2月前
|
SQL JavaScript 前端开发
用Java、Python来开发Hive应用
用Java、Python来开发Hive应用
33 6
|
2月前
|
SQL JavaScript 前端开发
Hive根据用户自定义函数、reflect函数和窗口分析函数
Hive根据用户自定义函数、reflect函数和窗口分析函数
35 6
|
6月前
|
SQL 缓存 Java
Hive 之 UDF 运用(包会的)
Hive的UDF允许用户自定义数据处理函数,扩展其功能。`reflect()`函数通过Java反射调用JDK中的方法,如静态或实例方法。例如,调用`MathUtils.addNumbers()`进行加法运算。要创建自定义UDF,可以继承`GenericUDF`,实现`initialize`、`evaluate`和`getDisplayString`方法。在`initialize`中检查参数类型,在`evaluate`中执行业务逻辑。最后,打包项目成JAR,上传到HDFS,并在Hive中注册以供使用。
169 2
|
6月前
|
SQL Java 程序员
Hive反射函数的使用-程序员是怎么学UDF函数的
Hive反射函数的使用-程序员是怎么学UDF函数的
42 0
|
6月前
|
SQL Java 数据处理
【Hive】Hive的函数:UDF、UDAF、UDTF的区别?
【4月更文挑战第17天】【Hive】Hive的函数:UDF、UDAF、UDTF的区别?
|
6月前
|
SQL 消息中间件 Apache
Flink报错问题之使用hive udf函数报错如何解决
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。本合集提供有关Apache Flink相关技术、使用技巧和最佳实践的资源。
|
6月前
|
SQL 分布式计算 Java
Hive自定义函数UDF编写
Hive自定义函数UDF编写
85 2
|
6月前
|
SQL 搜索推荐 Java
Hive中的UDF是什么?请解释其作用和使用方法。
Hive中的UDF是什么?请解释其作用和使用方法。
91 0
下一篇
无影云桌面