按照以下流程操作
1、使用IDEA新建Maven工程udf
2、配置Maven工程的pom.xml,参考《使用IDEA新建MAVEN工程配置》,然后导包
3、新建一个自定义的继承于UDF的子类
4、写入想实现的功能
4.1、导入依赖hive-exec
4.2、在<build>
标签里加入<finalName>myudf</finalName>
,也就是jar包的名字
import java.util.UUID;
public class GeneratorUUID extends UDF {
public String evaluate(){
String uuid = UUID.randomUUID().toString().replaceAll("-", "");
return uuid;
}
}
5、功能测试成功后,右击右侧靠边栏的MavenProjects,点开Lifecycle,双击其中的package,系统就会自动打包生成一个.jar文件(执行包),并给出jar包的路径。
6、进入jar包的文件目录,修改名字为自己想要的名字,或参考4.2的方法改名
7、把jar包通过XFTP拖到虚拟机指定目录(或者,hive文件的子目录lib里(存放jar包的地方))
8、进入hive界面,输入下面两条语句,一条是增加这个依赖jar包,第二条是创建临时函数(毕竟第一次写的函数功能未必强大):
add jar PATH/JAR_NAME;
add jar /opt/software/hadoop/hive110/lib/udf-1.0-xym.jar;
create temporary function FUNCTION_NAME as ‘DIR.PROJECT_NAME.CLASS_NAME’;
create temporary function first_day as 'cn.kgc.myudf.GeneratorUUID ';
8.1、测试jar包的使用,测试成功后即可正常调用了
select guuid();
PS:扩展一下打jar包的方式
-
在生产环境中,很多时候我们需要用到可执行jar包(有main函数的主类),可执行jar包分为胖包和瘦包,点击Project Structure,选Artificts,然后点左上角的+号,Empty为瘦包,只有主类(需要手动添加manifest文件);另一个为胖包,包含依赖。然后在工具栏build一下即可
-
Maven工程双击install即可生成资源包
执行jar包的方式: -
java -jar XXX.jar [参数]:胖包,manifest里有主类
-
java -cp XXX.jar Main_class_path [参数]:瘦包,manifest里没有主类,需要指定
打包插件
<build>
<!--<finalName>test-1.0-SNAPSHOT</finalName>-->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>test.core.Core</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<!--下面是为了使用 mvn package命令,如果不加则使用mvn assembly-->
<executions>
<execution>
<id>make-assemble</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>