MaxCompute Studio开发Java程序
在使用MaxCompute Studio开发工具之前,需要首先完成IDEA中MaxCompute Studio开发环境的搭建,具体见:MaxCompute基础开发环境搭建 。MaxCompute Studio上Java程序开发流程如下:
- 创建MaxCompute Java Module。
- 开发Java程序。可以开发不同的Java程序:
- 开发UDF(本文内容)
- 开发MapReduce
- 查询非结构化数据
- 开发Graph
- 资源的打包、上传和注册。
- 使用UDF编写SQL。
下面根据以上步骤进行Java UDF的开发内容。
创建MaxCompute Java Module
在完成MaxCompute Studio的开发环境(构建了max-compute-learning项目)之后,需要创建MaxCompute Java Module来开发Java UDF,具体步骤如下:
1. 在创建的max-compute-learning项目中,创建Java Moudle:
在打开的创建选项中,选择MaxCompute Java选项:
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中本地warehouse目录存储MaxCompute项目下的表(包括meta和数据)和资源,用于本地执行UDF或MapReduce。
3. 此外,Moudle的pom.xml文件中会自动加入odps-sdk-udf的相关依赖:
开发并调试Java UDF
开发Java UDF
完成以上Java Module的创建后,开始Java UDF的开发过程。
1. 创建MaxCompute Java UDF:
在出现的创建文件的窗口中,选择文件类型为UDF:
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运行方式
- 在Java目录下,右键单击UDF类,选择Run '类名.main()'。
- 在Run/Debug Configurations页面上配置运行参数。
- 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 Project选择Studio中配置好的远程工作空间,并选择其中的emp表,使用该表的ename数据来进行本地UDF的测试。其中emp表的数据如下:
运行后返回的结果如下:
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 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 > 添加资源。
- 在Add Resource对话框中配置相关信息,单击OK。
- MaxCompute project:指定目标MaxCompute项目的名称。
- Resource file:指定JAR包路径。
- Resource name:输入上传的资源名。
- Force update if already exists:选择当资源或函数已存在时是否强制更新。
资源注册
打包并上传完成后,只是在resource中添加了包含了我们定义的UDF文件,在Functions中还没有创建对应的UDF。因此需要根据上传的资源文件来注册我们需要使用的UDF。
- 顶部菜单栏,单击MaxCompute > 添加资源。
- 在Add Resource对话框中配置相关信息,单击OK。
在显示的窗口中进行设置:
- MaxCompute project:选择要上传的Project名称。
- Force update if already exists:当资源或函数已存在时是否强制更新。
- Main class:JAR的主类。
- Using resources:函数依赖的JAR包名称。
- Function name:函数名称(使用该UDF使的名称)。
点击确定即根据上传的resource创建名为lower_udf的UDF。此时可以在Functions选项中进行查看创建完成的UDF:
使用UDF编写SQL
完成上面的操作后,可以使用刚才创建的名为lower_udf的function来使用上传的UDF。在MaxCompute SQL Script中运行如下命令:
select lower_udf('ABC');
运行成功后,得到的输出结果如下:
_c0
+----+
abc