hive自定义UDF实现md5加密函数
1 pom.xm配置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.itcast</groupId>
<artifactId>UDFtest</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.7.4</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
2 写一个 java 类,继承 UDF,并重载 evaluate 方法
import com.google.common.base.Strings;
import com.google.common.hash.Hashing;
import org.apache.commons.compress.utils.Charsets;
import org.apache.hadoop.hive.ql.exec.UDF;
public class TestMD5 extends UDF {
public static String evaluate(String in){
if(Strings.isNullOrEmpty(in.trim())){
return null;
}
return Hashing.md5().newHasher().putString(in, Charsets.UTF_8).hash().toString();
}
}
3 打成 jar 包上传到服务器
4 将 jar 包添加到 hive 的 classpath
add jar /root/UDFtest-1.0-SNAPSHOT.jar;
5 注册临时函数(用户自定义函数重启之后 就失效)
create temporary function itcastfunc as 'TestMD5';
create temporary function 函数名 as '类全路径';
6 测试
select itcastfunc("wangjie");
+-----------------------------------+--+
| _c0 |
+-----------------------------------+--+
| 209eae20cef54355b3fc1086cb9ceae2 |
+-----------------------------------+--+
1 row selected (0.149 seconds)