随着 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;