随着 maxcompute 2.0 的发布,我们提供了maxcompute studio,一套基于intellij idea的开发插件,让用户在集成开发环境(ide)中更方便地进行sql及用户代码开发。maxcompute studio 为开发者提供了良好的开发体验,支持项目空间浏览、sql 脚本开发,udf开发和调试,作业执行状态展示等功能,本系列将逐一展开进行介绍。
<a href="https://yq.aliyun.com/articles/702244" target="_blank">第一弹 - 元数据浏览</a>
<a href="https://yq.aliyun.com/articles/593609" target="_blank">第二弹 - 玩转sql编辑器</a>
第三弹 - udf开发与调试
<a href="https://yq.aliyun.com/articles/688643" target="_blank">第四弹 - 权限那些事儿</a>
通过maxcompute studio提供的端到端的支持,用户能快速开始和熟悉开发自己的udf和mapreduce,提高效率。下面我们就以一个例子来介绍如何使用studio来开发自己的udf:
依次点击 <code>file | new | module</code> module类型为<code>maxcompute java</code>,配置<code>java jdk</code>。点击next,输入module名,点击finish。studio会帮用户自动创建一个maven module,并引入maxcompute相关依赖,具体请查看pom文件。
至此,一个能开发maxcompute java程序的module已建立,如下图的mdev。主要目录包括:
src/main/java:用户开发java程序源码。
examples:示例代码,包括单测示例,用户可参考这里的例子开发或编写ut。
warehouse:本地运行时需要的schema和data。

假设我们要实现的udf需求是将字符串转换为小写(内建函数tolower已实现该逻辑,这里我们只是通过这个简单的需求来示例如何通过studio开发udf)。studio提供了udf|udaf|udtf|mapper|reducer|driver的模板,这样用户只需要编写自己的业务代码,而框架代码会由模板自动填充。
在src目录右键 new | maxcompute java
输入类名,如myudf.mylower,选择类型,这里我们选择udf,点击ok。
模板已自动填充框架代码,我们只需要编写将字符串转换成小写的函数代码即可。
udf或mr开发好后,下一步就是要测试自己的代码,看是否符合预期。studio提供两种测试方式:
依赖于maxcompute提供的local run框架,您只需要像写普通的单测那样提供输入数据,断言输出就能方便的测试你自己的udf或mr。在examples目录下会有各种类型的单测实例,可参考例子编写自己的unit test。这里我们新建一个mylowertest的测试类,用于测试我们的mylower:
很多用户的需求是能sample部分线上表的数据到本机来测试,而这studio也提供了支持。在editor中udf类mylower.java上右键,点击"运行"菜单,弹出run configuration对话框,配置maxcompute project,table和column,这里我们想将hy_test表的name字段转换为小写:
点击ok后,studio会先通过tunnel自动下载表的sample数据到本地warehouse(如图中高亮的data文件),接着读取指定列的数据并本地运行udf,用户可以在控制台看到日志输出和结果打印:
好了,我们的mylower.java测试通过了,接下来我们要将其打成jar包并发布到服务端。一个udf或mr要想发布到服务端供生产使用,要经历打包 -> 上传 -> 注册三个步骤。针对此,我们提供了一键发布功能(studio会依次执行mvn clean package,上传jar和注册udf三个步骤,一气呵成)。具体的,在udf或mr类上右键(该类必须在src->main->java子目录下且maven module编译成功),选择deploy to server... 菜单,会弹出如下对话框,选择要部署的maxcompute project,输入资源名和函数名,点击ok等待后台完成即可。
上传成功的jar资源和注册成功的function(在project explorer相应project下的resources和functions节点中就能及时看到,双击也能显示反编译的源码)就能够实际生产使用了。我们打开studio的sql editor,就能愉快的使用我们刚写好的mylower函数,语法高亮,函数签名显示都不在话下:
studio对mapreduce的开发流程支持与开发udf基本类似,主要区别有:
mapreduce程序是作用于整张表的,而且输入输出表在driver中已指定,因此如果使用sample数据测试的话在run configuration里只需要指定project即可。
mapreduce开发好后,只需要打包成jar上传资源即可,没有注册这一步。
对于mapreduce,如果想在生产实际运行,可以通过studio无缝集成的console来完成。具体的,在project explorer window的project上右键,选择open in console,然后在console命令行中输入类似如下的命令:
-libjars wordcount.jar -classpath d:odpscltwordcount.jar com.aliyun.odps.examples.mr.wordcount wc_in wc_out;