import java.io.FileInputStream;
import java.io.IOException;
import java.util.Iterator;
import javax.mail.Session;
import com.aliyun.odps.Column;
import com.aliyun.odps.JarResource;
import com.aliyun.odps.Odps;
import com.aliyun.odps.OdpsType;
import com.aliyun.odps.TableSchema;
import com.aliyun.odps.account.AliyunAccount;
import com.aliyun.odps.data.Record;
import com.aliyun.odps.data.TableInfo;
import com.aliyun.odps.mapred.JobClient;
import com.aliyun.odps.mapred.Mapper;
import com.aliyun.odps.mapred.MapperBase;
import com.aliyun.odps.mapred.Partitioner;
import com.aliyun.odps.mapred.ReducerBase;
import com.aliyun.odps.mapred.RunningJob;
import com.aliyun.odps.mapred.conf.JobConf;
import com.aliyun.odps.mapred.conf.SessionState;
import com.aliyun.odps.mapred.utils.InputUtils;
import com.aliyun.odps.mapred.utils.OutputUtils;
import com.aliyun.odps.mapred.utils.SchemaUtils;
public class DemoMR {
public static class MyMapper extends MapperBase {
}
public static class MyReducer extends ReducerBase {
}
public static void main(String[] args) throws Exception {
String endpoint = "http://service.odps.aliyun.com/api";
String accessId = "YOUR_ACCESS_ID";
String accessKey = "YOUR_ACCESS_KEY";
String project = "YOUR_PROJECT";
Odps odps = new Odps(new AliyunAccount(accessId, accessKey));
odps.setDefaultProject(project);
odps.setEndpoint(endpoint);
// upload jar as resource
System.err.println("uploading odps-demo.jar ...");
String resName = "odps-demo.jar";
if (odps.resources().exists(resName)) {
odps.resources().delete(resName);
}
JarResource res = new JarResource();
res.setName(resName);
odps.resources().create(res, new FileInputStream("target/odps-demo-1.0.jar"));
// create input/output table
System.err.println("creating input table mr_demo_input ...");
TableSchema inputSchema = new TableSchema();
inputSchema.addColumn(new Column("s", OdpsType.STRING));
odps.tables().create("mr_demo_input", inputSchema, true);
System.err.println("creating output table mr_demo_output ...");
TableSchema outputSchema = new TableSchema();
outputSchema.addColumn(new Column("s", OdpsType.STRING));
outputSchema.addColumn(new Column("i", OdpsType.BIGINT));
odps.tables().create("mr_demo_output", outputSchema, true);
// submit mr job
System.err.println("submitting mr job ...");
SessionState.get().setOdps(odps);
SessionState.get().setLocalRun(false);
JobConf job = new JobConf();
job.setMapperClass(MyMapper.class);
job.setReducerClass(MyReducer.class);
InputUtils.addTable(TableInfo.builder().tableName("mr_demo_input").build(), job);
OutputUtils.addTable(TableInfo.builder().tableName("mr_demo_output").build(), job);
job.setMapOutputKeySchema(SchemaUtils.fromString("s:string"));
job.setMapOutputValueSchema(SchemaUtils.fromString("s:string,i:bigint"));
job.setResources(resName);
RunningJob rj = JobClient.runJob(job);
rj.waitForCompletion();
}
}