全部产品
MaxCompute

Java SDK

更新时间:2017-06-07 13:26:11   分享:   

简介

在本小节,我们仅会对较为常用的 MaxCompute 核心接口做简短介绍。更多详细信息请参阅 SDK Java Doc

用户可以通过Maven管理配置新SDK的版本。Maven的配置信息如下(最新版本可以随时到 search.maven.org 搜索 odps-sdk-core 获得):

  1. <dependency>
  2. <groupId>com.aliyun.odps</groupId>
  3. <artifactId>odps-sdk-core</artifactId>
  4. <version>0.26.2-public</version>
  5. </dependency>

MaxCompute 提供的 SDK 包整体信息:

包名 描述
odps-sdk-core MaxCompute 的基础功能,例如:对表,Project 的操作,以及 Tunnel 均在此包中 。
odps-sdk-commons 一些 Util 封装
odps-sdk-udf UDF 功能的主体接口
odps-sdk-mapred MapReduce 功能
odps-sdk-graph Graph Java SDK,搜索关键词”odps-sdk-graph”

AliyunAccount

阿里云认证账号 。输入参数为 accessId 及 accessKey,是阿里云用户的身份标识和认证密钥 。此类用来初始化 MaxCompute 。

MaxCompute

MaxCompute SDK 的入口,用户通过此类来获取项目空间下的所有对象集合,包括: ProjectsTablesResourcesFunctionsInstances

备注:

  • MaxCompute 原名 ODPS,因此在现有的 SDK 版本中,入口类仍命名为ODPS 。

用户可以通过传入 AliyunAccount 实例来构造 MaxCompute 对象 。程序示例如下:

  1. Account account = new AliyunAccount("my_access_id", "my_access_key");
  2. Odps odps = new Odps(account);
  3. String odpsUrl = "<your odps endpoint>";
  4. odps.setEndpoint(odpsUrl);
  5. odps.setDefaultProject("my_project");
  6. for (Table t : odps.tables()) {
  7. ....
  8. }

Projects

MaxCompute 中所有项目空间的集合 。集合中的元素为 Project 。程序示例如下:

  1. Account account = new AliyunAccount("my_access_id", "my_access_key");
  2. Odps odps = new Odps(account);
  3. String odpsUrl = "<your odps endpoint>";
  4. odps.setEndpoint(odpsUrl);
  5. Project p = odps.projects().get("my_exists");
  6. p.reload();
  7. Map<String, String> properties = prj.getProperties();
  8. ...

Project

对项目空间信息的描述,可以通过 Projects 获取相应的项目空间 。

SQLTask

用于运行、处理 SQL 任务的接口。可以通过 run 接口直接运行 SQL。run 接口返回 Instance 实例,通过 Instance 获取 SQL 的运行状态及运行结果 。程序示例如下,仅供参考:

  1. import java.util.List;
  2. import com.aliyun.odps.Instance;
  3. import com.aliyun.odps.Odps;
  4. import com.aliyun.odps.OdpsException;
  5. import com.aliyun.odps.account.Account;
  6. import com.aliyun.odps.account.AliyunAccount;
  7. import com.aliyun.odps.data.Record;
  8. import com.aliyun.odps.task.SQLTask;
  9. public class testSql {
  10. private static final String accessId = "";
  11. private static final String accessKey = "";
  12. private static final String endPoint = "http://service.odps.aliyun.com/api";
  13. private static final String project = "";
  14. private static final String sql = "select category from iris;";
  15. public static void
  16. main(String[] args) {
  17. Account account = new AliyunAccount(accessId, accessKey);
  18. Odps odps = new Odps(account);
  19. odps.setEndpoint(endPoint);
  20. odps.setDefaultProject(project);
  21. Instance i;
  22. try {
  23. i = SQLTask.run(odps, sql);
  24. i.waitForSuccess();
  25. List<Record> records = SQLTask.getResult(i);
  26. for(Record r:records){
  27. System.out.println(r.get(0).toString());
  28. }
  29. } catch (OdpsException e) {
  30. e.printStackTrace();
  31. }
  32. }
  33. }

备注:

  • 如果用户想创建表,需要通过 SQLTask 接口,而不是 Table 接口 。用户需要将 创建表(CREATE TABLE) 的语句传入 SQLTask 。

Instances

MaxCompute 中所有实例(Instance)的集合 。集合中的元素为 Instance 。程序示例如下:

  1. Account account = new AliyunAccount("my_access_id", "my_access_key");
  2. Odps odps = new Odps(account);
  3. String odpsUrl = "<your odps endpoint>";
  4. odps.setEndpoint(odpsUrl);
  5. odps.setDefaultProject("my_project");
  6. for (Instance i : odps.instances()) {
  7. ....
  8. }

Instance

