pipeline示例__示例程序_MapReduce_大数据计算服务-阿里云
(1)准备好测试程序jar包,假设名字为mapreduce-examples.jar;
(2)准备好pipeline的测试表和资源;
创建表
create table wc_in (key string, value string); create table wc_out(key string, cnt bigint);
添加资源
add jar mapreduce-examples.jar -f;
(3)使用tunnel导入数据;
tunnel upload data wc_in;
- 导入wc_in表的数据文件data内容为:
hello,odps
测试步骤
在odpscmd中执行WordCountPipeline
jar -resources mapreduce-examples.jar -classpath mapreduce-examples.jar
com.aliyun.odps.mapred.open.example.WordCountPipeline wc_in wc_out;
预期结果
作业成功结束。 输出表wc_out中内容为:
+------------+------------+
| key | cnt |
+------------+------------+
| hello | 1 |
| odps | 1 |
+------------+------------+
代码示例
package com.aliyun.odps.mapred.open.example;
import java.io.IOException;
import java.util.Iterator;
import com.aliyun.odps.Column;
import com.aliyun.odps.OdpsException;
import com.aliyun.odps.OdpsType;
import com.aliyun.odps.data.Record;
import com.aliyun.odps.data.TableInfo;
import com.aliyun.odps.mapred.Job;
import com.aliyun.odps.mapred.MapperBase;
import com.aliyun.odps.mapred.ReducerBase;
import com.aliyun.odps.pipeline.Pipeline;
public class WordCountPipelineTest {
public static class TokenizerMapper extends MapperBase {
Record word;
Record one;
@Override
public void setup(TaskContext context) throws IOException {
word = context.createMapOutputKeyRecord();
one = context.createMapOutputValueRecord();
one.setBigint(0, 1L);
}
@Override
public void map(long recordNum, Record record, TaskContext context)
throws IOException {
for (int i = 0; i < record.getColumnCount(); i++) {
String[] words = record.get(i).toString().split("\s+");
for (String w : words) {
word.setString(0, w);
context.write(word, one);
}
}
}
}
public static class SumReducer extends ReducerBase {
private Record value;
@Override
public void setup(TaskContext context) throws IOException {
value = context.createOutputValueRecord();
}
@Override
public void reduce(Record key, Iterator<Record> values, TaskContext context)
throws IOException {
long count = 0;
while (values.hasNext()) {
Record val = values.next();
count += (Long) val.get(0);
}
value.set(0, count);
context.write(key, value);
}
}
public static class IdentityReducer extends ReducerBase {
private Record result;
@Override
public void setup(TaskContext context) throws IOException {
result = context.createOutputRecord();
}
@Override
public void reduce(Record key, Iterator<Record> values, TaskContext context)
throws IOException {
while (values.hasNext()) {
result.set(0, key.get(0));
result.set(1, values.next().get(0));
context.write(result);
}
}
}
public static void main(String[] args) throws OdpsException {
if (args.length != 2) {
System.err.println("Usage: WordCountPipeline <in_table> <out_table>");
System.exit(2);
}
Job job = new Job();
/***
* 构造Pipeline的过程中,如果不指定Mapper的OutputKeySortColumns,PartitionColumns,OutputGroupingColumns,
* 框架会默认使用其OutputKey作为此三者的默认配置
***/
Pipeline pipeline = Pipeline.builder()
.addMapper(TokenizerMapper.class)
.setOutputKeySchema(
new Column[] { new Column("word", OdpsType.STRING) })
.setOutputValueSchema(
new Column[] { new Column("count", OdpsType.BIGINT) })
.setOutputKeySortColumns(new String[] { "word" })
.setPartitionColumns(new String[] { "word" })
.setOutputGroupingColumns(new String[] { "word" })
.addReducer(SumReducer.class)
.setOutputKeySchema(
new Column[] { new Column("word", OdpsType.STRING) })
.setOutputValueSchema(
new Column[] { new Column("count", OdpsType.BIGINT)})
.addReducer(IdentityReducer.class).createPipeline();
job.setPipeline(pipeline);
job.addInput(TableInfo.builder().tableName(args[0]).build());
job.addOutput(TableInfo.builder().tableName(args[1]).build());
job.submit();
job.waitForCompletion();
System.exit(job.isSuccessful() == true ? 0 : 1);
}
}
最后更新:2016-11-24 11:23:47
上一篇:
分区表输入示例__示例程序_MapReduce_大数据计算服务-阿里云
下一篇:
应用限制__MapReduce_大数据计算服务-阿里云
采集-公网数据__最佳实践_日志服务-阿里云
申请内网连接串(原内外网切换)__实例管理_API 参考_云数据库 RDS 版-阿里云
图文识别异步调用接口__OCR图文识别API_内容检测API文档_阿里绿网-阿里云
错误响应格式__错误响应_API使用手册_消息服务-阿里云
阿里云安全白皮书都有哪些重要内容?
在哪里可以查到SLB的权限定义___负载均衡(SLB)授权问题_授权常见问题_访问控制-阿里云
验证设备有效性__查询相关_API 列表_OpenAPI 2.0_移动推送-阿里云
代码更新__用户手册_持续交付平台-阿里云
单边固定缩略__图片缩放_老版图片服务手册_对象存储 OSS-阿里云
可视化和取证__态势感知场景教程_态势感知-阿里云
相关内容
常见错误说明__附录_大数据计算服务-阿里云
发送短信接口__API使用手册_短信服务-阿里云
接口文档__Android_安全组件教程_移动安全-阿里云
运营商错误码(联通)__常见问题_短信服务-阿里云
设置短信模板__使用手册_短信服务-阿里云
OSS 权限问题及排查__常见错误及排除_最佳实践_对象存储 OSS-阿里云
消息通知__操作指南_批量计算-阿里云
设备端快速接入(MQTT)__快速开始_阿里云物联网套件-阿里云
查询API调用流量数据__API管理相关接口_API_API 网关-阿里云
使用STS访问__JavaScript-SDK_SDK 参考_对象存储 OSS-阿里云