本文以开发WordCount MapReduce作业为例,为您介绍如何通过MaxCompute Studio编写MapReduce程序及生成JAR包,并在MaxCompute客户端上运行MapReduce作业。
前提条件
请确认您已满足如下条件:
已安装并配置MaxCompute客户端。
更多安装并配置MaxCompute客户端操作,请参见安装并配置MaxCompute客户端。
已安装MaxCompute Studio并连接MaxCompute项目。
更多安装MaxCompute Studio及连接MaxCompute项目操作,请参见安装MaxCompute Studio和管理项目连接。
请确保您购买的产品规格非按量计费开发者版。
按量计费开发者版不支持处理MapReduce作业。
已准备好源数据文件并保存至本地。
本文的示例数据文件名称为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 | +------------+------------+