对实例信息的描述,可以通过 Instances 获取相应的实例 。程序示例如下:

  1. Account account = new AliyunAccount("my_access_id", "my_access_key");
  2. Odps odps = new Odps(account);
  3. String odpsUrl = "<your odps endpoint>";
  4. odps.setEndpoint(odpsUrl);
  5. Instance ins = odps.instances().get("instance id");
  6. Date startTime = instance.getStartTime();
  7. Date endTime = instance.getEndTime();
  8. ...
  9. Status instanceStatus = instance.getStatus();
  10. String instanceStatusStr = null;
  11. if (instanceStatus == Status.TERMINATED) {
  12. instanceStatusStr = TaskStatus.Status.SUCCESS.toString();
  13. Map<String, TaskStatus> taskStatus = instance.getTaskStatus();
  14. for (Entry<String, TaskStatus> status : taskStatus.entrySet()) {
  15. if (status.getValue().getStatus() != TaskStatus.Status.SUCCESS) {
  16. instanceStatusStr = status.getValue().getStatus().toString();
  17. break;
  18. }
  19. }
  20. } else {
  21. instanceStatusStr = instanceStatus.toString();
  22. }
  23. ...
  24. TaskSummary summary = instance.getTaskSummary("instance name");
  25. String s = summary.getSummaryText();

Tables

MaxCompute 中所有表的集合 。集合中的元素为 Table 。程序示例如下:

  1. Account account = new AliyunAccount("my_access_id", "my_access_key");
  2. Odps odps = new Odps(account);
  3. String odpsUrl = "<your odps endpoint>";
  4. odps.setEndpoint(odpsUrl);
  5. odps.setDefaultProject("my_project");
  6. for (Table t : odps.tables()) {
  7. ....
  8. }

Table

对表信息的描述,可以通过 Tables 获取相应的表 。程序示例如下:

  1. Account account = new AliyunAccount("my_access_id", "my_access_key");
  2. Odps odps = new Odps(account);
  3. String odpsUrl = "<your odps endpoint>";
  4. odps.setEndpoint(odpsUrl);
  5. Table t = odps.tables().get("table name");
  6. t.reload();
  7. Partition part = t.getPartition(new PartitionSpec(tableSpec[1]));
  8. part.reload();
  9. ...

Resources

MaxCompute 中所有资源的集合。集合中的元素为 Resource 。程序示例如下:

  1. Account account = new AliyunAccount("my_access_id", "my_access_key");
  2. Odps odps = new Odps(account);
  3. String odpsUrl = "<your odps endpoint>";
  4. odps.setEndpoint(odpsUrl);
  5. odps.setDefaultProject("my_project");
  6. for (Resource r : odps.resources()) {
  7. ....
  8. }

Resource

对资源信息的描述,可以通过 Resources 获取相应的资源 。程序示例如下:

  1. Account account = new AliyunAccount("my_access_id", "my_access_key");
  2. Odps odps = new Odps(account);
  3. String odpsUrl = "<your odps endpoint>";
  4. odps.setEndpoint(odpsUrl);
  5. Resource r = odps.resources().get("resource name");
  6. r.reload();
  7. if (r.getType() == Resource.Type.TABLE) {
  8. TableResource tr = new TableResource(r);
  9. String tableSource = tr.getSourceTable().getProject() + "."
  10. + tr.getSourceTable().getName();
  11. if (tr.getSourceTablePartition() != null) {
  12. tableSource += " partition(" + tr.getSourceTablePartition().toString()
  13. + ")";
  14. }
  15. ....
  16. }

一个创建文件资源的示例:

  1. String projectName = "my_porject";
  2. String source = "my_local_file.txt";
  3. File file = new File(source);
  4. InputStream is = new FileInputStream(file);
  5. FileResource resource = new FileResource();
  6. String name = file.getName();
  7. resource.setName(name);
  8. odps.resources().create(projectName, resource, is);

一个创建表资源的示例:

  1. TableResource resource = new TableResource(tableName, tablePrj, partitionSpec);
  2. //resource.setName(INVALID_USER_TABLE);
  3. resource.setName("table_resource_name");
  4. odps.resources().update(projectName, resource);

Functions

MaxCompute 中所有函数的集合。集合中的元素为 Function 。程序示例如下:

  1. Account account = new AliyunAccount("my_access_id", "my_access_key");
  2. Odps odps = new Odps(account);
  3. String odpsUrl = "<your odps endpoint>";
  4. odps.setEndpoint(odpsUrl);
  5. odps.setDefaultProject("my_project");
  6. for (Function f : odps.functions()) {
  7. ....
  8. }

Function

对函数信息的描述,可以通过 Functions 获取相应的函数 。程序示例如下:

  1. Account account = new AliyunAccount("my_access_id", "my_access_key");
  2. Odps odps = new Odps(account);
  3. String odpsUrl = "<your odps endpoint>";
  4. odps.setEndpoint(odpsUrl);
  5. Function f = odps.functions().get("function name");
  6. List<Resource> resources = f.getResources();

一个创建函数的示例:

  1. String resources = "xxx:xxx";
  2. String classType = "com.aliyun.odps.mapred.open.example.WordCount";
  3. ArrayList<String> resourceList = new ArrayList<String>();
  4. for (String r : resources.split(":")) {
  5. resourceList.add(r);
  6. }
  7. Function func = new Function();
  8. func.setName(name);
  9. func.setClassType(classType);
  10. func.setResources(resourceList);
  11. odps.functions().create(projectName, func);
本文导读目录
本文导读目录
以上内容是否对您有帮助?