开发和部署HetuEngine UDF
用户可以自定义一些函数,用于扩展SQL以满足个性化的需求,这类函数称为UDF。
本章节主要介绍开发和应用HetuEngine UDF。
MRS 3.2.1及以后版本,需要基于JDK17.0.4及以上版本开发。本章节以MRS 3.3.0版本为例。
开发HetuEngine UDF项目
本样例实现一个HetuEngine UDF,说明见下表。
名称 |
说明 |
---|---|
AddTwo |
对输入的数字加2后返回 |
- 创建Maven项目,“groupId”配置“com.test.udf”,“artifactId”配置“udf-test”。这个两个值可根据实际情况自定义。
- 修改“pom.xml”文件如下:
<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.test.udf</groupId> <artifactId>udf-test</artifactId> <version>0.0.1-SNAPSHOT</version> <build> <plugins> <plugin> <artifactId>maven-shade-plugin</artifactId> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> </execution> </executions> </plugin> <plugin> <artifactId>maven-resources-plugin</artifactId> <executions> <execution> <id>copy-resources</id> <phase>package</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/</outputDirectory> <resources> <resource> <directory>src/main/resources/</directory> <filtering>false</filtering> </resource> </resources> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>
- 创建HetuEngine UDF实现类。
package com.xxxbigdata..hetuengine.functions; public class AddTwo { public Integer evaluate(Integer num) { return num + 2; } }
- 打包Maven项目,target目录下的“udf-test-0.0.1-SNAPSHOT.jar”文件即为HetuEngine UDF函数包。
- 一个普通HetuEngine UDF必须至少实现一个evaluate()方法,evaluate方法支持重载。
- 当前只支持入参数量小于或等于5个的HetuEngine UDF,大于5个入参的HetuEngine UDF将无法被注册。
- 需要将所有依赖文件都打包到jar包里。
- (可选)若用户存在HetuEngine UDF依赖的配置文件,建议将其作为资源文件放在resources目录下,即可打包到HetuEngine UDF函数包中。
部署HetuEngine UDF
要在HetuEngine中使用HetuEngine UDF,需要用户将相应的UDF函数包上传到指定HDFS路径,例如“/udf/hetuserver”。这个路径可根据实际情况自定义。
- 使用HDFS的页面上传。
- 使用HetuEngine用户登录FusionInsight Manager,选择“集群 > 服务 > HDFS”,进入HDFS服务页面。
- 在概览页签下的“基本信息”区域,单击“NameNode WebUI”后的链接,进入NameNode WebUI界面。
- 选择“/udf/hetuserver”。 ,单击创建
- 进入“/udf/hetuserver”,单击上传UDF函数包。
- 使用HDFS命令行上传。
- 将UDF JAR文件上传到HDFS上自定义的目录存放,要确保用户对JAR文件具有读权限,建议权限设置“chmod 644”。若希望HetuEngine服务在卸载时一并删除UDF JAR文件,那么可以将自定义的目录创建在“/user/hetuserver/”路径中。
- 当前HetuEngine仅支持UDF JAR文件存放在“hdfs://资源URI”的HDFS中。
- 因修改函数或增加函数而导致的重新上传JAR文件,HetuEngine会默认缓存5分钟,不会即时生效,5分钟后才会进行JAR文件的更新和重新加载。
使用HetuEngine UDF
使用客户端访问:
- 进入HetuEngine客户端。
- 执行如下命令创建HetuEngine UDF:
CREATE FUNCTION example.namespace01.add_two ( num integer ) RETURNS integer LANGUAGE JAVA DETERMINISTIC SYMBOL "com.xxx.bigdata.hetuengine.functions.AddTwo" URI "hdfs://hacluster/udf/hetuserver/udf-test-0.0.1-SNAPSHOT.jar";
- 执行如下命令使用HetuEngine UDF:
select example.namespace01.add_two(2); _col0 ------- 4 (1 row)
- 函数实现类中通过重载方法来区分同名的不同函数,在创建HetuEngine UDF时要指定不同的函数名称。