本文以開發WordCount MapReduce作業為例,為您介紹如何通過MaxCompute Studio編寫MapReduce程式及產生JAR包,並在MaxCompute用戶端上運行MapReduce作業。
前提條件
請確認您已滿足如下條件:
已安裝並配置MaxCompute用戶端。
更多安裝並配置MaxCompute用戶端操作,請參見安裝並配置MaxCompute用戶端。
已安裝MaxCompute Studio並串連MaxCompute專案。
更多安裝MaxCompute Studio及串連MaxCompute專案操作,請參見安裝MaxCompute Studio和管理專案串連。
已準備好來源資料檔案並儲存至本地。
本文的樣本資料檔案名稱為data.txt,內容為
hello,odps
,儲存位置為MaxCompute用戶端的bin
目錄。
注意事項
如果您使用Maven開發MapReduce程式,可以從Maven庫中搜尋odps-sdk-mapred、odps-sdk-commons和odps-sdk-core擷取不同版本的Java SDK,pom.xml檔案需要配置的依賴資訊如下。
<dependency>
<groupId>com.aliyun.odps</groupId>
<artifactId>odps-sdk-mapred</artifactId>
<version>0.36.4-public</version>
</dependency>
<dependency>
<groupId>com.aliyun.odps</groupId>
<artifactId>odps-sdk-commons</artifactId>
<version>0.36.4-public</version>
</dependency>
<dependency>
<groupId>com.aliyun.odps</groupId>
<artifactId>odps-sdk-core</artifactId>
<version>0.36.4-public</version>
</dependency>
操作流程
通過MaxCompute Studio編寫、運行調試MapReduce程式。
將編譯成功的WordCount.java指令碼打包為JAR包並上傳至MaxCompute專案中。
基於上傳至MaxCompute專案的JAR包,使用
jar
命令運行MapReduce作業。
步驟一:開發MapReduce程式
建立MaxCompute Java Module。
啟動IntelliJ IDEA,在頂部功能表列,單擊 。
在New Module對話方塊的左側導覽列,單擊MaxCompute Java。
配置Module SDK,單擊Next。
填寫Module name,例如mapreduce,單擊Finish。
編寫並運行調試WordCount MapReduce程式。
在Project地區,按右鍵Module的源碼目錄 ,選擇 。
在Create new MaxCompute java class對話方塊,單擊Driver,並填寫Name,例如WordCount,按Enter鍵。
在建立的WordCount.java指令碼介面,編寫WordCount MapReduce程式,實現統計單詞個數功能。
WordCount完整程式碼範例,請參見程式碼範例。
在左側導覽列的WordCount.java指令碼上,單擊右鍵,選擇Run。
在Run/Debug Configurations對話方塊,配置MaxCompute project為目標MaxCompute專案。
單擊OK,運行並調試WordCount.java指令碼,確保指令碼編譯成功。
步驟二:產生並上傳MapReduce JAR包
在IntelliJ IDEA左側導覽列的WordCount.java指令碼上,單擊右鍵,選擇Deploy to server...。
在Package a jar and submit resource對話方塊,配置打包參數並單擊OK,完成打包及上傳操作。
步驟三:運行MapReduce作業
登入MaxCompute用戶端或在MaxCompute Studio中開啟MaxCompute用戶端。
MaxCompute Studio中整合了MaxCompute用戶端,您可以在MaxCompute Studio中直接運行MaxCompute用戶端。更多資訊,請參見整合MaxCompute用戶端。
建立輸入表和輸出表。
輸入表中的資料為MapReduce作業的來源資料,輸出表中儲存MapReduce作業對輸入表中的資料進行處理後的結果。命令樣本如下。
--建立輸入表wc_in。 create table wc_in (key STRING, value STRING); --建立輸出表wc_out。 create table wc_out (key STRING, cnt BIGINT);
更多建表文法資訊,請參見建立表。
使用Tunnel Upload命令向表wc_in中插入資料。
使用
jar
命令調用產生的JAR包,運行MapReduce作業。命令樣本如下。
jar -resources mapreduce-1.0-SNAPSHOT.jar -classpath mapreduce-1.0-SNAPSHOT.jar com.aliyun.odps.mapred.open.example.WordCount wc_in wc_out;
-resources mapreduce-1.0-SNAPSHOT.jar
:-resources
指定MapReduce作業調用的資源名稱,即步驟二中上傳的JAR包mapreduce-1.0-SNAPSHOT.jar。-classpath mapreduce-1.0-SNAPSHOT.jar
:-classpath
指定MainClass所在JAR包的本地路徑。com.aliyun.odps.mapred.open.example.WordCount
:MapReduce程式中定義的MainClass。wc_in wc_out
:輸入表和輸出表。
更多
jar
命令資訊,請參見文法介紹。執行如下命令查看wc_out表的寫入結果。
select * from wc_out;
返回結果如下。
+------------+------------+ | key | cnt | +------------+------------+ | hello | 1 | | odps | 1 | +------------+------------+