MaxCompute Studio开发Java UDF最佳实践

MaxCompute Studio开发Java程序

在使用MaxCompute Studio开发工具之前,需要首先完成IDEA中MaxCompute Studio开发环境的搭建,具体见:MaxCompute基础开发环境搭建 。MaxCompute Studio上Java程序开发流程如下:

  1. 创建MaxCompute Java Module。
  2. 开发Java程序。可以开发不同的Java程序:
    1. 开发UDF(本文内容)
    2. 开发MapReduce
    3. 查询非结构化数据
    4. 开发Graph
  3. 资源的打包、上传和注册。
  4. 使用UDF编写SQL。

下面根据以上步骤进行Java UDF的开发内容。

创建MaxCompute Java Module

在完成MaxCompute Studio的开发环境(构建了max-compute-learning项目)之后,需要创建MaxCompute Java Module来开发Java UDF,具体步骤如下:

1. 在创建的max-compute-learning项目中,创建Java Moudle:

MaxCompute Studio开发Java UDF最佳实践_第1张图片

在打开的创建选项中,选择MaxCompute Java选项:

MaxCompute Studio开发Java UDF最佳实践_第2张图片

Additional Libraries中可以不选择其他的libraries,保持默认即可,然后输入需要创建的Module Name,完成module的创建。

2. 完成MaxCompute Java Module创建后,MaxCompute Studio会自动创建一个Maven Module。Maven Module的目录包括:

  • examples:示例代码,包括单元测试示例。您可以参考示例开发单元测试脚本。
  • src/main/java:开发Java程序的源码。
  • warehouse:本地运行时需要的Schema和Data。

MaxCompute Studio开发Java UDF最佳实践_第3张图片

其中,MaxCompute Studio中本地warehouse目录存储MaxCompute项目下的表(包括meta和数据)和资源,用于本地执行UDF或MapReduce。

3. 此外,Moudle的pom.xml文件中会自动加入odps-sdk-udf的相关依赖:

开发并调试Java UDF

开发Java UDF

完成以上Java Module的创建后,开始Java UDF的开发过程。

1. 创建MaxCompute Java UDF:

MaxCompute Studio开发Java UDF最佳实践_第4张图片

在出现的创建文件的窗口中,选择文件类型为UDF:

MaxCompute Studio开发Java UDF最佳实践_第5张图片

2. 创建完成后,编辑UDF代码:

public class LowerUDF extends UDF {
    // TODO define parameters and return type, e.g:  public String evaluate(String a, String b)
    public String evaluate(String s) {
        if (s == null) {
            return null;
        }
        return s.toLowerCase();
    }
}

调试Java UDF

为了在将UDF上传之前查看UDF运行是否符合预期。需要对UDF进行测试,包含两种方法:单元测试和本地运行两种方式。

本地UDF运行方式

  1. 在Java目录下,右键单击UDF类,选择Run '类名.main()'。
  2. 在Run/Debug Configurations页面上配置运行参数。

MaxCompute Studio开发Java UDF最佳实践_第6张图片

  • MaxCompute project:UDF运行使用的MaxCompute空间。本地运行时选择local。
  • MaxCompute table:UDF运行时需要使用的MaxCompute表的名称。
  • Table columns:UDF运行时需要使用的MaxCompute表的列信息。

以上的运行配置项,就是使用local本地的方式,使用wc_in1表中的col1列的数据,进行UDF的测试,wc_in1的表数据和运行结果如下:

-- 可以在warehouse/__tables__目录下查看wc_in1表的data数据
A1,A2,A3,A4
A1,A2,A3,A4
A1,A2,A3,A4
A1,A2,A3,A4

-- udf运行返回结果如下
a1
a1
a1
a1

UDF使用远程表数据测试

修改上面的运行配置参数,如下:

MaxCompute Studio开发Java UDF最佳实践_第7张图片

这里MaxCompute Project选择Studio中配置好的远程工作空间,并选择其中的emp表,使用该表的ename数据来进行本地UDF的测试。其中emp表的数据如下:

MaxCompute Studio开发Java UDF最佳实践_第8张图片 

运行后返回的结果如下:

smith
allen
ward
jones
martin
blake
clark
scott
king
turner
adams
james
ford
miller

 说明:

  • 本地运行会读取warehouse中指定的表数据作为输入,您可以在控制台查看日志输出。
  • 如果指定的MaxCompute项目的表数据未被下载至warehouse目录中,会先下载数据;如果数据已经下载,则跳过此步骤。

通过单元测试调试UDF

参考examples目录下的单元测试实例,编写自己的测试用例: 

资源的打包、上传和注册

UDF、MapReduce和Graph等Java程序发布到服务端供生产使用前,要经历打包、上传和注册三个步骤。MaxCompute Studio提供了一键发布功能(即在MaxCompute Studio上依次执行mvn clean package,上传jar和注册三个步骤)。

资源打包

1. 右键单击已经编译成功的Java代码,选择Deploy to server…。

2. 在Package a jar and submit resource对话框中,配置相关参数。

MaxCompute Studio开发Java UDF最佳实践_第9张图片

  • MaxCompute project:指定目标MaxCompute项目的名称。
  • Resource name:指定打包的资源名。
  • Function name:指定打包的函数名称。
  • Force update if already exists:选择当资源或函数已存在时是否强制更新。

点击ok之后,MaxCompute会执行maven clean package命令来进行项目的打包,并会自动将指定的resource name的jar文件上传到MaxCompute服务器中。

资源上传

执行完成上面的deploy to server过程后,可以在MaxCompute Studio左侧Project Explorer区域的Resources节点下可以看到这里上传的资源:

MaxCompute Studio开发Java UDF最佳实践_第10张图片

如果没有自动上传,则可以根据如下步骤来进行手动的资源上传:

  1. 在顶部菜单栏,单击MaxCompute > 添加资源。
  2. 在Add Resource对话框中配置相关信息,单击OK。

MaxCompute Studio开发Java UDF最佳实践_第11张图片

  • MaxCompute project:指定目标MaxCompute项目的名称。
  • Resource file:指定JAR包路径。
  • Resource name:输入上传的资源名。
  • Force update if already exists:选择当资源或函数已存在时是否强制更新。

资源注册

打包并上传完成后,只是在resource中添加了包含了我们定义的UDF文件,在Functions中还没有创建对应的UDF。因此需要根据上传的资源文件来注册我们需要使用的UDF。

  1. 顶部菜单栏,单击MaxCompute > 添加资源。
  2. 在Add Resource对话框中配置相关信息,单击OK。

MaxCompute Studio开发Java UDF最佳实践_第12张图片

在显示的窗口中进行设置:

MaxCompute Studio开发Java UDF最佳实践_第13张图片

  1. MaxCompute project:选择要上传的Project名称。
  2. Force update if already exists:当资源或函数已存在时是否强制更新。
  3. Main class:JAR的主类。
  4. Using resources:函数依赖的JAR包名称。
  5. Function name:函数名称(使用该UDF使的名称)。

点击确定即根据上传的resource创建名为lower_udf的UDF。此时可以在Functions选项中进行查看创建完成的UDF:

MaxCompute Studio开发Java UDF最佳实践_第14张图片

使用UDF编写SQL

完成上面的操作后,可以使用刚才创建的名为lower_udf的function来使用上传的UDF。在MaxCompute SQL Script中运行如下命令:

select lower_udf('ABC');

运行成功后,得到的输出结果如下:

_c0
+----+
abc

 

你可能感兴趣的:(MaxCompute)